Sunteți pe pagina 1din 12

Lucrare de laborator nr.

CERCETAREA SPECTRELOR SEMNALELOR

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


aperiodice.

1.2. Sarcina de laborator

1.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.1,50,1)

>> delta_tau = 0.1; % durata relativa a impulsurilor


>> imax = 50; % numarul armonicilor calculate
>> flag = 1;
>> d_ik = imax/200; % pasul de esantionare
>> i = 0:imax; % diapazonul de armonici
>> ik = 0:d_ik:imax; % formarea axei X - a numarului de
esantioane
>> Aik = 2*(delta_tau)*(sin(ik*pi*delta_tau+eps)./
(ik*pi*delta_tau+eps)); % Amplitudinea semnalului
>> phik = -(pi/2)*(1-sign(Aik)); %
Faza semnalului
>> 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;

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.
Fourier 3  0 : 0.1; 0:0.5

>> 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; % formarea axei X - a numarului de
esantioane
>> Aik = 2*(delta_tau)*(sin(ik*pi*delta_tau+eps)./
(ik*pi*delta_tau+eps)); % >> Amplitudinea semnalului
>> phik = -(pi/2)*(1-sign(Aik)); %
Faza semnalului
>> 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]);
1.2.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).
>> 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; % numarul maxim 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(['Reconstructia semnalului cu n = ', num2str(fix(n)),'
armonici']);
>> xlabel(['Timpul in secunde (T = ', num2str(T), ' s)']);
>> end;

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
>> figure(1); clf;
>> n = 2;
>> 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(['Reconstructia semnalului cu n = ',num2str(n),...
' armonici']);
>> grid;

1.2.3. Cu ajutorul programului fourier4 priviţi graficele


semnalelor cu frecvenţele f1=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  2f 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);
>> %------ Reprezentarea semnalelor
>> 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('Frecventa in Hz');

1.2.4. 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 m 1=Tf1=6.5 se
observă efectul, amintit mai sus, de întindere a spectrului(leakage
effect). Pentru al doilea semnal, la care m2=Tf2=10, acest efect
lipseşte. Este arătată de asemenea influenţa utilizării funcţiei
Hanning 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); % Semnalele discrete
>> xd2 = x2max*cos(2*pi*td*f2+pi/3);

%------ Reprezentarea semnalelor


>> 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)); grid;
>> 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)); grid;


>> 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)); grid;
>> hold off;
>> title('DFT ca functie continua si discreta');
>> 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)); grid;
>> 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);
Conluzii: in aceasta lcrare de laborator am avut ca scopul
lucrarii analiza şi sinteza semnalelor periodice şi aperiodice.
Si am efectuat calculul spectrului discret a succesiunii periodice de
impulsuri dreptunghiulare cu ajutorul programului fourier2,
fourier3,gips1,gips2, fourier4, fourier5