Ограниченное численное интегрирование

Обратите внимание, что я прошу не код, а информацию, возможно, от кого-то, кто уже сталкивался с подобной проблемой.

Я управляю кодом, который выполняется в реальном времени во встроенной системе. По соображениям безопасности необходимо провести новую проверку.

Эта проверка основана на интегрированном значении определенной переменной. Интеграл должен охватывать последние секунды "T_s", т. Е. При каждом новом цикле мне приходится удалять значение, которое переменная имела T_s секунд назад, и добавлять текущее.

Наивным подходом было бы хранить в массиве последние значения частоты с плавающей запятой T_s*.

Работая на частоте 62,5 Гц, это быстро тратит много драгоценной и ограниченной памяти.

Существуют ли известные подходы, которые за счет очевидной потери точности значительно сокращают объем памяти, необходимый для такой проверки?

Значение - это измерение, полученное из реальной системы, оно не генерируется функцией.

Я думал о сохранении N средних значений, каждой из M точек, а затем интегрировании N средних значений, это уменьшит требования к памяти до N+M чисел, которые могут быть значительно меньше частоты T_s*, но мне интересно:

  • если это было изучено и найдена "оптимальная" точка (например, в зависимости от M). Я разгорячился, но, видимо, мой гугл-фу не работает, так как поиск чего-либо, включая "числовую интеграцию", не приводит к тому, что я ищу.

  • если есть лучший подход

Я пометил этот пост буквой C, потому что это официальный язык проекта, и, к сожалению, любое решение, которое не работает в ANSI-C, не подходит для меня.

1 ответ

Кажется, я не могу найти интернет-страницу, где были описаны статистические расчеты только с тремя (?) Переменными. Может быть, вы делаете, когда ваш Google-фу восстанавливается.

Увы, если вам не нужна точность 100%, но вы можете жить со средним значением, вы можете сделать что-то вроде:

avg = (avg * 0.95) + ((newValue - avg) * 0.05);

Это даст вам приблизительное среднее из более старых значений, где самое последнее (newValue) имеет не более 1/20 влияния; результат, умноженный на 20, является тогда вашим средним интегралом. Конечно, вы можете настроить две константы на любое значение 1-(1/N) а также 1/Nсоответственно для любого номера N образцов для рассмотрения.

Редактировать:

"Онлайн" (итератор) алгоритмы для оценки статистической медианы, моды, асимметрии, эксцесса?

а также

https://math.stackexchange.com/questions/106700/incremental-averageing

может иметь несколько полезных ответов тоже.

Другие вопросы по тегам