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

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

FIR Filter Debugging _ Тестирование КИХ фильтра-дециматора разными входными сигналами

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

Способом, описанным в этой статье Export from Matlab_Экспорт из Матлаба требуемой части сигнала , создал несколько тестовых выборок сигнала. Их то и подаю на вход фильтра.



Первая тестовая выборка:


Тот же сигнал, но в Матлабе:




На выходе нашего первого фильтра-дециматора мы должны увидеть что-то подобное:




Входной сигнал - это смесь полезного с паразитными сигналами 13 и 20 кГц. Ниже приведено, как они подключаются в модели :






После подключения входного файла с отсчетами к точке останова и настройки всех графиков в Code Composer Studio, запускаем программу на отладку, и ждем. Стоит отметить, что ждем-с очень долго. Чтобы по данной технологии (с точками останова и загрузкой *.dat файлов) просчитать диапазон сигнала, полученный на картинке ниже - нужно около часа. =) Его можно потратить на оформления результатов и успокоения себя, дабы выйти из эйфорийного состояния, связанного с удачным завершением опытов.


Сравнение с выходом фильтра в Матлабе, дает уверенность в правильной работе (хотя для пущей уверенности позже подадим на него еще функцию Хэвисайда, “единичный скачок”, ступенчатую функцию) - так будет более правильно !



Самое время подать ступенчатую функцию на вход. Для начала в функции main() в месте объявления экземпляра фильтра изменяем коэффициент децимации с 10 на 1 (т.е. фильтра перестанет прореживать выходные отсчеты):
dsp::CFirFilter firFilter( FIR_coeff, BL, 1  );
Полученный отклик фильтра на ступенчатое воздействие: 




Как видим, фильтр устойчивый!
Такой же отклик выдает нам Матлаб (FDAtool) для этого фильтра: 




Теперь изучим импульсную характеристику (Impulse Response) реализованного фильтра. Для этого нужно на вход подать дельта-функцию Дирака, тогда выдаваемые фильтром отсчеты сигнала будут представлять собой импульсную характеристику фильтра. Но тогда придется в функции main() изменить коэффициент децимации с 10 на 1 (т.е. фильтра перестанет прореживать выходные отсчеты) в месте объявления экземпляра фильтра:
dsp::CFirFilter firFilter( FIR_coeff, BL, 1  );

Результаты:





Итого, импульсная характеристика идентична расчетной в FDATool Матлаба:





Для полноты картины мира подадим еще несколько тестовых сигналов: (здесь обратно нужно указать коэффициент децимации, равный 10)





Результат фильтрации: 




В Матлабе аналогичный результат: 




Не стоит переживать, вторая ступень фильтрации-децимации справится с шумом в сигнале (рисунок из модели Симулинка):


Комментариев нет:

Отправить комментарий