Программирование DSP Простой цифровой фильтр EMA Fri, August 08 2025  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Простой цифровой фильтр EMA Печать
Добавил(а) microsin   

Здесь приведена реализация простого цифрового фильтра (перевод статьи [1]), который удобно применять с микроконтроллерами для организации сенсорного ввода. Это так называемый фильтр экспоненциального скользящего среднего (Exponential Moving Average, EMA [2], который также в терминологии DSP называют фильтром с бесконечной импульсной характеристикой, БИХ-фильтром (Infinite-Impulse Response, IIR). Достоинство EMA-фильтра в том, что он требует совсем немного вычислительной мощности и немного оперативной памяти, что особенно важно для микроконтроллеров.

[Что такое фильтр?]

Фильтры используются для удаления определенных частот из сигнала. Давным давно Джозеф Фурье догадался, что любой сигнал можно представить суммой простых синусоидальных сигналов с разными частотами. Это дало инженерам мощный инструментарий (наподобие быстрого преобразования Фурье, БПФ), и мы способны понимать и разрабатывать фильтры. Для примера рисунок ниж показывает фильтр низких частот, ФНЧ. Он пропускает низкие частоты и блокирует высокие частоты.

EMA LPF fig01

Аналоговые фильтры характеризуются частотной характеристикой, т. е. как они ослабляют или пропускают разные частоты (magnitude response, или АЧХ) и сдвигом фазы сигнала (phase response, ФЧХ). Для показанной выше схемы характеристика АЧХ следующая (это фильтр низких частот, ФНЧ):

EMA LPF fig02

По оси x на этом графике шкала логарифмическая (каждая отметка по весу в десять раз больше предыдущей). По оси y шкала в децибелах dBV [3] (логарифмическое измерение напряжения). Частота среза у этого фильтра 160 Гц, когда со входа на выход передается меньше половины мощности на этой частоте (это также точка, на которой величина выходного сигнала становится по уровню -3dBV).

Показанный выше ФНЧ отлично подходит для обработки сигналов, подлежащих дискретизации с использованием АЦП микроконтроллера. АЦП захватывает только частоты, которые составляют до половины частоты дискретизации. Если АЦП делает 320 отсчетов в секунду, сигнал должен быть по частоте меньше 160 Гц. Если сигнал не фильтруется выше 160 Гц, эти более высокие частоты будут перекрываться с более низкими частотами. Это феномен, известный как алиасинг, он является математическим побочным эффектом цифровой выборки сигнала.

Цифровые фильры. Это фильтры, реализованные на основе математических вычислений вместо использования аналоговых компонентов. Их реализация подразумевает предварительную оцифровку сигнала с помощью АЦП, и последующую вычислительную обработку данных сигнала программным алгоритмом. Существуют 2 основных разновидности фильтров: FIR и IIR.

FIR. Finite Impulse Response (FIR) фильтры используют конечное количество выборок для генерации из них выходного сигнала. Пример простого FIR ФНЧ - скользящий усредняющий фильтр (simple moving average). Такие фильтры не только срезают высокие частоты благодаря "сглаживанию", но также могут повысить разрядность аналого-цифрового преобразования [4]. В названии FIR-фильтра используется слово "finite", потому что выход фильтра определяется по конечному количеству входных выборок. Например, 12-точечный фильтр скользящего среднего суммирует 12 последних выборок, а затем делит их на 12.

Выходной сигнал БИХ-фильтров (IIR) определяется (вплоть до) бесконечным числом входных выборок.

IIR. Infinite Impulse Response (IIR) фильтры это такой тип цифровых фильтров, у которых на выход влияет бесконечное количество входных выборок сигнала. Exponential moving average (EMA) фильтр относится к IIR ФНЧ фильтрам.

EMA. Exponential moving average (EMA) фильтр для вычисления среднего значения применяет экспоненциально изменяющуюся величину к каждой выборке входного сигнала. Хотя это звучит как что-то слжное, но на практике алгоритм вычисления получается простой, и на языке DSP называется "уравнением разности" (difference equation):

y[n]=y[n−1]⋅(1−α)+x[n]⋅α

Здесь:

y это выход фильтра
n обозначает номер выборки сигнала
x входной сигнал
α константа, от которой зависит частота среза фильтра (может быть в диапазоне от 0 до 1).

На следующем рисунке показана АЧХ фильтра для α=0.5 и частоты дискетизации 1000 Гц.

EMA LPF fig03

Значения по оси y указаны в децибелах, по оси x шкала логарифмическая в диапазоне от 0.5 до 500 Гц.

EMA-фильтр отлично подходит для встраиваемых решений по 2 причинам. Во-первых, просто настроить частоту среза. Уменьшение значения α понижает частоту среза фильтра, вы можете увидеть разницу на следующей картинке, где α=0.1.

EMA LPF fig04

Во-вторых, EMA просто кодируется и требует для себя совсем немного ресурсов процессора (вычислительной мощности и памяти). Используется 2 операции умножения и одна операция сложения для каждого вывода, операции для округления чисел с фиксированной запятой игнорируются. Только самая последняя выбора должна быть сохранна в RAM. Это существенно меньше, чем использование простого фильтра скользящего среднего с N точками, который требует N операций умножения и сложения, а также N выборок для сохранения в ОЗУ. Следующий код реализует фильтр EMA, используя 32-разрядную математику с фиксированной точкой.

#define DSP_EMA_I32_ALPHA(x) ( (uint16_t)(x * 65535) )

int32_t dsp_ema_i32 (int32_t in, int32_t average, uint16_t alpha ) {
if ( alpha == 65535 )
return in;
int64_t tmp0;
tmp0 = (int64_t)in * (alpha+1) + average * (65536 - alpha);
return (int32_t)((tmp0 + 32768) / 65536); }

Пример, как использовать функцию фильтра dsp_ema_i32:

int32_t my_avg_func(void)
{
static int32_t average = 0;
int32_t adc_value;
adc_value = read_the_adc_value();
average = dsp_ema_i32(adc_value, average, DSP_EMA_I32_ALPHA(0.1));
return average; }

[Ссылки]

1. An Easy-to-Use Digital Filter site:blog.stratifylabs.co.
2. Экспоненциальные фильтры скользящего среднего.
3Что такое децибел?
4Улучшение оцифровки с помощью передискретизации и усреднения.

 

Добавить комментарий


Защитный код
Обновить

Top of Page