Sunteți pe pagina 1din 20

Universitatea din Pitesti Laborator DSP

Lucrarea 6

1. Scopul lucrării

Studiul, respectiv proiectarea filtrelor IIR cu ajutorul programelor


Matlab şi PCDSP. Implementarea filtrelor proiectate pe microprocesorul de
semnal ADSP 2181.

2. Noţiuni teoretice

Să considerăm schema generală a unui filtru Numeric (FN) de tip IIR:

x[n] y[n]
FN
X(ejω) tip Y(ejω)
X(z) Y(z)

În timp discret, relaţia între secvenţele de intrare x[n] şi de ieşire y[n] este :

y[n]=b0x[n]+b1x[n-1]+…+bMx[n-M]-a1y[n-1]-…-aNy[n-N]

În planul variabilei z se obţine funcţia de transfer a unui FN tip IIR de forma:


M

Y [ z] Z { y[n]} ∑b z i
−i

HIIR(z)= = = i =0

X [ z ] Z { x[n]} N
1 + ∑ ai z − i
i =1

Răspunsul pondere hIIR [n] şi funcţia de transfer H IIR ( z ) sunt perechi


transformate Z:
Z
hIIR[n] HIIR(z)

1
Universitatea din Pitesti Laborator DSP

Exemplu de FN tip IIR

Să considerăm schema unui FN tip IIR din figura de mai jos:

x[n] 1 y[n]
2 ∑
z-1

1
2

Rezultă că:
1 1
y[n] = x[n] + y[n − 1]
2 2
astfel că:
1 1
Y [ z] = X [ z ] + z −1Y [ z ]
2 2
Funcţia de transfer a FN-IIR din figură are expresia:
1
Y ( z) 2 1
H IIR ( z ) = = =
X ( z) 1 2 − z −1
1 − z −1
2
iar răspunsul pondere corespunzător este :
⎧ 1 ⎫

⎪ ⎪⎪
h IIR [n] = Z −1 {H IIR ( z )} = Z −1 ⎨ 2

⎪1 − 1 z −1 ⎪
⎪⎩ 2 ⎪⎭
n n +1
1⎛1⎞ ⎛1⎞
= ⎜ ⎟ ⋅ u[n] = ⎜ ⎟ ⋅ u[n]
2⎝2⎠ ⎝2⎠

2
Universitatea din Pitesti Laborator DSP

Reprezentarea grafică a răspunsului pondere a FN tip IIR este :

hIIR[n]
1

1 2

4 1
● ●
8 ● ● ●●
● ● ● ● ● ● ● ●
0 1 2 3 4 5 6 7 n

2.1. Proiectarea FN-IIR prin metoda aproximării numerice a ecuaţiei


diferenţiale ce caracterizează un FA

Plecând de la funcţia de transfer a FA, se obţine, prin transformare de


frecvenţă, funcţia de transfer H IIR ( z ) a FN:

H a (s) HIIR(z)
1 − z −1
s→
T

2.2. Proiectarea FN-IIR prin metoda invarianţei la impuls unitate

Algoritm :

1. Se calculează Ha(s) a FA prototip;


2. Se determină ha (t ) = TL { H a ( s )} ;
−1

3. Se determină răspunsul pondere a FN astfel încât : ha (nT ) T =1 = h[n] ;


4. Se calculează funcţia de transfer a FN: H d ( z ) = Z {h[n]};

3
Universitatea din Pitesti Laborator DSP

2.3. Proiectarea FN-IIR prin metoda transformării biliniare

Algoritm:

1. Se determină Ha(s) a FA prototip;


2. Se calculează caracteristica de frecvenţă a FA:

H a ( jΩ) sau a(Ω)=20 lg H a ( jΩ ) −1

3. Se determină HIIR(z) a FN utilizând transformarea biliniară:

H IIR ( z ) = H a (s ) 2 1− z −1
s→
T 1+ z −1

4. Se calculează caracteristica de frecvenţă a FN, care se compară cu cea a FA


prototip (şi cu datele prescrise FN).

2.4. Proiectarea FN-IIR prin metode de optimizare

Fie funcţia de transfer a unui FN-IIR de ordinul unu:

b0 + b1 z −1
H ( z) =
1 + a1 z −1

Valorile parametrilor b0 ,b1 ,a1 se vor determina prin minimizarea


