% Analisi spettrale di segnali stazionari: due sinusoidi vicine % Verifica dei grafici visti a lezione: zero-padding, finestratura etc. % Segnale numerico: somma di due sinusoidi L=64; % largezza finestra temporale nvec= (0:L-1); % ascissa campioni A0= 1; A1= 0.75; % Ampiezze sinusoidi % i valori seguenti corrispondono al caso visto a lezione che creava problemi w0= 2*pi/14; w1= 2*pi/7.5; % pulsazioni normalizzate sinusoidi % i valori seguenti corrispondono al caso fortuito visto a lezione che individua % tutti campioni nulli della DFT (v periodico con periodo L) % w0= 2*pi/16; w1= 2*pi/8; % pulsazioni normalizzate sinusoidi % segnale numerico vn= A0*cos(w0*nvec)+A1*cos(w1*nvec); % tempo figure(1); clf; stem(nvec,vn,'b'); xlabel('n'); ylabel('v(n)'); axis([0 (L-1) -2 2]); title('Somma di due sinusoidi'); % frequenza figure(2); clf; stem(nvec,abs(fft(vn)),'b'); xlabel('k'); ylabel('V(k)'); axis([0 (L-1) 0 L/2+1]); title('DFT di due sinusoidi di durata L'); % Zero-padding per aumentare la leggibilit? dello spettro nzvec= (0:2*L-1); vnz= [vn, zeros(1,L)]; % tempo figure(3); clf; stem(nzvec,vnz,'r'); xlabel('n'); ylabel('v(n)'); axis([0 (2*L-1) -2 2]); title('zero-padding applicato alla somma di due sinusoidi'); % frequenza figure(4); clf; stem(nzvec,abs(fft(vnz)),'r'); xlabel('k'); ylabel('V(k)'); axis([0 (2*L-1) 0 L/2+1]); title('spettro con leggibilità migliorata dallo zero-padding'); % uso della finestra di Kaiser x diminuire il "leakage" Asl= 40; % [dB] valore imposto x attenuazione lobo secondario (leakage) % uso l'espressione approssimata empirica che lega Asl e beta. No ";", stampa beta beta= 0.76609*(Asl-13.26)^0.4+0.09834*(Asl-13.26) % parametro fin. di Kaiser Lk= 42; % lunghezza finestra di Kaiser.... provare 32,42,54,L % uso l'espressione approssimata empirica che lega Asl, Lk e la risoluzione Dw Lkmin= 1 + 24*pi*(Asl+12)/(155*(w1-w0)); % per non avere sovrapposizione dei lobi principali sprintf('Valore min. Lk per risolvere le sinusoidi= %d ',ceil(Lkmin)) finKai= kaiser(Lk,beta)'; % kasier() ? un vettore colonna Ndft= 1024; % numero di punti per lo spettro (zero-padding) Ndftvec= (0:Ndft-1); % vettore ascisse segnale con zero-padding vnpad= [vn, zeros(1,Ndft-L)]; % segnale con zero-padding finpad= [finKai zeros(1,Ndft-Lk)]; % finestra con zero-padding vnfin= vnpad.*finpad; % tempo figure(5); clf; stem(Ndftvec,vnfin,'m'); xlabel('n'); ylabel('v(n)'); axis([0 (L-1) -2 2]); title('Segnale finestrato con finestra Kaiser'); % frequenza figure(6); clf; plot(Ndftvec,abs(fft(vnfin)),'m'); xlabel('k'); ylabel('V(k)'); axis([0 (Ndft-1) 0 Lk/2+1]); title('Spettro del segnale finestrato, con zero-padding'); % se i segnali si risolvono poco, si deve incrementare Lk.... % NOTA: i valori dello spettro sono bassi a causa di beta. % Provare a diminuire beta: aumentano i valori ma anche i lobi laterali