Нравится? Делимся информацией!

среда, 12 декабря 2012 г.

FIR filter Algorithm _ Разработка алгоритма работы КИХ фильтра-дециматора на кольцевом буфере

предыдущий пост << Create FIR filter C++ _ Создание КИХ фильтра на С++. Реализация класса, интерфейса класса.

Для организации достаточно эффективной реализации КИХ фильтра требуется реализовать “кольцевой буфер”( см. Работа с кольцевым буфером  ). Этот буфер будет располагаться внутри класса фильтра. Размер его равен числу коэффициентов КИХ фильтра. Создается он динамически. Помимо него еще потребуется использование двух лишних переменных-индексов для передвижения по массиву, скажем, m_indexIn и m_indexOut .




Вспоминая теорию, строим иллюстрацию нашего алгоритма (использовал в своем дипломе):


Сам алгоритм выглядит так: 




По кольцевому буферу делаем простенькую программу для проверки своей идеи в Microsoft Visual C++ 2010 Express Edition:

#include <iostream>

//первая ступень фильтрации-децимации имеет такой размер
const int m_coeffAmounts = 68;
int buff_FIFO[ m_coeffAmounts ];

int main() {

   //заполнение буфера
   for( int i = 0; i < m_coeffAmounts; ++i) {
   buff_FIFO[ i ] = i;
   }

   int result;
   int idx = 3;
   for(int  i = 0; i < m_coeffAmounts; ++i, --idx ) {
   result = buff_FIFO[ ( idx + m_coeffAmounts ) % m_coeffAmounts ];
   std::cout << result << std::endl;
   }

   std::cin.get();
   return 0;
}
Примечание: если индекс увеличивать ++idx, то обход буфера будет проходить от меньшего индекса к большему по кругу, если  --idx, то наоборот - от большего к меньшему.
Результат выполнения: 



Данный подход использую и в программе для КИХ фильтра. О круговых буферах (круговой адресации) можно почитать у Айфичера 12.5.1  “Цифровая КИХ фильтрация”.
Видение того, как должна происходить работа КИХ фильтра-дециматора, отображено в анимации алгоритма работы:


Сам алгоритм работы в виде блок-схемы с соответствующим им кодом, представлен ниже:





1 комментарий:

  1. хороший материал о Кольцевом Буфере, оформленном как сущность (в виде шаблона) -
    http://we.easyelectronics.ru/Soft/kolcevoy-bufer-na-s-dlya-mk.html

    ОтветитьУдалить