Sunteți pe pagina 1din 18

Universitatea din Pitesti Laborator DSP

Lucrarea 5

1. Scopul lucrării

Studiul, respectiv proiectarea filtrelor FIR cu ajutorul programelor


Matlab şi PCDSP. Implementarea filtrelor proiectate pe ADSP 2181.

2. Noţiuni teoretice

Filtrul numeric este un sistem (în timp) discret caracterizat printr-un


algoritm numeric cu ajutorul căruia o secvenţă de intrare se transformă într-o
secvenţă (filtrată) de ieşire.
Algoritmul (de filtrare) poate să reprezinte: o filtrare trece jos, trece sus,
trece bandă, opreşte bandă, sau o operaţie de diferenţiere, integrare etc.

2.1. Funcţia de transfer a unui filtru numeric

Să considerăm schema generală de filtrare a unei secvenţe de intrare x[n]


într-o secvenţă de ieşire y[n]:

x[n-2],x[n-1] , x[n] FN …y[n-2] ,y[n-1] , y[n]


ca
SNLI

Un FN poate fi caracterizat de ecuaţia în timp discret:

a 0 y[n]+a1 y[n-1]+a 2 y[n-2]=b0 x[n]+b1x[n-1]+b 2 x[n-2]

Dacă a0=1, rezultă că secvenţă de ieşire este dată de relaţia:

y[n]=b 0 x[n]+b1x[n-1]+b 2 x[n-2]-a1 y[n-1]-a 2 y[n-2]


sau :

y n =b 0 x n +b1x n-1 +b 2 x n-2 -a1 y n-1 -a 2 y n-2

Aplicând transformata Z ambilor membri rezultă că:

Y ( z ) =b0 X ( z ) +b1z -1X ( z ) +b 2 z -2 X ( z ) -a1z-1Y ( z ) -a 2 z-2 Y ( z )

1
Universitatea din Pitesti Laborator DSP

Funcţia de transfer a filtrului numeric considerat are expresia :


Y (z) b 0 +b1z -1 +b 2 z -2
H (z) = =
X (z) 1+a1z -1 +a 2 z -2

2.2. Avantajele FN

- flexibilitate prin modificarea algoritmului;


- uşor de proiectat, testat şi implementat pe un microprocesor sau DSP;
- stabilitate ridicată în raport cu timpul şi temperatura;
- siguranţă în funcţionare, dată de tehnologiile integrate;
- modularitate;
- versatilitate în prelucrarea semnalelor;
- aplicabilitate în JF şi RF.

2.3. Etapele proiectării unui FN

1. Rezolvarea problemei aproximării, care conduce la obţinerea funcţiei de


transfer H(ejω);
2. Alegerea schemei de realizare;
3. Cuantizarea coeficienţilor funcţiei H(z), corespunzătoare unei lungimi
finite de reprezentare;
4. Cuantizarea variabilelor: semnalul de intrare, ieşire şi a semnalelor
intermediare;
5. Verificarea prin simulare (“off-line”) a modului în care filtrul proiectat
satisface exigenţele impuse.
De regulă, etapa 5 conduce la reluarea etapelor 2-4!

3. FN cu răspuns finit la impuls

Să considerăm schema generala de prelucrare :

În timp discret, putem nota:


M
y[n]=b0x[n]+b1x[n-1]+…+bMx[n-M] = ∑ bi x [ n-i ]
i=0

2
Universitatea din Pitesti Laborator DSP

Aplicând tansformata Z ambilor membri ai ecuaţiei de mai sus se obţine :


M
Y(z)= ∑ bi z -i ×X ( z )
i=0
În planul variabilei z, funcţia de transfer a FN de tip FIR este :

Y (z) Z { y [ n ]} M
HFIR(z)= = = ∑ bi z -i
X (z) Z {x [ n ]} i=0

iar răspunsul pondere al FN de tip FIR este dat de relaţia:


M
hFIR[n] = Z-1 {H FIR ( z )} = ∑ bi Z {z -i } = ∑ bi δ [ n-i ]
i i=0

= b0δ[n]+ b1δ[n-1]+… + bMδ[n-M]

