ANALISI SPETTRALE NON PARAMETRICA Con questo programma verrà stimata la densità spettrale di potenza di un generico processo stocastico utilizzando l’analisi non parametrica ed in particolare valuteremo la densità spettrale di potenza del segnale vocale. Il procedimento seguito consiste nel memorizzare dei file audio (in formato wav) in corrispondenza di particolari parole che ogni volta nell’esecuzione del programma saranno specificate e successivamente saranno convertite ed elaborate in MATLAB (con il file analisis.m). La stima della densità spettrale sarà ottenuta con il metodo del periodogramma e di Blackman-Tukey. Analisis.m %
STIMA DELLA DENSITA' SPETTRALE DI POTENZA DI UN PROCESSO STOCASTICO %
come processo verrà considerato un generico segnale vocale introdotto
dall'esterno clear
all err=0; while
err==0
F=input('inserisci
il nome del file contenente il segnale audio (formato wav): ','s');
F=[F,'.wav'];
if exist(F)==0
disp('non
digitare l''estensione del file oppure il file non esiste ');
else
err=1;
end end [y,fs]=wavread(F); x=((1:length(y))-1)/fs; N=length(y); strN=int2str(N); strfs=int2str(fs); disp(['Il
numero di campioni del file audio considerato sono : ',strN]); disp(['La
frequenza di campionamento del file audio è di ',strfs,'
Hz']); err=0; while
err==0
deltaf=input('introdurre
la massima risoluzione spettrale desiderata (in Hz): ');
M=floor(fs/deltaf);
if
M>=N
disp('La
risoluzione spettrale richiesta è troppo elevata! ');
else
err=1;
end end strd=int2str(deltaf); sound(y,fs) figure plot(x,y) xlabel('sec') set(gcf,'color',[1
1 1]); title('andamento
del processo nel tempo ') K=floor(N/M); %
METODO DEL PERIODOGRAMMA sp1=0; for
i=1:K
sp1=sp1+(abs(fft(y(1+(i-1)*M:i*M)))).^2; end sp1=sp1/(K*M); strmetodo1='del
Periodogramma'; %
METODO DI BLACKMAN-TUKEY sp2=0; for
i=1:K
autcorr=xcorr(y(1+(i-1)*M:i*M),(y(1+(i-1)*M:i*M)));
autcorr(length(autcorr)+1)=0;
for j=1:M
fin(j)=(j-1)/M;
fin(2*M-j)=(j-1)/M;
end
fin(2*M)=0;
autcorr=autcorr.*fin';
sp2=sp2+abs(fft(autcorr)); end sp2=sp2/(K*M); strmetodo2='di
Blackman-Tukey'; M2=2*M; freq1=(0:fs/M:fs/2); figure plot(freq1,sp1(1:length(freq1))) xlabel('f
[Hz]') title(['Densità
spettrale di potenza (risoluzione max di ',strd,'
Hz) con il metodo ',strmetodo1]) freq2=(0:fs/M2:fs/2); set(gcf,'color',[1
1 1]); figure plot(freq2,sp2(1:length(freq2))) xlabel('f
[Hz]') title(['Densità
spettrale di potenza (risoluzione max di ',strd,'
Hz) con il metodo ',strmetodo2]) set(gcf,'color',[1
1 1]); figure plot(freq1,sp1(1:length(freq1)),'k',freq2,sp2(1:length(freq2)),'r') xlabel('f
[Hz]') title(['Densità
spettrale di potenza (risoluzione max di ',strd,'
Hz) con il metodo :']) legend(strmetodo1,strmetodo2) set(gcf,'color',[1
1 1]); strK=int2str(K); disp(['Il
vettore audio è stato suddiviso in ',strK,'
parti'])
File sonori utilizzati ( non disponibili nel sito ) 1)
wave.wav
:
“ 1
2 3 PROVA SSSA
” 2)
a.wav
:
“ A
“ 3)
aiuola.wav
:
“ AIUOLA
“ 4) area.wav : “ AREA “
IL PROGRAMMA FUNZIONA CON UN QUALSIASI FILE CON ESTENSIONE .WAV PER IL QUALE SI VUOLE CONOSCERE LO SPETTRO
|