Записать разностное уравнение рекурсивного фильтра с заданными коэффициентами, зарисовать структурную схему и составить программу реализации в командах процессора ADSP2181.
Номера вариантов и коэффициенты фильтров содержатся
В Таблицах 4 и 5.
Таблица 4.
Предпоследняя цифра номера студенческого билета | Коэффициент | Коэффициент | Коэффициент |
2 | 0,55 | 0,51 | 0,99 |
Таблица 5.
Последняя цифра номера студенческого билета | Коэффициент | Коэффициент |
0 | 0,61 | 0,53 |
Решение.
Несмотря на то, что рекурсивные фильтры второго порядка могут реализовываться в различной форме, чаще всего применяется прямая форма. Структурную схему рекурсивного фильтра второго порядка можно увидеть на рисунке №7.
Рисунок №7. Структурная схема рекурсивного фильтра второго порядка.
Разностное уравнение такого фильтра второго порядка запишется следующим образом: .
В моем случае
Программа реализации рекурсивного фильтра в командах процессора ADSP2181 будет выглядеть следующим образом.
. MODULE biqual_sub
{
Входные параметры:
— входной отсчет,
I0 – буфер линии задержки для ,
,
,
L0=0 — буфер линии задержки (нецикличный),
I1 – описание коэффициентов для каждой биквадратной секции (порядка мантиссы для нормировки результатов после вычисления в отдельных секциях. (коэффициенты представляются в формате 1.15)
L1=0 – в случае 1 секции,
L4=2.5x порядок фильтра или 5x число биквадратных секций.
M0, M4=1 – адресация буферов I0 и I4 идет с шагом 1.
M1=-3 – адресация с обратным шагом (-3).
M3 – длина 1 буфера задержки.
M3=0 – в случае 1 секции.
CNTR – число биквадратных секций, загружаемое в счетчик циклов.
Возвращаемые значения:
— выходные выборки,
I0 – буфер внутренней линии задержки,
L4 – коэффициенты ,
,
,
,
,
I1 – начало буфера масштабных коэффициентов,
I4 – начало буфера коэффициентов фильтра.
Используемые регистры: MX0, MX1, MY0, MR, SE, SR
}
.ENTRY biqual;
Biqual: I0=^линия задержки;
DO PART UNTIL CE
SE=DM(I1, M2)
MX0=DM(I0,M0), MY0=PM(I4,M4);
MR= MX0*MY0(SS), MX1=DM(I0,M0), MY0=PM(I4,M4);
MR= MR+MX1*MY0(SS), MY0=PM(I4,M4);
MR= MR+SR1*MY0(SS), MX0=DM(I0,M0), MY0=PM(I4,M4);
MR= MR+MX0*MY0(SS), MX1=DM(I0,M1), MY0=PM(I4,M4);
DM(I0,M0)=MX1, MR=MR+MX0*MY0(RND);
PART: DM(I0,M0)=SR1, SR=ASHIFT MR1(H1);
DM(I0,M0)=MX0;
DM(I0,M3)=SR1;
RTS;
.ENDMOD;