3.1. Proiectarea FN-FIR prin metoda ferestrelor (sau metoda


seriei Fourier)

Algoritm

1. Se dă răspunsul dorit pentru FN-FIR, notat cu Hd(ejω), care este o funcţie


periodică în ω, cu perioada 2π;
2. Se determină răspunsul pondere al FN :
1
h∞=TFTD-1{Hd(ejω)}=
2π ∫π
2
Hd(ejω) ejωndω

3. Se trunchiază răspunsul pondere h∞[n] pentru a obţine răspunsul pondere al unui


FN-FIR:

h[n]=h∞[n]w[n]
unde w[n] este o funcţie fereastră de lungime”N”

4. Se calculează funcţia de transfer a FN-FIR:

H(ejω)=TFTD{h[n]}=TFTD{h∞[n]w[n]}

5. Se compară funcţia de transfer obţinută H(ejω) cu funcţia de transfer dorită


Hd(ejω).

3
Universitatea din Pitesti Laborator DSP

3.2. Proiectarea FN-FIR prin metoda eşantionării în frecvenţă

În proiectarea filtrelor FIR prin metoda eşantionării în frecvenţă se


specifică răspunsul în frecvenţă dorit H d (ω ) într-un set de M frecvenţe uniform
distanţate în intervalul [0, 2 π ], fie acestea:


ωk = (k + α ), k = 0,1,... ( M − 1) / 2, M impar
M
k = 0,1,... ⎡⎣( M / 2 ) − 1⎤⎦ , M par
α = 0 sau 1/ 2
şi din aceste specificaţii se calculează răspunsul la impuls al filtrului sintetizat, care
să îndeplinească cerinţele de proiectare. Suportul teoretic al acestei metode îl
constituie Transformata Fourier Discretă.
Se impune identitate între răspunsul filtrului dorit şi cel sintetizat la
frecvenţele specificate şi se calculează răspunsul la impuls h[n].

3.3. Proiectarea FN-FIR prin optimizare

Fie : - caracteristica dorită a unui FN :


( )
H d e jω = H d (ω )
- şi caracteristica unui FN tip FIR :
( ) (
H FIR e jω = H FIR (ω ) = H FIR ω , b )
unde b - coeficienţi necunoscuţi ;
Pentru ω=ωi , i= 1, M
- eroarea locală de aproximare va fi :
ε(ωi , b )=Hd(ωi) - HFIR(ωi , b )

Eroarea globală de aproximare va fi :


E( b )= ∑ ε 2 (ωi , b ) = min
M

i =1
Dorim să minimizăm Eroarea globală de aproximare prin alegerea
corespunzătoare a coeficienţilor b .

4
Universitatea din Pitesti Laborator DSP

3.4. Aplicaţii FN-FIR în Matlab

Comenzi MATLAB pentru proiectarea FN-FIR

fir1 metoda ferestrelor


fir2 metoda ferestrelor cu caracteristică de frecvenţă prescrisă
kaiserord estimează parametrii pentru fir1 cu fereastra Kaiser
firls utilizează metoda celor mai mici pătrate
remez utilizează algoritmul Remez pentru proiectarea FIR
remezord estimează ordinul FIR pentru utilizarea algoritmului
Remez
fircls utilizează metoda celor mai mici pătrate cu constrângeri
fircls1 utilizează metoda celor mai mici pătrate pentru FTJ şi
FTS
cremez proiectează FIR cu fază neliniară echiriplu
firrcos proiectează un FIR cu caracteristică tip cosinus ridicat

Proiectarea FN-FIR prin metoda ferestrelor

Exemplu de proiectare a unui FN-FIR cu n=51 şi ωt=0.4π rad/sec (se


foloseşte o fereastră dreptunghiulară) ;

h=0.4*sinc (0.4*(-25:25));
subplot(211);
stem(h);grid
[H,w]=freqz (h,1,512,2);
subplot(212);
plot(w/2,abs (H)), grid

5
Universitatea din Pitesti Laborator DSP

0.5

-0.5
0 10 20 30 40 50 60
1.5

0.5

0
0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5

