Методики реализации алгоритмов нерекурсивной и рекурсивной фильтрации на отладочных комплектах ADSPBF-533 EZKIT-Lite (Методические указания к выполнению лабораторных работ № 5, 6), страница 8

Система обработки аудио данных состоит из аудио кодека AD1836 и процессора обработки сигналов ADSP-BF533. схема подключения кодека и процессора показана на рис. 3. Как видно из рисунка для обмена данными необходимо: произвести настройку кодека, используя SPI-совместимый последовательный порт, произвести настройку последовательного порта SPORT0 процессора на обмен данными с кодеком в соответствии режимом настройки самого кодека. При настройке кодека необходимо, перед загрузкой данных, произвести сброс микросхемы. Вывод сброса подключен к порту A микросхемы флеш-памяти, поэтому для сброса кодека необходимо инициализировать внешнюю шину для обмена данными с модулями флеш-памяти. Только после этого возможно получение доступа к выводам портов памяти. Для реализации всех указанных выше процедур использован проект C_Talkthrough_TDM, поставляемый вместе со средой разработки в качестве примера программы настройки процессора на обмен данными с кодеком. В проекте C_Talkthrough_TDM реализованы все функции настройки подсистем процессора и настройка кодека, необходимая для обмена данными. В обработчике прерывания последовательного порта Sport0_RX_ISR() вызывается подпрограмма обработки принятых данных Process_Data(). По умолчанию, в подпрограмме обработки происходит простое присвоение переменным, хранящим передаваемые на кодек значения данных, принятых с кодека. Однако, достаточно просто встроить в указанную подпрограмму код, реализующий необходимую обработку данных. Таким образом, проект C_Talkthrough_TDM представляет собой очень удобную основу  для построения программ обработки сигналов звукового диапазона и он составляет основу проекта, реализующего алгоритм рекурсивного фильтра.

Проект демонстрирующий работу рекурсивного фильтра состоит из следующих файлов: main.c – содержит основную функцию main(), в которой производится вызов подпрограмм настройки всех задействованных подсистем процессора и кодека AD1836 на необходимый режим работы; Initialize.c – содержит реализации всех функций настроек подсистем процессора и кодека; ISR.c – содержит обработчик прерывания последовательного порта SPORT0, в котором вызывается подпрограмма обработки принятых данных Process_Data(); Process_data.c – содержит функцию обработки данных Process_Data() и подпрограмму реализующию алгоритм фильтра с бесконечной импульсной характеристикой iir(), вызываемую из подпрограммы Process_Data(). Также в файле Process_data.c содержаться переменные, определяющие структуру фильтра: длина фильтра – taps, коэффициенты нерекурсивной части фильтра – Bcoeffs[], коэффициенты рекурсивной части фильтра Acoeffs[], линия задержки нерекурсивной части фильтра – Bstate[], линия задержки рекурсивной части фильтра Astate[]. Подпрограмма iir() реализует прямую форму БИХ-фильтра, изображенную на рисунке 2.1. Как видно из рисунка БИХ-фильтр состоит из трех частей: нерекурсивной, состоящей из коэффициентов нерекурсивной части (обозначенных bi) и линии внутреннего состояния нерекурсивной части фильтра; рекурсивной части, состоящей из коэффициентов рекурсивной части (обозначенных ai) и линии внутреннего состояния рекурсивной части фильтра; сумматора, на выходе которого формируется результат фильтрации. Работу фильтра можно описать следующим образом: при поступлении очередного отсчета Xk на вход фильтра происходит умножение его на коэффициент B0 нерекурсивной части фильтра, а также перемножение каждого коэффициента нерекурсивной части фильтра на соответсвующий элемент линии задержки нерекурсивной части, в которой хранятся предудыщие входные отстчеты. Одновременно происходит перемножение всех коэффициентов рекурсивной части фильтра – Ai на соответсвующие элементы линии задержки. Линия задержки рекурсивной части фильтра хранит предыдущие выходные отсчеты фильтра. Результаты всех перемножений поступают на вход сумматора, на выходе которого формируется выходной отсчет фильтра. После этого происходит сдвиг элементов рекурсивной и нерекурсивной части фильтра на один. Нулевому элементу нерекурсивной линии задержки присваивается текущий входной отсчет, а нулевому элементу рекурсивной части – текущий выходной отстчет, т.е. результат работы фильтра. В подпрограмме iir() полностью реализуется описанный выше алгоритм работы БИХ-фильтра. Для примера в проекте представлен рекурсивный фильтр Баттерворта 4 порядка с частотой среза 1 кГц. Коэффициенты фильтра рассчитаны при помощи программы Matlab.