- •4Министерство цифрового развития, связи и массовых коммуникаций российской федерации
- •Московский технический университет связи и информатики
- •Курсовая работа
- •Проектирование ких-фильтра
- •Исходные данные
- •Вычисление коэффициентов
- •Код математического пакета Scilab
- •Разработка программы на языке ассемблера процессора adsp-2181
- •Проверка проделанной работы
- •Проектирование бих-фильтра
- •Исходные данные
- •Вычисление коэффициентов
- •Разработка программы на языке ассемблера процессора adsp-2181
- •Результаты работы программы
Вычисление коэффициентов
Для расчёта коэффициентов БИХ-фильтра была написана программа в математическом пакете Scilab:
[hz] = iir(4, 'hp', 'cheb2', [500/8000], [.2, .03]);
[hzm, fr] = frmag(hz, 256);
plot2d(fr, hzm);
С помощью данной программы была получена следующая передаточная функция:
(11)
где коэффициенты числителя — это b-коэффициенты фильтра, коэффициенты знаменателя – a-коэффициенты фильтра.
При этом получится следующая АЧХ:
Рисунок 8. АЧХ БИХ-фильтра
Разработка программы на языке ассемблера процессора adsp-2181
.section/dm vars;
.var/circ coef_b[5] = 2694, -10362, 15343, -10362, 2694;
.var/circ coef_a[5] = 4096, -12437, 14900, -8250, 1772;
.var/circ simples[5] = 0, 0, 0, 0, 0;
.var/circ feedback[5] = 0, 0, 0, 0, 0;
.section/pm program;
jump main; rti; rti; rti;
rti; rti; rti; rti;
rti; rti; rti; rti;
rti; rti; rti; rti;
rti; rti; rti; rti;
rti; rti; rti; rti;
rti; rti; rti; rti;
rti; rti; rti; rti;
rti; rti; rti; rti;
rti; rti; rti; rti;
jump iir; rti; rti; rti;
rti; rti; rti; rti;
main:
ena m_mode;
mr = 0;
I0 = simples;
L0 = length(simples);
I1 = coef_b;
L1 = length(coef_b);
I2 = feedback;
L2 = length(feedback);
I3 = coef_a;
L3 = length(coef_a);
M1 = 1;
M0 = 0;
ar = 4;
dm(0x3ffb) = ar;
ar = 999;
dm(0x3ffc) = ar;
dm(0x3ffd) = ar;
ifc = 0x00ff; nop;
ena timer;
imask = b#0000000001; nop;
end: jump end;
iir:
mr = 0;
CNTR = 4;
do c1 until CE;
mx0 = dm(I0, M1);
my0 = dm(I1, M1);
c1: mr = mr + mx0 * my0 (ss);
mx0 = dm(I0, M0);
my0 = dm(I1, M1);
mr = mr + mx0 * my0 (ss);
ax0 = IO(0);
dm(I0, M0) = ax0;
CNTR = 4;
do c2 until CE;
mx0 = dm(I2, M1);
my0 = dm(I3, M1);
c2: mr = mr + mx0 * my0 (ss);
mx0 = dm(I2, M0);
my0 = dm(I3, M1);
mr = mr + mx0 * my0 (ss);
mr = mr (rnd);
if mv sat mr;
dm(I2, M0) = mr1;
IO(1) = mr1;
rti;
Результаты работы программы
Проверим правильность работы фильтра. Для этого сформируем и подадим на вход фильтра сигнал длительностью в 0.5 секунды, имеющий постоянную амплитуду и линейное нарастание частоты от 0 до 4 кГц. В результате получим сигнал, повторяющий АЧХ, что свидетельствует о корректой работе программы.
Рисунок 9. ЛЧМ сигнал на выходе фильтра
Москва 2023