Exemple de proiectare a FN-FIR prin metoda ferestrelor

folosind funcţia b=fir1 (n,wn,’ftype’,window)

unde:
n + 1 – reprezintă ordinul filtrului;
wn – frecvenţa de tăiere (are valori cuprinse între 0 şi 1 unde 1
corespunde jumătăţii frecvenţei de eşantionare – frecvenţa Nyquist);
‘ftype’ – tipul filtrului (‘high’, ‘stop’);
window – tip fereastră.

Exemplu de FN-FIR de tipul 1 şi 2

a) calculul răspunsurilor pondere şi vizualizarea lor prin intermediul a trei


tipuri de ferestre: dreptunghiulară, hamming, blackman:

figure(1);
fd1=fir1(8,0.5,boxcar(9));fd2=fir1(9,0.5,boxcar(10));
subplot(321);stem(fd1);grid;subplot(322);stem(fd2);grid;
fh1=fir1(8,0.5,hamming(9));fh2=fir1(9,0.5,hamming(10));
subplot(323);stem(fh1);grid;subplot(324);stem(fh2);grid;
fb1=fir1(8,0.5,blackman(9));fb2=fir1(9,0.5,blackman(10))
subplot(325);stem(fb1);grid;subplot(326);stem(fb2);grid;

b) calculul caracteristicilor de frecvenţă şi vizualizarea lor:

figure(2);
f=0:1/64:1-1/64;
Fd1=abs(fft(fd1,64)); Fd2=abs(fft(fd2,64));

6
Universitatea din Pitesti Laborator DSP

subplot(321);plot(f,Fd1);grid;
subplot(322);plot(f,Fd2);grid;
Fh1=abs(fft(fh1,64));Fh2=abs(fft(fh2,64));
subplot(323);plot(f,Fh1);grid;
subplot(324);plot(f,Fh2);grid;
Fb1=abs(fft(fb1,64)); Fb2=abs(fft(fb2,64));
subplot(325);plot(f,Fb1);grid;
subplot(326);plot(f,Fb2);grid;

2 2

1 1

0 0
0 0.5 1 0 0.5 1
1 1

0.5 0.5

0 0
0 0.5 1 0 0.5 1
1 1

0.5 0.5

0 0
0 0.5 1 0 0.5 1

Implementarea filtrelor de mai sus în PC-DSP presupune următorii paşi:

- din meniul Filter se selectează FIR-filters, mai departe se selectează


Design;
- metoda de proiectare se alege F (Fourier series design), tipul filtrului L
(Lowpass) , ordinul filtrului 8, tipul ferestrei R (Rectangular), frecvenţa de tăiere
0.25 (spre deosebire de Matlab care lucreză cu frecvenţele normate la frecvenţa
Nyquist, PC-DSP foloseşte frecvenţele normate la frecvenţa de eşantionare),
numele pentru răspunsul la impuls H;
- apăsând tasta F2 se poate observa răspunsul la impuls;
- pentru vizualizarea caracteristicii de transfer şi a caracteristicii de fază
din submeniul FIR-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ă.

Proiectarea de mai sus este doar pentru fereastră dreptunghiulară, se


repetă acelaşi lucru şi pentru ferestrele hamming şi blackman.

7
Universitatea din Pitesti Laborator DSP

Proiectarea FN-FIR prin metoda eşantionării în frecvenţă

Dacă funcţia de transfer dorită este H[k]=[1 1 0 1]:

funcţia de transfer este:

1 − z −N N −1 H[k ]
H (z ) = ∑ 2π
N k =0 jk
1− e N z −1

r=[1,1,0,1];N=4;
for k=0:N-1
ka=k+1;p(ka)=exp (j*k*2*pi/N);K(ka)=0;
end
[b,a]=residuez (r,p,k);
bb (1:N)=b (1:N);bbb=[1,0,0,0,-1];
B=conv (bbb,bb);A=N.*a;
H=deconv (B,A);freqz (B,A);

Proiectarea unui FN-FIR tip trece jos cu N=30 cu caracteristica de


frecvenţă prescrisă :

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

8
Universitatea din Pitesti Laborator DSP