funcţiei criteriu global :

∑{ }
NF 2
H (e jωm ) − H dorit (e jω m ) = min
m =1

4
Universitatea din Pitesti Laborator DSP

2.5. Aplicaţii FN-IIR în Matlab

Comenzi MATLAB pentru proiectarea FN-IIR

[ b, a ] ⎫
⎬ = butter (n , Wn , options )
[z, p, k ]⎭
[ b, a ] ⎫
⎬ = cheby1( n , Rp, Wn , options )
[z, p, k ]⎭
[ b, a ] ⎫
⎬ = cheby 2(n , Rp, Rs, Wn , options )
[z, p, k ]⎭
[ b, a ] ⎫
⎬ = ellip(n , Rp, Rs, Wn , options )
[z, p, k ]⎭

unde [b, a] sunt coeficienţii funcţiei de transfer, iar [z, p, k ] sunt zerourile (z),
polii (p), respectiv amplificarea (k).

Funcţii Matlab pentru determinarea ordinului (n) şi frecvenţa de tăiere (Wn)


pentru un filtru:

⎧ buttord ⎫
⎪ ⎪
⎪ cheb1ord ⎪
[n, Wn] = ⎨ ⎬(Wp, Ws, Rp, Rs )
⎪cheb2ord ⎪
⎪⎩ ellipord ⎪⎭

unde:
- Wp este frecvenţa de tăiere pentru banda de trecere; este un scalar sau
un vector de două componente cu valorile cuprinse între 0 şi 1, unde 1
corespunde frecvenţei Nyquist;
- Ws este frecvenţa de tăiere pentru banda de oprire; este un scalar sau
un vector de două componente cu valorile cuprinse între 0 şi 1, unde 1
corespunde frecvenţei Nyquist;
- Rp - riplul maxim în banda de trecere în dB;

5
Universitatea din Pitesti Laborator DSP

- Rs - atenuarea minimă în banda de oprire în dB.

Exemplu de proiectare a unui FA prototip

Proiectaţi un filtru analogic trece banda (FA-FTB) Chebyshev tip I de ordinul


n = 10 cu Rp = 3dB, F1 = 0.1 (Ω1 = 2πF1 = 0.2 π) şi F2 = 0.5 (Ω2 = π).

% determinarea coeficientilor functiei de transfer


% a FTJ analogic cu frecventa de taiere unitate
[b,a]=cheby1(10,3,1,'s');
% reprezentare grafica a modulului si fazei
figure(1);
freqs(b,a);
w1=0.2*pi,w2=pi;Bw=w2-w1;w0=sqrt(w1*w2);
% translatare de frecventa (vezi HELP lp2bp)
[bt,at]=lp2bp(b,a,w0,Bw);
w=linspace(0.01,1,500)*2*pi;
H=freqs(bt,at,w);
figure(2);
% reprezentare grafica a modulului functiei de transfer
semilogy(w/2/pi,abs(H)); grid;
title('Caracteristica de transfer');
xlabel('Frecventa normata');
ylabel('Amplitudine');

0
Caracteristica de transfer
10

-5
Amplitudine

10

-10
10

-15
10
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Frecventa normata

6
Universitatea din Pitesti Laborator DSP

Proiectarea FN prin aproximare în planul z

a. Proiectaţi un FN-FIR de tip trece bandă cu aproximare Butterworth care să


satisfacă următoarele specificaţii:
- R p = 1dB pentru 300 < f < 500Hz ;
- A s = 20dB pentru f < 200Hz şi f > 650Hz ;
- Frecvenţa de eşantionare este f s = 1600Hz ;
Alegeţi cel mai mic grad care satisface aceste condiţii.

Secvenţa Matlab:

Fs=1600; %frecventa de esantionare


Fn=Fs/2; %frecventa Nyquist
%frecventele normate
Wp = [300 500]/Fn; Ws = [200 650]/Fn;
Rp = 1; Rs = 20;
%determinare ordin minim filtru
[n,Wn] = buttord(Wp,Ws,Rp,Rs)
%determinarea coeficientilor filtrului
[b,a] = butter(n,Wn);
%raspunsul la impuls
h=impz(b,a);
stem(h);grid
title('Raspunsul la impuls');
%caracteristici de transfer
figure
[H,W]=freqz(b,a);
subplot(211)
plot(W/(2*pi)*Fs, abs(H));grid
title('Caracteristica de transfer');
xlabel('Frecventa [Hz]');
ylabel('Amplitudine')
subplot(212)
plot(W/(2*pi)*Fs, unwrap(angle(H))*180/pi);grid
title('Caracteristica de faza');
xlabel('Frecventa [Hz]');
ylabel('Faza [grade]');

