Например TDA7294

Форум РадиоКот • Просмотр темы - Алгоритм скользящего среднего
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Чт апр 18, 2024 04:36:12

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Алгоритм скользящего среднего
СообщениеДобавлено: Пт ноя 10, 2017 20:59:48 
Открыл глаза

Зарегистрирован: Чт сен 12, 2013 14:01:33
Сообщений: 62
Рейтинг сообщения: 0
Здравствуйте, начал читать одну книжку для "детей" можно сказать по ЦОС.
Но дураку сложно понять даже такую книгу)

В общем есть там пример одного из самого распространенного алгоритма фильтрации - скользящее среднее.

Вроде понятно в общем идею, но так как нет примера простого, немного не понятно, какие значения берутся именно и как потом записываются обратно, нужно ли это все делать в отдельном буфере, какой буфер отображать в итоге, если берем программную реализацию и подобные вопросы.

Если можно, приведите пожалуйста реальный пример, со значениями как это будет выглядеть при расчетах.

Буду премного благодарен за любую помощь.

Спасибо


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Алгоритм скользящего среднего
СообщениеДобавлено: Пт ноя 10, 2017 21:13:44 
Друг Кота
Аватар пользователя

Карма: 111
Рейтинг сообщений: 4059
Зарегистрирован: Пт мар 30, 2012 05:17:29
Сообщений: 13469
Откуда: Екатеринбург
Рейтинг сообщения: 0
Самый простой случай фильтрации методом скользящего среднего выполняется так.
Имеется поток данных, поступающих периодически. Имеется также буфер (массив), хранящий несколько, например, десять значений.
Каждый раз при поступлении нового значения самое древнее херится, и таким образом в буфере всегда содержатся десять последних полученных значений. Далее берётся их среднеарифметическое значение и используется.

_________________
ВНИМАНИЕ! Я часто редактирую свои сообщения, поэтому перед ответом мне советую обновить страницу.
За перенос модераторами в МЯВУ тем с моими сообщениями я ответственности не несу.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Алгоритм скользящего среднего
СообщениеДобавлено: Пт ноя 10, 2017 21:25:22 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 2030
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 6618
Откуда: Сердце Пармы
Рейтинг сообщения: 3
Медали: 1
Получил миской по аватаре (1)
Да тут ничего сложного запоминается n последних измерений (нужен массив размера n), для нахождения среднего все элементы массива суммируем и делим на n всё.
остаётся правильно заполнить массив: либо сдвигаем значения (последнее значение пропадает) чтобы освободить первую ячейку (в неё запишется свежепоступившее значение), но это долго (все значения приходится перекладывать), быстрее просто вписывать свежее значение в массив "по кругу" когда круг завершится, свежее значение будет затирать самое старое. (остается запомнить номер последней записанной ячейки, чтобы знать куда писать следующее значение)

Добавлено after 53 seconds:
опять опередили... :)

Добавлено after 3 minutes 8 seconds:
есть ещё Метод экспоненциального сглаживания (его чаще применяют т.к. там массив не нужен) если интересно распишу

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Алгоритм скользящего среднего
СообщениеДобавлено: Пт ноя 10, 2017 22:27:22 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1512
Зарегистрирован: Чт янв 26, 2012 14:44:34
Сообщений: 3633
Рейтинг сообщения: 1
Медали: 1
Мявтор 3-й степени (1)
Ivanoff-iv писал(а):
... быстрее просто вписывать свежее значение в массив "по кругу" когда круг завершится, свежее значение будет затирать самое старое.
Если сделать число элементов n равным степени 2 (n=2^m) то операция добавления нового значения сводится к записи его по адресу указателя, инкременту указателя и операции побитового "и" значения указателя с маской из m единиц (не нужно следить за переполнением). Операция деления на n сводится к операции сдвига вправо на m. Иногда можно просто учесть, что результат умножен на 2^m.

_________________
Like the eyes of a cat in the black and blue...


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Алгоритм скользящего среднего
СообщениеДобавлено: Сб ноя 11, 2017 12:11:09 
Потрогал лапой паяльник
Аватар пользователя

Карма: 20
Рейтинг сообщений: 121
Зарегистрирован: Вс янв 19, 2014 22:41:55
Сообщений: 353
Рейтинг сообщения: 0
Далее берётся их среднеарифметическое значение и используется.

Для больших окон усреднения сумму можно считать в отдельной переменной [достаточного размера] - вычитаем из неё выбрасываемое из буффера значение, прибавляем добавляемое значение, делим сумму на размер окна, не забываем про переходный процесс при запуске фильтра.

