- •Министерство цифрового развития, связи и массовых коммуникаций российской федерации
- •Московский технический университет связи и информатики
- •Курсовая работа
- •1. Проектирование ких-фильтра 4
- •2. Проектирование бих-фильтра 17
- •Код математического пакета Scilab
- •Разработка программы на языке ассемблера процессора adsp-2181
- •Проверка проделанной работы
- •Проектирование бих-фильтра
- •2.1 Исходные данные
- •2.2 Вычисление коэффициентов
- •2.3 Разработка программы на языке ассемблера процессора adsp-2181
- •2.4 Результаты работы программы
Код математического пакета Scilab
//Синтезирование АЧХ и ФЧХ по исходным параметрам
function ach = K(F)
if F >= 0 & F <= 800 then
ach = 0.8;
elseif F > 800 & F <= 1600 then
ach = -(0.3/800) * F + 1.1;
elseif F > 1600 & F <= 2800 then
ach = 0.5 + 0.3 * sqrt(1 - ((F - 2200)^2 / 600^2));
elseif F > 2800 & F <= 3000 then
ach = -0.0025 * F + 7.5;
elseif F > 3000 & F <= 4000 then
ach = 0;
end
endfunction
//Построение графика АЧХ
ACH = zeros(41:1)
F = 0 : 100 : 4000
for i = 1:41
ACH(i,:) = K(F(i))
End
scf(0)
xgrid()
xtitle(" ", "Frequency [Hz]", "Magnitude")
plot(F,ACH)
a=get('current_axes')
a.children(1).children.thickness=4
a.title.font_size=4
a.x_label.font_size=4
a.y_label.font_size=4
function fch=fi(F)
if F>=0 & F<=4000 then
fch = (-1.*F).*%pi./2000
end
endfunction
//Построение графика ФЧХ
FCH = zeros(41:1)
F = 0 : 100 : 4000
for i = 1:41
FCH(i,:) = fi(F(i))
end
scf(1)
xgrid()
xtitle(" ", "Frequency [Hz]", "Phase [rad]")
plot(F,FCH)
b=get('current_axes')
b.children(1).children.thickness=4
b.title.font_size=4
b.x_label.font_size=4
b.y_label.font_size=4
Re = zeros(1:80)
Im = zeros(1:80)
Hfunc = zeros(1:80)
//Нахождение действительной и мнимой части расширенных АЧХ и ФЧХ, а также нахождения КЧХ для реализации ИХ
for i = 1:41
Re(i) = abs(ACH(i))*cos(FCH(i))
Im(i) = abs(ACH(i))*sin(FCH(i))
Hfunc(i)=Re(i)+%i*Im(i)
if i >= 2 then Hfunc(82-i) = Re(i)-%i*Im(i)
end
if i <> 1 then
Re(82-i) = Re(i)
Im(82-i) = -Im(i)
end
end
//Построение графиков Re и Im
F = 0:100:7900
scf(2)
xgrid()
xtitle('Re[H(F)]','Frequency [Hz]','a*(F)')
plot(F,Re)
c=get('current_axes')
c.children(1).children.thickness=4
c.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)
Разработка программы на языке ассемблера процессора adsp-2181
.section/dm vars;
.var/circ coef[80] = -3109, 6111, 17085, 6111, -3109, 1987, 1218, -2119, 184, 212, -255, 719, -350, -336, 464, -119, 33, 40, -342, 170, 150, -108, 56, -101, 13, 162, -79, -58, -32, -6, 118, -25, -60, 6, 2, 90, -23, -101, 20, 5, 57, 25, -106, 25, 57, 5, 20, -101, -23, 90, 2, 6, -60, -25, 118, -6, -32, -58, -79, 162, 13, -101, 56, -108, 150, 170, -342, 40, 33, -119, 464, -336, -350, 719, -255, 212, 184, -2119, 1218, 1987;
.var/circ simples[80] = 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, 0, 0, 0, 0, 0, 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 fir; rti; rti; rti;
rti; rti; rti; rti;
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);
mr = mr + mx0 * my0 (ss);
ax0 = IO(0);
dm(I0, M2) = ax0;
mr = mr (rnd);
if mv sat mr;
IO(1) = mr1;
rti;