Se foloseşte funcţia: b = fir2(n, f, m)


unde:
n + 1 – reprezintă ordinul filtrului;
f – este un vector cu valorile frecvenţei normate cu valorile între 0 şi 1,
unde 1 corespunde frecvenţei Nyquist; prima componentă trebuie să fie 0, iar
ultima 1.
m – este un vector cu valorile dorite ale amplitudinii funcţiei de transfer la
frecvenţele normate corespunzătoare.

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


b=fir2(30,f,m);
subplot(211);stem(b);grid;
[h,w]=freqz(b,1,128);
subplot(212);plot(f/2,m,w/(2*pi),abs (h));grid;

0.5

-0.5
0 5 10 15 20 25 30 35
1.5

0.5

0
0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5

Proiectarea unui FN-FIR tip trece sus prin metoda eşantionării în


frecvenţă, plecând de la următoarele date de proiectare:
-ordinul N=24
-frecvenţa limită de trecere fz=6 KHz
-frecvenţa de eşantionare fe=20 KHz

N=23;ft=6e3;fe=2e4;wn=ft/fe;inc=0.01;f=[0:inc:1];
Hd=[zeros(1,(2*wn)/inc+1) ones(1,(1-2*wn)/inc)];
subplot(313);
plot(f/2,Hd);grid;
b=fir2(N,f,Hd);[H,W]=freqz (b,1,fe);
subplot (311);

9
Universitatea din Pitesti Laborator DSP

plot(W/(2*pi), 20*log10 (abs(H)));grid;


subplot(312);
plot(W/(2*pi),unwrap(angle(H))*180/pi);grid;
200

-200
0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5
2000

-2000
0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5
1

0.5

0
0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5

Proiectarea FN-FIR tip cosinus ridicat

b= firrcos (n, F0, df, Fs)

unde:
n + 1 – reprezintă ordinul filtrului;
F0 – frecvenţa de tăiere [Hz] =0…Fs/2 iar (F0±df/2)⊂(0,Fs/2) ;
df – banda de tranziţie [Hz];
Fs – frecvenţa de eşantionare.

Exemplu : un FN-FIR cosinus ridicat de ordinul N=20 cu f0=0.25


(frecvenţa de tăiere).

h=firrcos (20, 0.25,0.025,1);H=fft(h,1024);


plot((0:511)/1024,abs(H(1:512)));grid;
1.5

0.5

0
0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5

10
Universitatea din Pitesti Laborator DSP

Proiectarea FN-FIR prin optimizare folosind algoritmul Remez


elaborat de Parks-McClellan

b= remez( n, f, a, w)

unde:
n + 1 – reprezintă ordinul filtrului;
f, a – caracteristica de frecvenţă impusă;
w – vector pondere;

Exemplu : proiectarea unui FTB numeric de gradul n=17 specificat prin:

f=[0 0.3 0.4 0.6 0.7 1];


a=[0 0 1 1 0 0];
b=remez(17,f,a);
[h,w]=freqz (b,1,512);
plot (f,a,w/pi,abs(h));grid;

1.5

0.5

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

Proiectarea FN-FIR prin optimizare folosind minimizarea erorilor


pătratice

b= firls (n, f, a, w, ’ftype’)

unde:
n + 1 – reprezintă ordinul filtrului;
f, a – perechi de vectori care specifică caracteristica de frecvenţă
prescrisă a filtrului;
w – vector pondere;
‘ftype’ – ‘hilbbert’, ‘differentiator’.

11
Universitatea din Pitesti Laborator DSP

Exemplu: se proiectează acelaşi filtru proiectat prin metoda remez şi se


compară rezultatele:

clear,clc;
f=[0 0.3 0.4 0.6 0.7 1];
a=[0 0 1 1 0 0];
b=firls(17,f,a);
[h,w]=freqz(b,1,512);
plot(f,a,w/pi,abs(h));grid;

1.5

0.5

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

4. Implementarea unui filtru FIR pe ADSP 2181

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

N
y[n] = ∑ x[n − i] ⋅ h[i]
i =0

