tapds laborator 2
DESCRIPTION
TAPDS Laborator 2TRANSCRIPT
Laborator 2 TAPDS
Lucrarea de faţă îsi propune să realizeze o prezentare a metodelor de generare şi
utilizare a sistemelor multirată. Vor fi prezentate funcţii în mediul Matlab care corespund
acestor metode şi vor fi furnizate exemple de utilizare a acestora.
1. Decimarea
Decimarea reprezintă operaţia de reducere a frecvenţei de eşantionare cu un număr
întreg M. Aceasta presupune ca în domeniul timp să se îndeplinească condiţia
( ) ( )dx n x nM . În domeniul frecvenţă, eşantionarea se va face după decimare cu rata
' /es esF F M . Trebuie deci verificat dacă şi după decimare noua frecvenţă de eşantionare mai
îndeplineşte condiţia Nyquist ' 2es MF F . Pentru a elimina posibilitatea apariţiei fenomenului
de aliere spectrală se va utiliza înaintea circuitului elementar de decimare un filtru trece jos.
Frecvenţa sa de tăiere rezultă din condiţia Nyquist de mai sus
' 2 / 2 2
2
es M es M es M
Mt
es
F F F M F F MF
F
F M
Limitând deci componentele spectrale în frecvenţe normate la pi/M, după decimarea
cu M acestea vor fi limitate la pi, deci nu va apărea aliere.
2
esF
xjX e
3
3
2'
es es
M
F F
vj
dX e
MM 2 M 2 M
M=2
2
2
3M
3
3
2'
es es
M
F F
vj
dX e
Exemplul 1.1:
Să se genereze următorul semnal
1 2( ) sin(2 ) sin(2 ), 0.. 1x n f n f n n N
unde f1 şi f2 sunt frecvenţele normate corespunzătoare frecvenţelor F1=1000 Hz, respectiv
F2=3500 Hz, frecvenţa de eşantionare fiind Fes=20000 Hz. N este 64.
Să se realizeze decimarea acestui semnal cu M=2. Se vor reprezenta spectrul
semnalului iniţial şi spectrul semnalului decimat.
Comentaţi rezultatele obţinute.
0 10 20 30 40 50 60 70-2
-1.5
-1
-0.5
0
0.5
1
1.5
2semnal intrare
-0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.50
10
20
30
40spectrul semnalului initial
frecvente normate
-0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.50
5
10
15
20spectrul semnalului decimat
frecvente normate
Reluaţi aplicaţia pentru M=4. Se poate observa că apare fenomenul de aliere spectrală
deoarece noua frecvenţă de eşantionare (Fes/4 = 5kHz) nu mai este mai mare decat dublul
frecvenţei maxime a semnalului iniţial (Fmax=F2=3.5 KHz).
Apare deci necesitatea introducerii unui
filtru anti-aliere care să elimine
componentele spectrale aflate peste
pulsaţia normată pi/M. Vom genera acest
filtru folosind funcţia fir1 descrisă în
Laboratorul 1. Reamintim că aceasta
primea ca intrări ordinul filtrului (în cazul
de faţă alegem 30) şi frecvenţa normată de
intrare (în Matlab normarea se face la
Fes/2). Pentru a realize filtrarea propriu-
zisă după ce am obţinut funcţia de pondere
a filtrului, folosim funcţia Matlab filter.
-0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.50
10
20
30
40spectrul semnalului initial
frecvente normate
-0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.50
2
4
6
8spectrul semnalului decimat
frecvente normate
%generarea semnalului F1=1000; F2=3500; Fes=20e3; N=64; n=0:N-1; f1=F1/Fes; f2=F2/Fes; s=sin(2*pi*f1*n)+sin(2*pi*f2*n); figure,plot(s),grid, ,title('semnal intrare') %realizarea decimarii M=2; sd=s(1:M:end); S=fft(s,512); Sd=fft(sd,512); f=linspace(-0.5,0.5,512); figure,subplot(2,1,1),plot(f,fftshift(abs(S))),grid title('spectrul semnalului initial') xlabel('frecvente normate') subplot(2,1,2),plot(f,fftshift(abs(Sd))),grid title('spectrul semnalului decimat') xlabel('frecvente normate')
-0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.50
20
40spectrul semnalului initial
frecvente normate
-0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.50
10
20spectrul semnalului filtrat
frecvente normate
-0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.50
5spectrul semnalului filtrat si decimat
frecvente normate
Procedura de decimare completă, care conţine deci filtrul anti-aliere înaintea
decimatorului elementar, se poate realize direct folosind funcţia Matlab decimate. Aceasta
primeşte ca intrare semnalul ce trebuie decimat şi ordinul decimării.
-0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.50
10
20
30
40spectrul semnalului initial
frecvente normate
-0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.50
5
10spectrul semnalului decimat Matlab
frecvente normate
2. Interpolarea
Interpolarea reprezintă operaţia de creştere a frecvenţei de eşantionare cu un factor
întreg L. Iniţial de produce o expandare a semnalului discret prin introducerea a L-1
eşantioane nule între oricare două eşantioane succesive ale acestuia. În domeniul frecvenţelor
normate se va produce o comprimare cu L a spectrului semnalului iniţial. Apar aşa numitele
spectre imagine. Acestea sunt în număr de L-1 între componentele spectrale periodice ale
semnalului iniţial. Eliminarea lor se face folosind dupa interpolarea elementară un filtru trece
jos cu pulsaţia de tăiere pi/L. Se vor păstra în acest fel doar componentele care înainte de
interpolare se aflau î domeniul –pi,pi.
'
es esF LF
( / ), 0, , 2 ,...( )
0,i
x n L n L Lx n
in rest
%generarea filtrului anti-aliere h=fir1(30,1/M); %filtrare si apoi decimare sf=filter(h,1,s); sfd=sf(1:M:end); Sf=fft(sf,512); Sfd=fft(sfd,512); figure,subplot(3,1,1),plot(f,fftshift(abs(S))),grid title('spectrul semnalului initial') xlabel('frecvente normate') subplot(3,1,2),plot(f,fftshift(abs(Sf))),grid title('spectrul semnalului filtrat') xlabel('frecvente normate') subplot(3,1,3),plot(f,fftshift(abs(Sfd))),grid title('spectrul semnalului filtrat si decimat') xlabel('frecvente normate')
%decimarea Matlab smd=decimate(s,M); Smd=fft(smd,512); figure,subplot(2,1,1),plot(f,fftshift(abs(S))),grid title('spectrul semnalului initial') xlabel('frecvente normate') subplot(2,1,2),plot(f,fftshift(abs(Smd))),grid title('spectrul semnalului decimat Matlab') xlabel('frecvente normate')
2
esF
xjX e
2'
es esF LF
vj
iX e
MM 2 M 2 M
L=3
2M
'
es esF LF
vj
ifX e
M
L
M
L
2
L
4
L
2M
L
M
L
Exemplul 2.1:
Să se genereze semnalul ( ) sin(0.4 ), 0.. 1x n n n N , unde N=64. Să se realizeze
mărirea ratei de eşantionare cu L=3.
0 1 2 3 4 5 6 7 8 9 10-1
-0.5
0
0.5
1semnalul initial
0 5 10 15 20 25 30-1
-0.5
0
0.5
1semnalul interpolat
-0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.50
10
20
30
40spectrul semnalului initial
frecvente normate
-0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.50
10
20
30
40
X: 0.2671
Y: 29.69
spectrul semnalului interpolat
frecvente normate
%generarea semnalului N=64; n=0:N-1; s=sin(0.4*pi*n); %interpolarea elementara L=3; si=zeros(1,L*N); si(1:L:L*N)=s; figure(1),subplot(2,1,1),stem(0:10,s(1:11)) grid,title('semnalul initial') subplot(2,1,2),stem(0:L*10,si(1:L*10+1)) grid,title('semnalul interpolat') S=fft(s,512); Si=fft(si,512); f=linspace(-0.5,0.5,512); figure,subplot(2,1,1),plot(f,fftshift(abs(S))),grid title('spectrul semnalului initial') xlabel('frecvente normate'); subplot(2,1,2),plot(f,fftshift(abs(Si))),grid title('spectrul semnalului interpolat') xlabel('frecvente normate');
Comentaţi rezultatele obţinute.
Vom proiecta în continuare un FTJ cu pulsaţia de tăiere normată pi/L. În acest scop
folosim funcţia fir1. Ordinul filtrului este ales 30.
0 5 10 15 20 25 30-0.4
-0.2
0
0.2
0.4semnalul interpolat si filtrat
-0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.50
10
20
30
frecvente normate
spectrul semnalului interpolat si filtrat
Procedura de interpolare completă, care conţine deci filtrul anti-imagini după
interpolatorul elementar, se poate realize direct folosind funcţia Matlab interp. Aceasta
primeşte ca intrare semnalul ce trebuie interpolat şi ordinul interpolării.
0 5 10 15 20 25 30-1
-0.5
0
0.5
1semnalul interpolat si filtrat
-0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.50
50
100
frecvente normate
spectrul semnalului interpolat si filtrat
3. Modificarea fracţionară a ratei de eşantionare
Pentru modificarea fracţionară a ratei de eşantionare se poate folosi o cominaţie de
decimare/ interpolare cu factori întregi M şi L. Evident că nu se var putea obţine decât anumiţi
factori fracţionari.
Contează ordinea în care se face modificarea fracţionară a ratei (întâi decimarea cu M
şi apoi interpolarea cu L sau invers)?
Procedura de modificare cu factor fracţionar a frecvenţei de eşantionare, care conţine
deci şi filtrele anti-aliere înainte de decimatorul elementar şi cel anti-imagini după
interpolatorul elementar, se poate realize direct folosind funcţia Matlab resample. Aceasta
primeşte ca intrare semnalul ce trebuie reeşantionat cu factor fracţionar, ordinul interpolării şi
ordinul decimării.
h=fir1(30,1/L); sif=filter(h,1,si); figure,subplot(2,1,1),stem(0:L*10,sif(16:L*10+16)) grid,title('semnalul interpolat si filtrat'); Sif=fft(sif,512); subplot(2,1,2),plot(f,fftshift(abs(Sif))) grid,xlabel('frecvente normate') title('spectrul semnalului interpolat si filtrat')
%interpolare matlab sim=interp(s,L); Sim=fft(sim,512); figure,subplot(2,1,1),stem(0:L*10,sim(16:L*10+16)) grid,title('semnalul interpolat si filtrat'); subplot(2,1,2),plot(f,fftshift(abs(Sim))) grid,xlabel('frecvente normate') title('spectrul semnalului interpolat si filtrat')
Exemplul 3.1:
Fie un semnal sinusoidal de frecvenţă F1=8 KHz, eşantionat cu frecvenţa Fes=32 KHz.
Lungimea semnalului este 256. Se doreşte modificarea ratei de eşantionare la:
o Fes1=48 KHz
o Fes2=20 KHz
o Fes3=12 KHz
Stabiliţi factorii de interpolare L şi decimare M pentru fiecare caz.
Proiectaţi filtrele trece jos necesare în componenţa schemei.
Efectuaţi schimbarea frecvenţei de eşantionare pentru semnalul dat.
Reprezentaţi spectrele semnalelor generate de-a lungul procedurii de schimbare a ratei
de eşantionare.
4. Filtre polifazice folosite la decimare
Exemplul 4.1:
Să se implementeze cu filtre polifazice un decimator de ordin 4, care foloseste un FTJ
de lungime 32. Filtrul se va genera folosind metoda ferestrelor (funcţia fir1). Va avea ordinul
31 şi pulsaţia de tăiere normată pi/M.
Cele patru filtre polifazice se obţin prin decimarea cu 4 a răspunsului la impuls.
-0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.5-120
-100
-80
-60
-40
-20
0
20Functia de transfer a FTJ
frecvente normate
dB
%proiectarea filtrului decimatorului M=4; h=fir1(31,1/M); %decimarea filtrului ptr %obtinerea polifazicelor h1=h(1:M:32); h2=h(2:M:32); h3=h(3:M:32); h4=h(4:M:32); %functiile de transfer H=fft(h,512); H1=fft(h1,512); H2=fft(h2,512); H3=fft(h3,512); H4=fft(h4,512); %caracteristica in dB a FTJ f=linspace(-0.5,0.5,512); figure,plot(f,fftshift(20*log10(abs(H)))) title('Functia de transfer a FTJ'),grid xlabel('frecvente normate'),ylabel('dB') %caracteristiciel polifazicelor figure,plot(f,fftshift(20*log10(abs(H1)))) title('Functiile de transfer ale polifazicelor') xlabel('frecvente normate'),ylabel('dB'),grid hold on,plot(f,fftshift(20*log10(abs(H2))),'r') plot(f,fftshift(20*log10(abs(H3))),'c') plot(f,fftshift(20*log10(abs(H4))),'k'),hold off
%fazele polifazicelor figure,plot(f,fftshift(angle(H1))) title('Functiile de transfer ale polifazicelor') xlabel('frecvente normate'),ylabel('dB'),grid hold on,plot(f,fftshift(angle(H2)),'r') plot(f,fftshift(angle(H3)),'c') plot(f,fftshift(angle(H4)),'k'),hold off
-0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.5-21
-20
-19
-18
-17
-16
-15
-14
-13
-12
-11Functiile de transfer ale polifazicelor
frecvente normate
dB
-0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.5-4
-3
-2
-1
0
1
2
3
4Functiile de transfer ale polifazicelor
frecvente normate
dB
Exemplul 4.2:
Folosind filtrele proiectate anterior, să se decimeze cu 4 semnalul
1 2( ) sin(2 ) sin(2 )x n f n f n
cu f1=0.05 şi f2=0.1, de lungime N=1024.
-0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.50
50
100
150
200
250spectru semnal intrare
frecvente normate
-0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.50
10
20
30
40
50
60
70
80
90
100spectru semnal decimat si filtrat
frecvente normate
%generarea semnalului f1=0.05; f2=0.1; N=1024; n=0:N-1; s=sin(2*pi*f1*n)+sin(2*pi*f2*n); S=fft(s,512); f=linspace(-0.5,0.5,512); figure,plot(f,fftshift(abs(S))),grid title('spectru semnal intrare'), xlabel('frecvente normate') %decimarea pe ramuri sd1=s(1:4:N); sd2=s(2:4:N); sd3=s(3:4:N); sd4=s(4:4:N); %filtrarea sdf=filter(h1,1,sd1)+filter(h2,1,sd2)+... filter(h3,1,sd3)+filter(h4,1,sd4); Sdf=fft(sdf,512); figure,plot(f,fftshift(abs(Sdf))),grid title('spectru semnal decimat si filtrat'), xlabel('frecvente normate')
5. Filtre polifazice folosite la interpolare
Exemplul 5.1:
Să se repete Exemplul 4.2 daca se doreşte interpolarea cu 4 a semnalului cu f1=0.3 şi
f2=0.4.
-0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.50
50
100
150
200
250spectru semnal intrare
frecvente normate
-0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.50
10
20
30
40
50
60
X: 0.1008
Y: 50.6
spectru semnal interpolat
frecvente normate
%generarea semnalului f1=0.3; f2=0.4; N=1024; n=0:N-1; s=sin(2*pi*f1*n)+sin(2*pi*f2*n); S=fft(s,512); f=linspace(-0.5,0.5,512); figure,plot(f,fftshift(abs(S))),grid title('spectru semnal intrare'), xlabel('frecvente normate') %iesirile filtrelor sf1=filter(h1,1,s); sf2=filter(h2,1,s); sf3=filter(h3,1,s); sf4=filter(h4,1,s); %intreteserea acestor semnale si=reshape([sf1;sf2;sf3;sf4],1,4*N); Si=fft(si,512); figure,plot(f,fftshift(abs(Si))),grid title('spectru semnal interpolat'), xlabel('frecvente normate')