Sunteți pe pagina 1din 11

Lucrarea de laborator nr.

1
TEMA: CERCETAREA SPECTRELOR SEMNALELOR

Scopul lucrării: Analiza şi sinteza semnalelor periodice şi aperiodice.

Sarcina de laborator:
2.1 Să se efectueze calculul spectrului discret a succesiunii periodice de impulsuri
dreptunghiulare cu ajutorul programului fourier2, sintaxa căreia are forma:

fourier2(0,N,1) unde 0=/T=1/Q– durata relativă a impulsurilor; N– numărul armonicilor


calculate. Se recomandă valorile pentru calcul: 0=0.1; 0.2; 0.5; N=50.

fourier2(0.1,50,1)
>>delta_tau = 0.1; % duratarelativaaimpulsurilor
>>imax = 50; % numarularmonicilor calculate
>>flag = 1;
>>d_ik = imax/200; % pasul de esantionare
>> i = 0:imax; % diapazonul de armonici
>>ik = 0:d_ik:imax; % formareaaxei X - a numarului de esantioane
>>Aik = 2*(delta_tau)*(sin(ik*pi*delta_tau+eps)./(ik*pi*delta_tau+eps)); %
Amplitudineasemnalului
>>phik = -(pi/2)*(1-sign(Aik)); % Fazasemnalului
>> Ai = 2*(delta_tau)*(sin(i*pi*delta_tau+eps)./(i*pi*delta_tau+eps)); % Spectrul de
amplitudine
>>phi = -(pi/2)*(1-sign(Ai)); % Spectrul de faza
>>Aik = abs(Aik);
>>Aik(1) = Aik(1)/2;
>> Ai = abs(Ai);
>>Ai(1) = Ai(1)/2;
>>if flag == 1
>>figure(1); clf;
>>subplot(211), plot(ik, Aik); hold on;
>>stem(i, Ai); grid;
>>title('Spectrul de amplitudine'); xlabel('Numarul de armonici')
>> hold off
>>subplot(212), plot(ik, phik); hold on;
>>stem(i, phi); grid;
>>title('Spectru de faza'); ylabel('rad');
>>xlabel(['Numarul de armonici (relative Pulsdauer
=',...
num2str(delta_tau),' )']);
>> hold off;
>> end;
Pentru τ 0=0.2; N=50 si τ 0=0.5; N=50 avem urmatoarele rezultatele:

Calculul amplitudinilor şi fazelor armonicelor se efectuează după relaţiile:


sin ( k πτ 0 )
A k =2|C k|=2 τ 0| |
k πτ 0
ϕk =
π
2(1−sign (
sin ( k πτ 0 )
k πτ 0 ))
cu presupunerea că amplitudinea impulsurilor A=1.
Cercetaţi cum influenţează durata relativă 0 asupra spectrului. Pentru aceasta analizaţi
rezultatele calculului spectrelor cu programul fourier2 pentru diferite valori 0: 0.1; 0.2; 0.5 şi de
asemenea rezultatele calcului spectrelor pentru trei valori 0: 0.1; 0.05; 0.01, afişate pe ecran cu comanda
fourier3.
τ0:0 .1;
>>imax = 50; % Numarul maxim de armonic
>>figure(1); clf;
>>delta_tau = 0.1;
>>d_ik = imax/200; % pasul de esantionare
>> i = 0:imax; % diapazonul de armonici
>>ik = 0:d_ik:imax; % formareaaxei X - a numarului de esantioane
>>Aik = 2*(delta_tau)*(sin(ik*pi*delta_tau+eps)./(ik*pi*delta_tau+eps)); %
>>Amplitudineasemnalului
>>phik = -(pi/2)*(1-sign(Aik)); % Fazasemnalului
>> Ai = 2*(delta_tau)*(sin(i*pi*delta_tau+eps)./(i*pi*delta_tau+eps)); % Spectrul de
amplitudine
>>phi = -(pi/2)*(1-sign(Ai)); % Spectrul de faza
>>Aik = abs(Aik);
>>Aik(1) = Aik(1)/2;
>> Ai = abs(Ai);
>>Ai(1) = Ai(1)/2;
>>subplot(311), stem(i, Ai); hold on;
>>plot(ik, Aik);
>>title(['Spectrul de amplitudine (delta-tau = ', num2str(delta_tau),' )']);
>> hold off;
>> p = get(gca,'Position');
>> set(gca,'Position',[p(1),p(2),p(3),p(4)*0.9]);
Изменяя значения τ0 ,а именно τ 0:0.1; 0.05; 0.01 получили следующии результат:

2.4.2. Să se cerceteze procedura de sinteză a semnalului de tip meandru după numărul limitat al
primelor n armonici a acestui semnal. Să se convingă de faptul că, cu creşterea lui n calitatea aproximaţiei
se îmbunătăţeşte. Remarcaţi prezenţa oscilaţiilor în vecinătatea salturilor de semnal, legate cu aşa numitul
efectul Gibbs, ce apare la tăierea seriei Fourier. Cercetarea se efectuează cu ajutorul programului gibbs1
adresarea la care are forma:
gibbs1(n,1)
unde n– numărul de armonici considerate (se recomandă valorile n=2, 5, 10).
gibbs1(2,1)
>> n=2; % numarul de armonici
>>flag = 1;
>> T = 200; % perioada
>> t = 2*(-T/2:0.1:T/2); % intervalul de timp
>> y = zeros(1, length(t)); % initializare
>> nt = 2*n-1; % numarulmaxim de armonici
>> m = 0;
>>for k = 1:2:nt
>> y = y + ((-1)^m)*cos(k*2*pi*t/T)/k;
>> m = m+1;
>>end;
>> y = y*4/pi;
>>if flag == 1
>>figure(1);
>>clf;
>>plot(t, y);
>>grid;
>>title(['Reconstructiasemnalului cu n = ', num2str(fix(n)),' armonici']);
>>xlabel(['Timpul in secunde (T = ', num2str(T), ' s)']);
>>end;
Pentru n=5 ,n=10 avem urmatoarele rezultate :

Cu ajutorul programului gibbs2 să se afişeze pe ecran concomitent trei oscilograme ale