unde :
y[n] – este semnalul de la ieşirea filtrului;
x[n] – este semnalul de la intrarea filtrului;
h[i] – sunt coeficienţii filtrului ;
N – este ordinul filtrului.

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. Deci, la fiecare moment de timp, trebuie calculată o sumă de produse,
adică trebuiesc executate N +1 înmulţiri şi N adunări, operanzii constând în istoria
semnalului de la intrare pe de o parte şi coeficienţii filtrului pe de altă parte.
Se va prezenta în continuare rutina de calcul a unui filtru FIR
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 nevoie şi de un instrument pentru calcularea acestora

12
Universitatea din Pitesti Laborator DSP

î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 FIR transversal de tip FTB, utilizatorul putând să
impună frecvenţa de eşantionare, banda şi ordinul filtrului. Programul precum şi
rutina de conversie a coeficienţilor în format hexazecimal şi plasarea acestora într-
un fişier de date sunt prezentate mai jos.

Programul Matlab pentru generarea coeficienţilor unui filtru FIR


de tip FTB

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


benzii semnalului şi a numărului de coeficienţi. Prin intermediul funcţiei
„generare_coef_filtru_FIR .m” este proiectat filtrul FIR 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 FIR

clear; %anuleaza toate variabilele din spatiul de lucru


clc; %stergerea ecranului

%Frecventa de esantionare in hertzi


fe=input('Frecventa de esantionare in [Hz]: ');
%Banda filtrului trece banda
Banda=input('Banda semnalului [f1 f2] in [Hz] : ');
%Numarul de coeficienti
Nf=input('Numarul de coeficienti : ');

%Ordinul filtrului = nr de coeficienti-1


Ord_f=Nf-1;
%Banda normata
Wn=Banda/(fe/2);

%Determinare coeficienti filtru prin metoda ferestrelor


B=fir1(Ord_f,Wn);

%Afisarea raspunsului in frecventa a filtrului


proiectat
A=1;%Filtrul este transversal fara "reactie" de tip FIR
%calculul raspunsului in frecventa
[H,W]=freqz(B,A);
subplot(211);
f=W/(2*pi)*fe;

13
Universitatea din Pitesti Laborator DSP

%reprezentare grafica a modulului functiei de transfer


plot(f, abs(H(1:512))); grid;
title('Caracteristica de transfer');
xlabel('Frecventa [Hz]');
ylabel('Amplitudine');
subplot(212);

%reprezentare grafica a fazei functiei de transfer


plot(f, unwrap(angle(H(1:512)))); grid;
title('Caracteristica de faza');
xlabel('Frecventa [Hz]');
ylabel('Faza');

%generarea fisierului cu coeficientii filtrului


