Курсовая от Мирошниченко (почти задание Шаврина) 2023 весна / Курсовая от Мирошниченко (почти задание Шаврина)
.pdfc.title.font_size=4 c.x_label.font_size=4 c.y_label.font_size=4
scf(3) xgrid()
xtitle('Im[H(F)]','Frequency [Hz]','b*(F)') plot(F,Im)
d=get('current_axes') d.children(1).children.thickness=4 d.title.font_size=4 d.x_label.font_size=4 d.y_label.font_size=4
IX = ifft(Hfunc)
scf(4) xgrid()
xtitle('IX','i[samples]','h(t)') plot([0:79],imag(IX)) plot([0:79],real(IX),'r') e=get('current_axes') e.children(1).children.thickness=4 e.children(2).children.thickness=4 e.title.font_size=4 e.x_label.font_size=4 e.y_label.font_size=4
rex=real(IX)*32768 rex=rex' imx=imag(IX)*32768 imx=imx'
q1='g_re.dat'; fprintfMat(q1,round(rex),'%5.0f') q2='g_im.dat'; fprintfMat(q2,round(imx),'%5.0f') editor(q1)
editor(q2)
1.4 Разработка программы на языке ассемблера процессора ADSP-2181
.section/dm vars;
.var/circ coef[80] = 97 , 27 , -22 , -125 , -43 , -72 , 51 , 68 , 77 , 32 , 5 , -106 , -21 , -88 , 39 , 47 , 70 , 36 , 32 , -115 , 13 , -126 , 45 , 30 , 70 , 37 , 86 , -188 , 126 , -263 , 121 , -12 , 77 , -7 , 405 , -954 , 1589 , -2620 , 3284 , -3859 , 4193 , -3780 , 3390 , -2560 , 1555 , -1069 , 278 , - 56 , 159 , 177 , 309 , -215 , -57 , -571 , -307 , -53 , 621 , 1456 , 2370 , 2872 , 3261 , 2883 , 2356 , 1462 , 621 , -42 , -354 , -471 , -204 , -57 , 193 , 220 , 159 , 19 , -76 , -187 , -76 , -65 , 84 , 106;
.var/circ simples[80] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
11
.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 fir; rti; rti; rti; rti; rti; rti; rti;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
main:
ena m_mode; mr = 0;
I0 = simples;
L0 = length(simples);
I1 = coef;
L1 = length(coef);
M0 = 1;
M2 = 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; fir:
mr = 0; CNTR = 79;
do c1 until CE; mx0 = dm(I0, M0); my0 = dm(I1, M0);
c1: mr = mr + mx0 * my0 (ss); mx0 = dm(I0, M2);
my0 = dm(I1, M0);
12
mr = mr + mx0 * my0 (ss); ax0 = IO(0);
dm(I0, M2) = ax0;
mr = mr (rnd); if mv sat mr; IO(1) = mr1; rti;
1.5 Проверка проделанной работы
Проверим правильность работы фильтра. Для этого сформируем и подадим на вход фильтра сигнал длительностью в 1 секунду, имеющий постоянную амплитуду и линейное нарастание частоты от 0 до 4 кГц.
Рисунок 6. ЛЧМ сигнал на входе фильтра
После отработки программы на выходе фильтра получим сигнал, совпадающий с заданной АЧХ:
Рисунок 7. ЛЧМ сигнал на выходе фильтра
13
2.Проектирование БИХ-фильтра
2.1Исходные данные
Втаблице 1 приведены исходные данные для синтеза БИХ-фильтра:
Таблица 3. Исходные данные БИХ-фильтра
Вид |
Тип |
Неравномерность |
Неравномерность |
Частота |
Порядок |
Частота |
фильтра |
фильтра |
в полосе |
в полосе |
среза |
фильтра |
дискретизации |
|
|
пропускания |
задерживания |
|
|
|
|
|
|
|
|
|
|
Чебышев |
ФВЧ |
3 дБ |
20 дБ |
500 Гц |
4 |
8 кГц |
2-го |
|
|
|
|
|
|
|
|
|
|
|
|
|
2.2 Вычисление коэффициентов
Для расчёта коэффициентов БИХ-фильтра была написана программа в математическом пакете Scilab:
[hz] = iir(4, 'hp', 'cheb2', [500/8000], [.2, .03]); [hzm, fr] = frmag(hz, 256);
plot2d(fr, hzm);
С помощью данной программы была получена следующая передаточная функция:
|
0.6577 − 2.5297z + 3.7459z |
2 |
− 2.5297z |
3 |
+ |
0.6577z |
4 |
||||
H (z) = |
|
|
|
||||||||
0.4326 − 2.0141z + 3.6377z |
2 |
−3.0364z |
3 |
+ z |
4 |
|
|||||
|
|
||||||||||
|
|
|
|
|
(11)
где коэффициенты числителя — это b-коэффициенты фильтра, коэффициенты знаменателя – a-коэффициенты фильтра.
При этом получится следующая АЧХ:
Рисунок 8. АЧХ БИХ-фильтра
14
2.3 Разработка программы на языке ассемблера процессора 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;
15
2.4 Результаты работы программы
Проверим правильность работы фильтра. Для этого сформируем и подадим на вход фильтра сигнал длительностью в 0.5 секунды, имеющий постоянную амплитуду и линейное нарастание частоты от 0 до 4 кГц. В результате получим сигнал, повторяющий АЧХ, что свидетельствует о корректой работе программы.
Рисунок 9. ЛЧМ сигнал на выходе фильтра
16