_________________
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Алгоритм скользящего среднего
СообщениеДобавлено: Сб ноя 11, 2017 12:21:47 
Друг Кота
Аватар пользователя

Карма: 94
Рейтинг сообщений: 3478
Зарегистрирован: Пн фев 09, 2009 22:19:49
Сообщений: 17503
Откуда: Когда-то был прекрасный город для людей
Рейтинг сообщения: 0
Да зачем так сложно.

Берется один массив, в котором пишутся значения со сдвигом по счетчику. А при расчете делаем выборку нужного количества элементов назад от текущего значения счетчика. На границе массива делаем переход на начало и выборку делаем с учетом перехода.

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

Реализация у меня есть - но только на Паскале. Собственно - даже я тогда просто библиотечную функцию сделал кругового массива для простоты использования.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Алгоритм скользящего среднего
СообщениеДобавлено: Сб ноя 11, 2017 17:49:09 
Потрогал лапой паяльник
Аватар пользователя

Карма: 20
Рейтинг сообщений: 121
Зарегистрирован: Вс янв 19, 2014 22:41:55
Сообщений: 353
Рейтинг сообщения: 0
Да зачем так сложно.

Берется один массив, в котором пишутся значения со сдвигом по счетчику. А при расчете делаем выборку нужного количества элементов назад от текущего значения счетчика. На границе массива делаем переход на начало и выборку делаем с учетом перехода.

В жизни, конечно, всегда есть место подвигу, но если взять ваш вариант за основу, сделать ширину массива равной ширине окна усреднения N, то во-первых, обычное деление индекса по модулю избавит нас от необходимости следить за границами массива, во-вторых снимет необходимость морочиться с "обратным заворотом" на начале массива - результат получается суммированием всех элементов массива и делением на их количество - т.е. тот самый уже озвученные в этой теме "сложный" вариант. А поскольку чем шире N -тем больше нас будут неудовлетворять затраты на арифметику (N сложений + 1 деление на точку) - добавление переменной с текущей суммой снизит затраты к (1 вычитание + 1 сложение + 1 деление на точку) которые от N не зависят.

_________________
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Алгоритм скользящего среднего
СообщениеДобавлено: Сб ноя 11, 2017 20:30:37 
Друг Кота
Аватар пользователя

Карма: 94
Рейтинг сообщений: 3478
Зарегистрирован: Пн фев 09, 2009 22:19:49
Сообщений: 17503
Откуда: Когда-то был прекрасный город для людей
Рейтинг сообщения: 0
У меня длина выборки минимально требовалось 512 отсчётов.
А заказ предписывал аж до 4к иметь... По ТЗ.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Алгоритм скользящего среднего
СообщениеДобавлено: Вс ноя 12, 2017 14:52:25 
Открыл глаза

Зарегистрирован: Чт сен 12, 2013 14:01:33
Сообщений: 62
Рейтинг сообщения: 0
Спасибо огромное за ответы.
Наверное немного неправильно задал вопрос, главный вопрос что выдается на выход после этого фильтра и куда мы записываем среднее значение посчитанное на определенной итерации, в массив который мы использовали для счета этого же среднего ?

Вот к примеру читаем данные флоками определенного размера, обычно размер буфера для чтения больше чем окно для скользящего фильтра и блокирующий вызов.

Код:
short* readBuffer = new short[SIZE_OF_READ_BUFFER];
short* avgBuffer = new short[AVARAGE_FILTER_WINDOW_SIZE];
// Блокирующий вызов, зависаем до поступления новых данных
while(isRunning) {
     int result = source.read(readBuffer,0,SIZE_OF_READ_BUFFER);
     // Что делать дальше ?)
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Алгоритм скользящего среднего
СообщениеДобавлено: Вс ноя 12, 2017 15:36:35 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 2030
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 6618
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
У меня длина выборки... аж до 4к иметь... По ТЗ.
можно в несколько этапов делать,исначала, допустим усреднение 16и, а потом усреднение 256 тех усреднённых...

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Алгоритм скользящего среднего
СообщениеДобавлено: Вс ноя 12, 2017 20:19:24 
Друг Кота
Аватар пользователя

Карма: 94
Рейтинг сообщений: 3478
Зарегистрирован: Пн фев 09, 2009 22:19:49
Сообщений: 17503
Откуда: Когда-то был прекрасный город для людей
Рейтинг сообщения: 0
Нет, там была другая задача - выделение сигнала из шума. Для обсчета расфокусированных реперов. Дробить выборки нельзя.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y