Cu_fisier=input('Generarea fisier coeficienti ? 0 =
nu / 1 = da : ');
if Cu_fisier==1
%apelarea functiei conversie_Hexa
conversie_Hexa(B,'C:\coef\coef.dat');
end

%aplicatie pentru verificarea filtrului proiectat


Cu_aplicatie=input('Generare exemplu filtrare ? 0 =
nu / 1 = da : ');

%se genereaza un semnal cu o sinusoida in banda de


%trecere si doua sinusoide in afara benzii de trecere
if Cu_aplicatie==1
f1=(Banda(1)+Banda(2))/2;
if Banda(1)>200
f2=Banda(1)-150;
else
f2=0;
end
if Banda(2)<fe/2-200;
f3=Banda(2)+150;
else
f3=0;
end
end
t=0:1/fe:2e4/fe-1/fe;
n=0:length(t)-1;

14
Universitatea din Pitesti Laborator DSP

s=sin(2*pi*f1/fe*n)+sin(2*pi*f2/fe*n)+sin(2*pi*f3/fe*n)
;
figure(2);
subplot(221);

%reprezentarea grafica a semnalului generat


plot(t(400:450),s(400:450)); grid;
title('Semnal inainte de filtrare');
xlabel('timp [s]');
ylabel('Amplitudine');

%calculul transformatei Fourier a semnalului generat


S=fft(s, 1024);
subplot(222);
%reprezentarea grafica a modulului transformatei
%Fourier

plot(f, abs(S(1:512))); grid;


title('Transformata Fourier');
xlabel('frecventa[Hz]');

%determinarea semnalului de la iesirea filtrului


y=conv(s, B);
subplot(223);

%reprezentarea grafica a semnalului de la iesirea


%filtrului
plot(t(400:450), y(400:450)); grid;
title('Semnal dupa filtrare');
xlabel('timp [s]');
ylabel('Amplitudine');

%calculul transformatei Fourier a semnalului de la


%iesirea filtrului
Y=fft(y, 1024);
subplot(224);

%reprezentarea grafica a modulului transformatei


%Fourier a semnalului de la iesirea filtrului
plot(f, abs(Y(1:512))); grid;
title('Transformata Fourier');
xlabel('frecventa[Hz]');

15
Universitatea din Pitesti Laborator DSP

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


%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!
']);

16
Universitatea din Pitesti Laborator DSP

Implementarea pe ADSP 2181 a unui filtru FIR

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


(grad+1) la momentul link-editării programului, din fişierul de date‚ coef.dat unde
au fost în prealabil scrişi în forma 1.15, hexazecimal. Istoria semnalului de intrare
se găseşte în bufer-ul w de lungime (grad+1) care este actualizat la fiecare moment
de timp discret (linia de program dm(i3,m3)=ax0).

//frecventa de esantionare este de 8kHz


#include "def2181.h" //include registrii de lucru pentru ADSP2181
#define grad 511 //gradul filtrului

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


//memoria de date
.var w[grad+1]; //bufferul circular de esantioane (istoria semnalului)
.var stat_flag;

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


// memoria de program
.var fir_coef[grad+1]="coef.dat" ; //buffer-ul circular al coeficientilor

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

i3=w; m3=1; l3=grad+1;


i7=fir_coef; m7=1; l7=grad+1;

cntr=grad+1;
do bucla1 until ce;
bucla1: dm(i3,m3)=0; //initializeaza buffer-ul de esantioane cu 0

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


jump wt;

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

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


dm(tx_buf+1)=ax0; //retransmite data pe canalul 2
m3=0;
dm(i3,m3)=ax0; //o depune in bufferul circular de date
m3=1;
mr=0, mx0=dm(i3,m3), my0=pm(i7,m7); /* preia primul coeficient din
memoria de programe (h) */

17
Universitatea din Pitesti Laborator DSP

cntr=grad; //initializeaza numarul de operatii MAC


do bucla2 until ce; //executa o bucla
bucla2: mr=mr+mx0*my0 (ss), mx0=dm(i3,m3), my0=pm(i7,m7); /* calculeaza
y=y+x*coef si preia urmatorul coeficient */
mr=mr+mx0*my0 (rnd); //rotunjeste ultimul calcul
if mv sat mr; //satureaza rezultatul daca este nevoie
sr=ashift mr1 by 1 (lo); //il amplifica cu doi
mr1=sr0;
dm(tx_buf+2)=mr1; //trminite semnalul esantionat pe seriala
m3=-1; modify(i3,m3);
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).

5. 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. Se va implementa pe procesorul de semnal ADSP 2181 un FTB cu


banda [800 1000]Hz, frecvenţa de eşantionare 8kHz, gradul 511,
folosind metoda ferestrelor (această aplicaţie presupune rularea
programelor prezentate la Implementarea unui filtru FIR pe ADSP
2181 fără nici o modificare).

3. Să se implementeze pe procesorul ADSP 2181 un FTB cu banda


[2000 3000]Hz, frecvenţa de eşantionare 32kHz, gradul 399,
folosind metoda ferestrelor. (Proiectare Matlab şi PC-DSP)

4. Să se proiecteze un FTJ cu frecvenţa de tăiere 2000Hz, frecvenţa


de eşantionare 18.9kHz, gradul 300, folosind metoda eşantionării
în frecvenţă. Să se implementeze pe procesorul ADSP 2181.

5. Să se proiecteze un FTS cu frecvenţa de tăiere 10kHz, frecvenţa de


eşantionare 48kHz, gradul 250, prin optimizare folosind algoritmul
Remez.

18

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