7
Universitatea din Pitesti Laborator DSP

Caracteristica de transfer
1.5
Amplitudine

0.5

0
0 100 200 300 400 500 600 700 800
Frecventa [Hz]
Caracteristica de faza
0

-200
Faza [grade]

-400

-600

-800
0 100 200 300 400 500 600 700 800
Frecventa [Hz]

Implementarea aceluiaşi filtru în PC-DSP:

- din meniul Filter se selectează IIR-filters, mai departe se selectează Design;


- tipul filtrului B (Bandpass) , aproximaţia B (Butterworth), tipul 2 (Determine
filter order automatically), riplurile în banda de trecere 1d, atenuarea minimă în banda
de oprire 20d, frecvenţele de tăiere (
200 300 500 650
F1 = = 0.125, F2 = = 0.1875, F3 = = 0.3125, F4 = = 0.40625 );
1600 1600 1600 1600
- se salvează cu litera H;
- pentru vizualizarea caracteristicii de transfer şi a caracteristicii de fază din
submeniul IIR-filters se selectează Analyze, răspunsul la impuls analizat este H, mai
departe se selectează tipul de analiză şi se apasă F2 pentru reprezentare grafică.

Proiectaţi un FN tip FTB cu banda de trecere [1000, 2000]Hz, benzile de


blocare [0, 500]Hz şi [2500, -]Hz, iar Rp = 1dB, Rs = 60dB, cu fe = 10KHz.

fe=10e3; %frecventa de esantionare


fn=fe/2; %frecventa Nyquist
Wp=[1000, 2000]/fn; %banda de trecere
Ws=[500,2500]/fn; %frecventele de taiere
Rp=1; Rs=60;

8
Universitatea din Pitesti Laborator DSP

% determinarea ordinului filtrului


% si frecventa de taiere
[n,Wn]=buttord(Wp, Ws, Rp, Rs);
%calculul coeficientilor filtrului
[b,a]=butter(n,Wn);
% (sau:=)
%[n,Wn]=ellipord(Wp, Ws, Rp, Rs)
%[b,a]=ellip(n,Rp,Rs,Wn)
[H,W]=freqz(b,a);
subplot(211);
plot(W/(2*pi), abs(H));grid;
title('Caracteristica de transfer');
xlabel('Frecventa normata');
ylabel('Amplitudine');
subplot(212);
plot(W/(2*pi), unwrap(angle(H))*180/pi);grid;
title('Caracteristica de faza');
xlabel('Frecventa normata');
ylabel('Faza [grade]');

Filtru de tip Butterworth

Caracteristica de transfer
2
Amplitudine

0
0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5
Frecventa normata
Caracteristica de faza
5000
Faza [grade]

-5000
0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5
Frecventa normata

Să se ruleze programul şi pentru filtru de tip elliptic şi să se precizeze


diferenţele.

9
Universitatea din Pitesti Laborator DSP

Proiectarea FN-IIR prin metoda invarianţei la impuls

Să se proiecteze un filtru FTB discret de tip Chebyshev I prin metoda


invarianţei la impuls, având riplul în banda de trecere de maxim 3dB, atenuarea în
banda de oprire de minim 20dB, Fs=2, iar frecvenţele corespunzătoare capetelor
benzilor sunt: Fp1 = 0.3, Fp2 = 0.4, Fs1 = 0.2, Fs2 = 0.5 .

Se foloseşte funcţia:

[numd,dend]=impinvar(num,den,Fs)

care creează un filtru digital având coeficienţii numărătorului şi numitorului


returnaţi în vectorii numd, respectiv dend. Răspunsul la impuls al filtrului
numeric se obţine prin eşantionarea filtrului analogic, ai cărui coeficienţi sunt
conţinuţi în vectorii num, respectiv den, cu frecvenţa de eşantionare Fs (Hz).
Dacă nu se precizează Fs atunci aceasta se ia implicit 1 Hz. Această funcţie se
aplică numai pentru filtre descrise prin funcţia de transfer. Metoda invarianţei
răspunsului la impuls nu este adecvată pentru FTS şi FOB.