semnalului sintetizat la n=2, 10, 20.
Gibbs 2 n=2,10,20
>>figure(1); clf;
>> n = 2,10,20;
>> T = 200; % perioada
>> t1 = 2*(-T/2:0.1:T/2); % intervalul de timp
>> y1 = zeros(1, length(t1)); % initializare
>> nt = 2*n-1; % numarul maxim de armonici
>> m = 0;
>>for k = 1:2:nt
>> y1 = y1 + ((-1)^m)*cos(k*2*pi*t1/T)/k;
>>m = m+1;
>>end;
>> y1 = y1*4/pi;
>>subplot(311), plot(t1,y1);
>>title(['Reconstructiasemnaluluicu n = ',num2str(n),...
' armonici']);
>>grid;
>>figure(2); clf;
>>plot (t1, [y1',y2',y3']);

2.4.3. Analiza spectrelor semnalelor poliarmonice


Vom analiza ca exemplu semnalul ce constă din trei oscilaţii armonice cu frecvenţele 1, 2 şi 3Hz
şi amplitudinile corespunzător 3, 1 şi 4.
y(t)= 3cos(2t)+ sin(4t)+ 4cos(6t)
Vom afişa graficele a însuşi semnalului, a spectrului de amplitudine (modulul spectrului) şi de
asemenea a părţilor reale şi imaginare ale spectrului.
» Ts=0.01;T=100;t=0:Ts:T;
» y=3*cos(2*pi*t)+sin(4*pi*t)+4*cos(6*pi*t);
» plot(t,y);grid

Aflăm modulul spectrului acestui semnal:


» df=1/T;Fm=1/Ts;len=length(t);
» f=-Fm/2:df:Fm/2;x=fft(y)/len; xs=fftshift(x);
» A=abs(xs);s1=len/2-500;s2=len/2+500;
» stem(f(s1:s2), A(s1:s2));grid
» xlabel('frecventa(Hz)');ylabel('Modulul')
În rezultat se obţine modulul spectrului complex, ce corespunde formei complexe a seriei Fourier

cu coeficienţii
|C |=A /2
k k de două ori mai mici ca amplitudinile reale Ak, deoarece ele sunt
“distribuite” egal între eşantioanele pozitive şi cele negative. Pentru construcţia spectrului de fază este
suficient că operatorul calculului modulului A=abs(xs) să-l schimbăm cu operatorul calculului unghiului
de fază
P=angle(xs)
cu schimbările corespunzătoare în operatorii de afişare a graficelor stem şi ylabel.
Evidenţiem partea reală şi cea imaginară ale spectrului complex:
» Re=real(xs);Im=imag(xs);
» s1=len/2-500;s2=len/2+500;
» subplot(2,1,1)
» plot(f(s1:s2),Re(s1:s2));grid
» ylabel('Partea reala')
» subplot(2,1,2)
» plot(f(s1:s2),Im(s1:s2));grid
» ylabel('Partea imaginara')

2.4Cu ajutorul programului fourier4 priviţi graficele semnalelor cu frecvenţele f 1=100Hz,


f2=4300Hz şi frecvenţa de discretizare fs=1000Hz, şi de asemenea spectrele sumei acestor semnale.
Graficul spectrului ilustrează că în afară de componentele reale cu frecvenţele de 100, 1000-100=900Hz
sunt două componente spectrale false cu frecvenţele 300 şi 700Hz, ce lipsesc în semnalul de intrare.
Pentru eliminarea efectului de suprapunere a spectrelor este necesar ca frecvenţa de discretizare să

satisfacă condiţia
f s ≥2 f m , unde fm– frecvenţa maximă în spectrul semnalului analizat.

>> f1 = 100; % frecventa primului semnal


>> f2 = 4300; % frecventa celui de al doilea semnal
>>fs = 1000; % frecventa de discretizare a semnalului
>>Ts = 1/fs;
>> t = 0:0.1e-4:49e-3; % Diapazonul de timp pentru semnalul continuu
>>td = 0:Ts:49e-3; % Diapazonul de timp pentru semnalul discret
>> x1 = 5*cos(2*pi*t*f1-pi/2); % Semnalele continue
>> x2 = 10*cos(2*pi*t*f2+pi/3);
>> xd1 = 5*cos(2*pi*td*f1-pi/2); % Semnale discrete
>> xd2 = 10*cos(2*pi*td*f2+pi/3);
>>%------ Reprezentareasemnalelor
>>figure(1); clf;
>>subplot(211), plot(t,x1); hold on;
>>stem(td,xd1); grid;
>>title('Semnalul cu frecventa f1 = 100 Hz (fs = 1000 Hz)');
>>xlabel('Timpul in secunde'); hold off;
>>tm = max(t)/10;
>>p = find(t<=tm);
>>q = find(td<=tm);
>>subplot(212), plot(t(p),x2(p)); hold on;
>>stem(td(q),xd2(q)); grid;
>>title('Semnalul cu frecventa f2 = 4300 Hz (fs = 1000 Hz)');
>>xlabel('Timpul in secunde'); hold off;
>> %------ Reprezentarea FFT (modulul(FFT)/N si unghiul (FFT))
>> xd = xd1 + xd2;
>> Xi = fft(xd);
>>N = length(Xi);
>>figure(2);
>>subplot(211), stem((0:N-1)*fs/N, abs(Xi)/N); grid;
>>title('Spectrul de amplitudine (modului(FFT)/N)');
>>xlabel('Frecventa in Hz');
>>phase = angle(Xi);
>>for m = 1:N
>> if abs(real(Xi(m)))& abs(imag(Xi(m))) < 1e-9;
>> phase(m) = 0;
>>end;
>>end;
>>subplot(212), stem((0:N-1)*fs/N, phase); grid;
>>title('Spectrul de faza (unghiul (FFT))');
>>xlabel('FrecventainHz');

2.4.5. Cu ajutorul programului fourier5 să se efectueze calculul spectrelor semnalelor armonice


cu frecvenţele f1=130Hz şi f2=200Hz, utilizând intervalul de observare T=50ms şi frecvenţa de
discretizare fs=800Hz. Deoarece pentru primul semnal intervalul de observare conţine un număr
fracţionar de perioade m1=Tf1=6.5 se observă efectul, amintit mai sus, de întindere a spectrului(leakage
effect). Pentru al doilea semnal, la care m 2=Tf2=10, acest efect lipseşte. Este arătată de asemenea influenţa
utilizării funcţiei Hamming cu scopul micşorării influenţei acestui efect.

>>f1 = 130; % Frecventa primului semnal


>>f2 = 200; % Frecventa celui de al doilea semnal
>>fs = 800; % frecventa de discretizare
>>Ts = 1/fs;
>>x1max = 15; % Amplitudinea
>>x2max = 5;
>> t = 0:0.1e-4:49e-3; % Diapazonul de timp pentru semnalele continue
>>td = 0:Ts:49e-3; % Diapazonul de timp pentru semnalele discrete
>>x1 = x1max*cos(2*pi*t*f1-pi/2); % Semnalele continue
>> x2 = x2max*cos(2*pi*t*f2+pi/3);
>> xd1 = x1max*cos(2*pi*td*f1-pi/2); % Semnalelediscrete
>> xd2 = x2max*cos(2*pi*td*f2+pi/3);
>> %------ Reprezentareasemnalelor
>>figure(1); clf;
>>subplot(211), plot(t,x1); hold on;
>>stem(td,xd1); grid;
>>title(['Semnalul cu frecventa f1 = ',num2str(f1),' Hz (fs = ',... num2str(fs),' Hz)']);
>>xlabel('Timpul in secunde'); hold off;
>>tm = max(t)/1;
>>p = find(t<=tm);
>>q = find(td<=tm);
>>subplot(212), plot(t(p),x2(p)); hold on;
>>stem(td(q),xd2(q)); grid;
>>title(['Semnalul cu frecventa f2 = ',num2str(f2),' Hz (fs = ',... num2str(fs),' Hz)']);
>>xlabel('timpul in secunde'); hold off;
>> %------ Reprezentarea FFT (modulul(FFT)/N si unghiul(FFT))
>> Xi1 = fft(xd1);
>> Xi2 = fft(xd2);
>>N = length(Xi1);
>>N_2 = fix(N/2);
>>figure(2);
>>subplot(211), stem((0:N_2-1)*fs/N, abs(Xi1(1:N_2)/N));
>>title(['Spectrul de amplitudine a semnalului xd1 (f1 = ',... num2str(f1), 'Hz)']);
>>xlabel('Frecventa in Hz');
>> ylabel('Modulul (DFT/N)');
>> subplot(212), stem((0:N_2-1)*fs/N, abs(Xi2(1:N_2)/N));
>> title(['Spectrul de amplitudine a semnalului xd2 (f2 = ',... num2str(f2), 'Hz)']);
>> xlabel('Frecventa in Hz');
>> ylabel('Modulul (DFT/N)');
>> m1 = N*f1/fs;
>> m2 = N*f2/fs;
>>in = 0:0.1:N-1;
>>Xdin1 = zeros(1,length(in));
>>Xdin2 = zeros(1,length(in));
>>for l = 1:length(in)
>>Xdin1(l) = sum(xd1.*exp(-j*2*pi*in(l)*(0:N-1)/N));
>>Xdin2(l) = sum(xd2.*exp(-j*2*pi*in(l)*(0:N-1)/N));
>>end;
>>in1 = find(in <= N_2);
>>figure(3); clf;
>>subplot(211), plot(in(in1)*fs/N, abs(Xdin1(in1)/N));
>>hold on; stem((0:N_2-1)*fs/N, abs(Xi1(1:N_2)/N));
>> hold off;
>>title('DFT cafunctie continua sidiscreta');
>>ylabel('Modulul (DFT/N)');
>>xlabel(['Frecventa in Hz; (f1 = ',num2str(f1),' Hz; fs = ',... num2str(fs),' Hz; m1 =
',num2str(m1),')']);
>>subplot(212), plot(in(in1)*fs/N, abs(Xdin2(in1)/N));
>>hold on; stem((0:N_2-1)*fs/N, abs(Xi2(1:N_2)/N));
>>hold off;
>>ylabel('Modulul (DFT/N)');
>>xlabel(['Frecventa in Hz; (f2 = ',num2str(f2),' Hz; fs = ',... num2str(fs),' Hz; m2 =
',num2str(m2),')']);
>>w = hanning(N);
>>w_t = hanning(length(t));
>>text_1 = 'hanning';
>>figure(4); clf;
>>xd1_f = xd1.*w';
>>subplot(211), stem(td, xd1_f); hold on
>>plot(t, x1.*w_t');
>>hold off; grid;
>>title(['Semnalul xd1 cu efect ',text_1,' (f1 = ',... num2str(f1),' Hz; fs = ',... num2str(fs),' Hz)']);
>>xlabel('Timpul in secunde'); hold off;
>> Xd1_f = fft(xd1_f);
>> in = 0:0.1:N-1;
>>Xdin1_f = zeros(1,length(in));
>>for l = 1:length(in)
>>Xdin1_f(l) = sum(xd1_f.*exp(-j*2*pi*in(l)*(0:N-1)/N));
>>end;
>>subplot(212), stem((0:N_2-1)*fs/N, abs(Xd1_f(1:N_2)/N));
>>hold on;
>>plot(in(in1)*fs/N, abs(Xdin1_f(in1)/N));
>>title(['Spectrul de amplitudine a semnalului xd1 cu efect ',text_1,' (f1 = ',... num2str(f1), 'Hz)']);
>>xlabel('Frecventa in Hz');
>> ylabel('Modulul (DFT/N)');
2.4.6. Să se genereze un semnal sub unui impuls unitar dreptunghiular cu amplitudinea A=0.8 şi lăţimea
w=0.5s. Vom da pasul de discretizare Ts=0.01s, iar durata analizei T= 1s.

» Ts=0.01;T=1;
» A=0.8;
» w=0.5;N=T/Ts;t=0:Ts:T;
» y=A*rectpuls(t,w);
» plot(t(1:100),y(1:100)); grid

Vom aplica procedura fft la vectorul y şi vom


construi graficul modulului rezultatului de
frecvenţă.
» x=fft(y)/N;df=1/T;Fm=1/Ts;
» f=0:df:Fm;a=abs(x);
» stem(f,a);grid

Graficul spectrului este prezentat în intervalul de frecvenţe de la 0 la f s. Pentru construcţia


graficului modulului spectrului în formă obişnuită, în gama de frecvenţe de la -f s/2 la fs/2 utilizăm
comenzile
» xp=fftshift(x);f1=-Fm/2:df:Fm/2;
» a=abs(xp);stem(f1,a),grid;xlabel('Frecventa, Hz');
»ylabel('Modulul')
Vom construi graficele părţilor reale şi imaginare ale imaginii Fourier a impulsului
dreptunghiular:
» Re=real(xp);Im=imag(xp);
» plot(f1,Re,f1,Im),grid
» xlabel('Frecventa, Hz')
» ylabel('Partea reala si imaginara')

CONCLUZII:
In Lucrarea de laborator nr.1 am efectuat calculul spectrelor semnalelor cu ajutorul
programelor fourier2, fourier 3, fourier 4, fourier 5 si gibbs1.
Am efectuat calculul spectrului discret a succesiunii periodice de impulsuri
dreptunghiulare cu ajutorul programului fourier2 apoi am cercetat cum influenţează durata relativă
0 asupra spectrului. Pentru aceasta am analizat rezultatele calculului spectrelor cu programul fourier2
pentru diferite valori şi de asemenea rezultatele calculului spectrelor pentru alte trei valori in final afisind
comanda fourier3.

Am cercetat procedura de sinteză a semnalului de tip meandru după numărul limitat al primelor n
armonici a acestui semnal. Si ne-am convins de faptul că, cu creşterea lui n calitatea aproximaţiei se
îmbunătăţeşte. Observind mai apoi prezenţa oscilaţiilor în vecinătatea salturilor de semnal, legate cu
efectul Gibbs, ce apare la tăierea seriei Fourier.

Cu ajutorul programelor noi am obtinut date veridice in forma grafica care este mai usor
perceputa de catre studenti.

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