3.3.5.    Программная реализация КИХ-фильтра на процессоре DSP с использованием циклических буферов

Подпись:  
Рис. 3.12. Вычисление выходного сигнала КИХ-фильтра 4-го порядка с использованием циклического буфера

В рядах, задаваемых уравнениями КИХ-фильтров, предполагается последовательное обращение к N коэффициентам от h(0) до h(N-1). Соответствующие отсчеты данных циркулируют в памяти. При этом добавляются новые отсчеты данных, которые заменяют самые старые, и каждый раз производится вычисление выходного значения фильтра. Для реализации циклического буфера может использоваться фиксированный объем оперативной памяти (рис. 3.12) для КИХ-фильтра с 4 звеньями.

Самый старый отсчет данных заменяется новым после каждой операции вычисления свертки:

Выборка из четырех последних отсчетов данных всегда сохраняется в оперативной памяти.

Чтобы упростить адресацию, чтение из памяти старых значений начинается с адреса, который следует непосредственно за адресом только что записанного нового элемента выборки. Например, если значение x(4) только что записано в ячейку памяти 0, то значения данных читаются из ячеек 1, 2, 3 и 0. Этот пример может быть расширен применительно к любому числу звеньев фильтра. Используя адресацию ячеек памяти таким способом, адресный генератор должен лишь вычислять последовательные адреса, независимо от того, является ли данная операция чтением памяти или записью. Такой буфер в памяти данных называется циклическим, потому что, когда достигается его последняя ячейка, указатель автоматически позиционируется на начало буфера.

Выборка коэффициентов из памяти осуществляется одновременно с выборкой данных. В соответствии с описанной схемой адресации самый старый отсчет данных выбирается первым. Поэтому сначала должна осуществляться выборка из памяти последнего коэффициента. При использовании адресного генератора, поддерживающего инкрементную адресацию, коэффициенты могут быть сохранены в памяти в обратном порядке: h(N-1) помещается в первую ячейку, а h(0) – в последнюю. И наоборот, коэффициенты могут быть сохранены в порядке возрастания их номеров, если использовать адресный

генератор, поддерживающий декрементную адресацию. В примере (см. рис.3.12), коэффициенты сохранены в обратном порядке.

Для этих операций используется простая итоговая блок-схема, представленная в виде псевдокода программы фильтра, использующей DSP-процессор с циклической буферизацией:

1. получение отсчета от АЦП (обычно по прерыванию);

2. помещение отсчета в циклический буфер входного сигнала;

3. обновление указателя циклического буфера входного сигнала;

4. обнуление аккумулятора;

5. осуществление фильтрации (цикл по всем коэффициентам);

6. выборка коэффициента из циклического буфера коэффициентов ;

7. обновление указателя циклического буфера коэффициентов;

8. выборка отсчета из циклического буфера входного сигнала;

9. обновление указателя циклического буфера входного ;

10. умножение коэффициента на отсчет;

11. добавление нового слагаемого к промежуточному;

12. выдача отфильтрованного отсчета на ЦАП.

Подпись: .MODULE 		fir_sub;
{ 			FIR Filter Subroutine 
Calling Parameters 
I0 --> Oldest input data value in delay line 
I4 --> Beginning of filter coefficient table 
L0 = Filter length (N) 
L4 = Filter length (N) 
M1,M5 = 1 
CNTR = Filter length - 1 (N-1) 
Return Values 
MR1 = Sum of products (rounded and saturated) 
I0 --> Oldest input data value in delay line 
I4 --> Beginning of filter coefficient table 
Altered Registers 
MX0,MY0,MR 
Computation Time 
(N - 1) + 6 cycles = N + 5 cycles 
All coefficients are assumed to be in 1.15 format. } 
.ENTRY 			fir; 
®	fir: 			MR=0, MX0=DM(I0,M1), MY0=PM(I4,M5)
®				CNTR = N-1;
®				DO convolution UNTIL CE;
®	convolution: 		MR=MR+MX0*MY0(SS), MX0=DM(I0,M1), MY0=PM(I4,M5);
®					MR=MR+MX0*MY0(RND);
®				IF MV SAT MR;
®				RTS;
.ENDMOD;
Для DSP-процессоров компании Analog Devices все операции, выполняемые за один цикл фильтра, производятся за один командный цикл процессора, благодаря чему существенно увеличивается эффективность вычислений. Это преимущество известно как реализация циклов без дополнительных операций. Ассемблерный код КИХ-фильтра для семейства процессоров ЦОС ADSP-21XX с фиксированн