Secvenţa Matlab:

Rp=3;Rs=20;
Wp=2*pi*[0.3 0.4];
Ws=2*pi*[0.2 0.5];
% calculul ordinului si a frecventei de taiere
% a filtrului analogic
[n,Wn]=cheb1ord(Wp,Ws,Rp,Rs,'s');
% proiectarea filtrului analogic prototip
[z,p,k]=cheb1ap(n,Rp); %vezi help cheb1ap
% determinare coeficienti functie de transfer
[num,den]=zp2tf(z,p,k); %vezi help zp2tf
Wo=sqrt(Wn(1)*Wn(2));
Bw=Wn(2)-Wn(1);
% translatare de frecventa (vezi HELP lp2bp)
[numt,dent]=lp2bp(num,den,Wo,Bw);
w=linspace(0,1,500)*2*pi;
H=freqs(numt,dent,w);
plot(w/2/pi,20*log10(abs(H)), 'r');

10
Universitatea din Pitesti Laborator DSP

ylabel('Amplitudine (dB)');
hold on;

% proiectare FTB discret prin metoda


% invariantei la impuls Fs=2
[bz,az]=impinvar(numt,dent,2);
[Hd,Wd]=freqz(bz,az);
plot(Wd/(pi), 20*log10(abs(Hd)), 'b'); grid;
xlabel('frecventa normata la frecventa Nyquist');

0
filtru analogic
filtru digital
-20
Amplitudine (dB)

-40

-60

-80

-100
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

Proiectarea FN – IIR prin transformarea biliniară

Să se proiecteze un filtru FTB discret de tip Chebyshev I prin metoda


transformării biliniare, având riplul în banda de trecere de maxim 3 dB, atenuarea în
banda de oprire de minim 20dB, iar frecvenţele discrete corespunzătoare capetelor
benzilor sunt: fp1=0.2, fp2=0.25, fs1=0.15, fs2=0.3. Frecvenţa de eşantionare este
Fs=2. Pentru obţinerea filtrului digital se foloseşte funcţia bilinear.

Se foloseşte funcţia:

[numd,dend]=bilinear(num,den,Fs);

unde:
- num şi den sunt vectori linie ce conţin coeficienţii funcţiei de transfer
ai filtrului analogic;

11
Universitatea din Pitesti Laborator DSP

- numd şi dend sunt coeficienţii funcţiei de transfer ai filtrului digital.

Secvenţa Matlab:

wp=2*pi*[0.1 0.15];
ws=2*pi*[0.05 0.2];
Rp=3;Rs=20;Fs=2;
%specificarea parametrilor filtrului analogic
Wp=wp*Fs;
Ws=ws*Fs;
%calculul ordinului si a frecventei de
%taiere a filtrului analogic
[n,Wn]=cheb1ord(Wp,Ws,Rp,Rs,'s');
%proiectarea filtrului analogic prototip
[z,p,k]=cheb1ap(n,Rp);
[num,den]=zp2tf(z,p,k); %vezi help zp2tf
%translarea de frecventa
Wo=sqrt(Wn(1)*Wn(2));
Bw=Wn(2)-Wn(1);
[numt,dent]=lp2bp(num,den,Wo,Bw);
%raspunsul in frecventa al filtrului analogic
w=linspace(0,1,500)*2*pi;
h=freqs(numt,dent,w);
%proiectarea filtrului digital Fs=2
[bz,az]=bilinear(numt,dent,Fs);
%raspunsul in frecventa al filtrului
[hd,wd]=freqz(bz,az);
%reprezentarea grafica
figure(1);
plot(wd/pi,20*log10(abs(hd)),'r',w/2/pi,20*log10(abs
(h)),'b'); grid;
xlabel('F (Hz) pt analogic \omega/\pi pt. discret');
ylabel('Amplitudine (db)');
legend('filtru discret','filtru analogic');

După cum era de aşteptat, frecvenţa benzii de trecere şi a benzii de oprire ale
filtrului discret nu coincid cu cele specificate. Acest lucru se datorează neliniarităţii
transformării biliniare.

