绘制音频信号的振幅谱

时间:2016-10-28 18:34:54

标签: matlab audio fft octave spectrum

我正在对我的WAV文件进行短时傅里叶变换。基本上我正在做的是实时光谱分析。要理解,我的意思是,我建议你尝试我的代码。只需将任何WAV文件放入matlab / octave目录即可。无论如何,问题是如何从我的音频信号中获得幅度谱?顺便说一下,我的单侧频谱信号包含在变量" Yres"中。

%% OCTAVE-Program

[y,fs]=wavread('UnchainMyHeart.wav');
%Reading wav-file

t=linspace(0,length(y)/fs,length(y));
%Creating time vector

plot(t,y) %Drawing signal in the time domain
fftlen = 4096; 
segl =floor(0.05*fs); %Length of Segment 

windowshift=segl/2; 
window=hann(segl); %Optimizing hanning-function in a variable
window=window.';

si=1; %Start Index
ei=segl; %End Index

AOS= length(y)/windowshift - 1;
f1=figure;


f=0:1:fftlen-1;
f=f/(fftlen-1)*fs;

Ya=zeros(1,fftlen);
plot(f,Ya),axis([0 fs -90 20])

grid on 


n=0;

for m= 1:1:AOS

y_a = y(si:ei);
y_a= y_a.*window;
Ya=fft(y_a, fftlen);

n=n+1;
if n==1
  Yres=abs(Ya);
  else
  Yres=Yres+abs(Ya);
end

if n=10
  Yres=Yres/10;
  n=0;

  drawnow; %Updating the frames


figure(f1);
plot(f(1:end/2), 20*log10(abs(Yres(1:end/2))));

ylim([-90 20]);

title("One-sided Spectrum of audio signal");    
xlabel("f(Hz)"); 
ylabel("dB");

grid on;

end

si=si+windowshift; %Update Start Index  
ei=ei+windowshift; %Update End Index

end

0 个答案:

没有答案