Автор: Поздеев Андрей
            При разработке электронных устройств на микроконтроллерах (далее МК) иногда возникает необходимость фильтровать тот или иной поток данных. Одним из часто встречающихся потоков данных являются данные с  АЦП. Очевидно, что фильтровать сигнал в таких приложениях возможно, как до аналогово-цифрового преобразования, так и после. При широком спектре помех в сигнале необходимо применение фильтров высокого порядка в таких случаях рационально фильтровать сигнал после преобразования, возлагая на аналоговую часть масштабирование сигнала и предварительную фильтрацию с использованием пассивных RC фильтров первого порядка. Предварительная фильтрация нужна для ограничения ширины спектра преобразуемого сигнала.
            В рамках данной статьи будет рассмотрен цифровой фильтр, уравнение которого в z виде имеет вид:
                                         (1)
где OSR - количество выборок фильтра; n - порядок фильтра.
            Далее мы увидим, что, не смотря на кажущуюся сложность, данный фильтр достаточно прост в реализации.
            Для реализации фильтра в среде Simulink математического пакета MathLab уравнение (1) можно представить как произведение элементарных звеньев:
      (2)
            Звенья 
 и 
 представляют собой цифровой интегратор и дифференциатор соответственно.
            Математически цифровой интегратор может быть представлен в виде
                                                             (3)
            где In - текущий результат интегрирования; In-1 - результат интегрирования в предыдущем шаге; in - текущие значение потока данных.
            Математически цифровой дифференциатор может быть представлен в виде
                                                     (4)
где In - текущий результат дифференцирования; in-OSR - значение в потоке OSR шагов назад; in - текущие значение потока данных
            Тогда вариант реализации функциональной схемы фильтра второго порядка с числом выборок фильтра OSR=32  в среде Simulink будет иметь вид, приведенный на рис. 1:

Рисунок 1 -  Цифровой фильтр второго порядка в среде Simulink
            Блоки Delay1, Delay3 и Delay, Delay2 формируют задержку 1 и 32 тактов соответственно, блоки Quantizer квантуют сигнал по уровню 1, т.е. входными и выходными значениями являются целые числа.
            Реакция цифрового фильтра рис. 1 на ступенчатое изменение сигнала приведена на рис. 2:

Рисунок 2 - Реакция цифрового фильтра второго порядка на ступенчатое изменение сигнала
            Практическая реализация функциональной схемы фильтра рис. 1 представляет сложности, что связано с неизбежным насыщением интегратора. Для решения этой проблемы преобразуем уравнение (2) к виду:
    (5)
            Функциональная схема в среде Simulink такого представления цифрового фильтра первого порядка с числом выборки OSR=16 приведена на рис. 3:

Рисунок 3 - Цифровой фильтр первого порядка
            Таким образом, звено первого порядка рассматриваемого фильтра представляет собой среднее арифметическое значение последних OSR значений потока данных.
            Вариант реализация уравнения (5) на языке Си приведен ниже:
#define  FILTR_OSR  16
#define  FILTR_ORDER 2
...
unsigned char FiltrData(unsigned char data)
{
static unsigned char bufFiltr[FILTR_ORDER][FILTR_OSR],                                                                                                                                                                            nbufFiltr[FILTR_OSR];
 unsigned int iFiltr[FILTR_ORDER];
 unsigned char n, m;
 
 for(m = 0; m < FILTR_ORDER; m++)
 {
  iFiltr[m] = 0;
  for(n = 0; n < FILTR_OSR; n++)
  {
   iFiltr[m] += bufFiltr[m][n];
  }
   iFiltr[m] = iFiltr[m] / FILTR_OSR;
   if(m == 0) {bufFiltr[m][nbufFiltr[m]] = data;}
   else {bufFiltr[m][nbufFiltr[m]] = iFiltr[m-1];}
   if(nbufFiltr[0] == FILTR_OSR) {nbufFiltr[m] = 0;}
   else {nbufFiltr[m]++;}
 }
   return (unsigned char)iFiltr[(FILTR_ORDER - 1)];
}
            Размер типа char в функции FiltrData 1 байт, тип int 2 байта. Переменные макросы FILTR_OSR и FILTR_ORDER определяют число выборок и порядок фильтра соответственно.
            Из примера реализации видно, что повышение порядка фильтра не представляет сложности, однако необходимо учитывать производительность цифрового устройства, в котором применяется фильтр, чтобы время вычисления функции было меньше времени квантования аналогового сигнала. Кроме того необходимо учитывать объем резервируемой оперативной памяти т.к. массивы bufFiltr и nbufFiltr определенны с квалификатором static они сохраняют свое значение при последующем вызове и зарезервированная область не может использоваться другими функциями.
            Объём резервируемой памяти в байтах определяется выражением:
   (6)
            Для наглядности работы цифрового фильтра произведем моделирование его работы при подаче на его вход суммы постоянного сигнала значением 100 и случайной помехи частотой 1 кГц и амплитудой 10. Результат моделирования цифрового фильтра с числом выборок OSR  = 32 и временем квантования 106 мкс приведен на рис. 4:

Рисунок 4 - Результат моделирования работы цифрового фильтра (Синий - входной сигнал; Зелёный - выход фильтра 1-го порядка; Красный - выход фильтра 2-го порядка)
            Амплитудно-частная характеристика (далее АЧХ) цифрового фильтра, имеет вид:
               (7)
где M - число выборок фильтра OSR ; k - порядок фильтра; f - входная частота фильтра; fs - частота квантования по времени, величина обратная периоду квантования.
            АЧХ цифрового фильтра с числом выборок OSR  = 32 и временем квантования 106 мкс приведена на рис. 5, соответствующая логарифмическая частотная характеристика (далее ЛАЧХ) изображена на рис. 6. Частота на обоих графиках представлена в герцах.

Рисунок 5 - АЧХ цифрового фильтра (Красный - 2-го порядка; Синий - 3-го порядка; Зелёный - 4-го порядка)
 
Рисунок 6 -  ЛАЧХ цифрового фильтра (Красный - 2-го порядка; Синий - 3-го порядка; Зеленый - 4-го порядка)
            Промоделируем работу цифрового фильтра применительно к  достаточно распространенному МК ATmega8 фирмы ATMEL. Моделирование производилось в среде Proteus. Данные с АЦП передаем в функцию фильтра, а результат записываем в быстродействующий ЦАП. Схема приведена на рис. 7:

Рисунок 7 - Схема моделирования работы цифрового фильтра
            Тактовая частота МК 8 МГц, период квантования с учетом задержки записи в ЦАП 235 мкс, фильтр 2-го порядка число выборок фильтра OSR  = 16. Результат реакции фильтра на ступенчатое изменение сигнала приведен на рис. 8:

Рисунок 8 - Реакция цифрового фильтра 2-го порядка на ступенчатое изменение сигнала
            Анализ полученных данных, в том числе и АЧХ, показывает, что рассмотренный цифровой фильтр обеспечивает высокое затухание, при отсутствии колебательности реакции на ступенчатое воздействие характерное для аналоговых фильтров. Рассмотренный фильтр может быть реализован даже на 8-ми разрядных микроконтроллерах с относительно низким быстродействием.
            Данный фильтр рекомендуется применять для приложений, где требуется определение средней величины действующего значения сигнала, выделения его постоянной составляющей.
Обсуждение статьи на форуме
Copyright ©  Лаборатория Ирбиcов - Мягкой поступью к вершинам знаний и мастерства Все права защищены.