12
Universitatea din Pitesti Laborator DSP

-50

-100 filtru discret


Amplitudine (db)

filtru analogic
-150

-200

-250

-300

-350
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
F (Hz) pt analogic ω/π pt. discret

Proiectarea FN- IIR prin optimizarea în planul z

Proiectarea unui FN – IIR care aproximează în sensul erorilor pătratice


minime o caracteristică de frecvenţă foloseşte funcţia:

[b,a]=yulewalk(n,f,m)

unde:
m - un vector cu valorile amplitudinilor dorite
f – un vector cu valorile frecvenţelor specificate

Exemplu: Proiectaţi un FN de gradul n = 8 de tip trece jos, a cărui


caracteristică de frecvenţă este specificată prin:

f=[0 0.6 0.6 1]; m=[1 1 0 0 ];


[b,a]=yulewalk(8,f,m);[h,w]=freqz(b,a);
plot(f,m,'r',w/pi,abs(h),'b'); grid;
legend('caracteristica dorita', 'caracteristica
filtrului proiectat');
xlabel('Frecventa normata la frecventa Nyquist');
ylabel('Castig');

13
Universitatea din Pitesti Laborator DSP

1.4
caracteristica dorita
1.2 caracteristica filtrului proiectat

0.8
Castig

0.6

0.4

0.2

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Frecventa normata la frecventa Nyquist

3. Implementarea unui filtru IIR pe ADSP 2181

Relaţia în timp discret care caracterizează structura unui filtru IIR este:

M N
y[n] = ∑ bi ⋅ x[n − i ] − ∑ a j ⋅ y[n − j ]
i =0 j =1

unde :
y[n] – este semnalul de la ieşirea filtrului;
x[n] – este semnalul de la intrarea filtrului;
bi – sunt coeficienţii numărătorului funcţiei de transfer;
aj – sunt coeficienţii numitorului funcţiei de transfer;

Aşa cum se poate observa, eşantionul semnalului de la ieşire la momentul de


timp curent se calculează prin combinaţia liniară a eşantioanelor semnalului de la
intrare,istoria semnalului de la intrare şi istoria semnalului de la ieşire. Deci, la fiecare
moment de timp, trebuie calculată o sumă de produse, adică trebuiesc executate
M +N+1 înmulţiri, M+ N -1 adunări şi o scădere.
Se va prezenta în continuare rutina de calcul a unui filtru IIR implementată cu
ajutorul procesorului ADSP 2181. Şirul de coeficienţi nu este calculat în timp real, el
fiind încărcat în memoria procesorului odată cu încărcarea programului. Este deci

14
Universitatea din Pitesti Laborator DSP

nevoie şi de un instrument pentru calcularea acestora înainte de fazele de asamblare şi


link-editare a programului pentru procesorul de semnal. Pentru aceasta, vom folosi un
program interactiv realizat în Matlab de calcul al coeficienţilor unui filtru IIR de tip
notch, utilizatorul putând să impună frecvenţa de eşantionare, frecvenţa ce trebuie
anulată şi factorul de calitate. Programul precum şi rutina de conversie a coeficienţilor
în format hexazecimal şi plasarea acestora în fişierele de date sunt prezentate mai jos.

Programul Matlab pentru generarea coeficienţilor unui filtru IIR de


tip notch

Utilizatorul este interogat în scopul alegerii frecvenţei de eşantionare,


frecvenţa ce trebuie anulată şi factorul de calitate. Prin intermediul funcţiei
„generare_coef_filtru_IIR .m” este proiectat filtrul IIR cu parametrii fixaţi mai sus iar
coeficienţii sunt salvaţi într-un format adecvat pentru faza de asamblare(format 1.15).
Programul apelează funcţia „conversie_Hexa.m”.

%Program de generare a coeficientilor unui filtru IIR

clear; %anuleaza toate variabilele din spatiul de lucru


clc; %stergerea ecranului

% Frecventa de esantionare in hertzi


fe=input('Frecventa de esantionare in [Hz]: ');
fn=fe/2; %frecventa Nyquist
%Frecventa anulata in hertzi
Wn=input('Frecventa ce trebuie anulata in [Hz] : ');
wn=Wn/fn; % normare
%Factorul de calitate
Q=input('Factorul de calitate : ');
bw=wn/Q;
[b, a]=iirnotch(wn, bw);

%reprezentare caracteristica de transfer


[H,W]=freqz(b,a);
f=(W/(2*pi)*fe);
figure(1)
plot(f, abs(H));grid;
title('Caracteristica de transfer');
ylabel('Castig');
xlabel('Frecventa');

15
Universitatea din Pitesti Laborator DSP

%Aplicatie
%Generare semnal de test
t=0:1/fe:1999/fe;
n=0:length(t)-1;
x=0.2*sin(2*pi*500/fe*n)+0.2*sin(2*pi*Wn/fe*n);
%Determinarea raspunsului la impuls
h=impz(b,a);
figure(2);
%Convolutia intre semnalul de intrare si iesire
y=conv(x,h);
subplot(211);
plot(t(1:700), x(1:700)); grid;
title('Semnalul de intrare');
ylabel('Amplitudine');
xlabel('Timp [s]');
subplot(212);
plot(t(1:700), y(1:700)); grid;
title('Semnalul de iesire');
ylabel('Amplidine');
xlabel('Timp [s]');

%Convertirea in format 1.15 a coeficientilor


max=abs(a(1));
La=length(a);
for i=2:La
if(max<abs(a(i)))
max=abs(a(i));
end;
end;

a=a(2:La)/max
b=b/max

conversie_Hexa(b,'C:\coef\coef_b.dat');
conversie_Hexa(a,'C:\coef\coef_a.dat');

Funcţie Matlab de conversie şi scriere într-un fişier a unui şir de


variabile subunitare în format 1.15

%functie de conversie a unui sir de variabile cu

16
Universitatea din Pitesti Laborator DSP

%valoare subunitara in format 1.15


%Utilizare: conversie_Hexa(coef, numefis) unde:
% coef = Sirul de variabile in format real;
%numefis = Calea completa (inclusiv numele fisierului)
% unde urmeaza a fi scris fisierul rezultat
%Exemplu:
% conversie_Hexa(coeficienti,'C:\coef\coef.dat');

function conversie_Hexa(coef,numefis);
%aducerea in format 16.0
coef_i=round(32768*coef);
%rutina pentru aducerea numerelor negative
%in format CC2
for j=1:length(coef_i)
if coef_i(j)<0 coef_i(j)=coef_i(j)+2^16;
end
end

%Conversia coeficientilor in hexa


coef_hex=dec2hex(coef_i,4);
%Lungimea vectorului coeficienti
l_coef=length(coef);
%caractere 0 PENTRU PM (la inceput)
a1=char(48*ones(l_coef,1));
%caractere x PENTRU PM
a11=char(120*ones(l_coef,1));
a2=char(13*ones(l_coef,1)); % caractere CR
a3=char(10*ones(l_coef,1)); % caractere LF
%crearea formatului necesar pentru scrierea in fisier
coef_pt_fis=[a1 a11 coef_hex a2 a3];

%Deschidere fisier
fis1=fopen(numefis,'w');
%scriererea de date in fisier
fwrite(fis1,coef_pt_fis');
%Inchidere fisier
fclose(fis1);
disp(' ');
disp(['Fisier de date : ' numefis ' ...creat. OK! ']);

17
Universitatea din Pitesti Laborator DSP

Implementarea pe ADSP 2181 a unui filtru IIR

Descriere: Coeficienţii filtrului sunt încărcaţi în bufer-ele coef_b de lungime


(M+1), respectiv coef_a de lungime (M), la momentul link-editării programului din
fişierul de date‚ coef_a.dat şi coef_b.dat unde au fost în prealabil scrişi în forma 1.15,
hexazecimal. Istoria semnalului de intrare se găseşte în bufer-ul v de lungime (M+1) ,
iar istoria semnalului de ieşire se găseşte în bufer-ul w de lungime (M) care sunt
actualizate la fiecare moment de timp discret.

//frecventa de esantionare este de 8kHz


#include "def2181.h" //include registrii de lucru pentru ADSP2181
#define M 2 //gradul filtrului

.SECTION/DM data1; //sectiune pentru declaratii de variabile din


//memoria de date
.var/circ w[M]; //buffer memorare y in DM
.var/circ v[M+1]; //buffer memorare x in DM
.var stat_flag;

.SECTION/PM pm_da; //sectiune pentru declaratii de variabile din


// memoria de program
.var/circ a[M]="coef_a.dat";
.var/circ b[M+1]="coef_b.dat";

/* end codec initialization, begin filter demo initialization */

i2=w; l2=length(w);
i3=v; l3=length(v);
i4=a; l4=length(a);
i7=b; l7=length(b);
//initializarea cu zero a buferelor
m2=1;
cntr=l2;
do et until ce;
et: dm(i2,m2)=0x00;
m3=1;
cntr=l3;
do ete until ce;
ete: dm(i3,m3)=0x00;

wt: idle; //aşteaptă pentru întrerupere


jump wt;

18
Universitatea din Pitesti Laborator DSP

input_samples:
ena sec_reg; //utilizeaza bancul secundar de registrii

ax0=dm(rx_buf+1); //receptioneaza data esantionata x


ax1=dm(rx_buf+2);

//se calculeaza suma de produse cu istoria semnalului de intrare


m3=0; dm(i3,m3)=ax0;
m3=1; m7=1;
mr=0, mx0=dm(i3,m3), my0=pm(i7,m7);
cntr=M;
do et4 until ce;
et4: mr=mr+mx0*my0 (ss), mx0=dm(i3,m3), my0=pm(i7,m7);
mr=mr+mx0*my0 (ss);

//se calculeaza suma de produse cu istoria semnalului de iesire


m3=-1; modify(i3,m3);
m2=1; m4=1;
mx0=dm(i2,m2), my0=pm(i4,m4);
cntr=M-1;
do et5 until ce;
et5: mr=mr-mx0*my0 (ss), mx0=dm(i2,m2), my0=pm(i4,m4);
mr=mr-mx0*my0 (rnd);
if mv sat mr;

m2=-1; modify(i2,m2) ;
m2=0;
dm(i2,m2)=mr1;
m2=1;

dm(tx_buf+1)=ax1; // se transmite pe canalul 1 semnalul nefiltrat


dm(tx_buf+2)=mr1; // se transmite pe canalul 2 semnalul filtrat

rti;

Pentru a verifica funcţionarea programului implementat pe procesorul de


semnal, vom folosi generatorul de semnale şi osciloscopul din Matlab (sau orice soft
ce permite generarea de semnale la ieşirea plăcii de sunet şi vizualizarea semnalelor de
la intrarea plăcii de sunet).

19
Universitatea din Pitesti Laborator DSP

4. Desfăşurarea lucrării

1. Se vor rula în Matlab şi PCDSP toate aplicaţiile descrise în breviarul


teoretic şi se va urmări execuţia lor.

2. Proiectaţi un FN-FIR de tip trece bandă cu aproximare Butterworth


care să satisfacă următoarele specificaţii:
- R p = 3dB pentru 1000 < f < 1300Hz ;
- A s = 30dB pentru f < 800Hz şi f > 1500Hz ;
- Frecvenţa de eşantionare este f s = 8000Hz ;
Alegeţi cel mai mic grad care satisface aceste condiţii.
Să se repete proiectarea aceluiaşi filtru pentru aproximare Chebyshev
I, II şi elliptic. (Matlab şi PC-DSP).

3. Să se proiecteze un filtru FTB discret de tip Butterworth prin metoda


invarianţei la impuls, având riplul în banda de trecere de maxim 1dB,
atenuarea în banda de oprire de minim 40dB, Fs=2, iar frecvenţele
corespunzătoare capetelor benzilor sunt:
Fp1 = 0.2, Fp2 = 0.35, Fs1 = 0.1, Fs2 = 0.4 .

4. Să se proiecteze un filtru FTB discret de tip Butterworth prin metoda


transformării biliniare, având riplul în banda de trecere de maxim 2
dB, atenuarea în banda de oprire de minim 30dB, iar frecvenţele
discrete corespunzătoare capetelor benzilor sunt: fp1=0.2, fp2=0.35,
fs1=0.15, fs2=0.4. Frecvenţa de eşantionare este Fs=2.

5. Se va implementa pe procesorul de semnal ADSP 2181 un filtru notch


ce trebuie să anuleze frecvenţa de 1000Hz, factorul de calitate Q = 10
şi frecvenţa de eşantionare 8000kHz.

20

S-ar putea să vă placă și