|
楼主 |
发表于 2008-12-12 11:32
|
显示全部楼层
请问下,如果对信号进行分帧了,对每帧数据求FFT变换,画幅度谱的时候,是不是应该将每帧对应同一频率的幅值加起来,然后在画出整个信号的幅度值,如下面的代码,这样写可对??
function FFTSpectrum();
clear all;
Winsize=1024;
Shift=512;
[WavData,Fs]=ReadAudFile();%WavData为语音信号采样值,Fs为采样频率
WavData=WavData(:,1);%若是双声道,取单声道的值即可。
FrameNum=floor((length(WavData)-Winsize)/Shift)+1;%
for i=1:FrameNum
n1=(i-1)*Shift+1;
n2=n1+(Winsize-1);
s=WavData(n1:n2);
s=s.*hamming(Winsize);
z=fft(s);
z=z(1:Winsize/2+1);
mag(:,i)=abs(z)*2/Winsize;%得出幅值。
f=(0:length(z)-1)*Fs/length(z);%进行对应的频率转换
end
mag=sum(mag,2);
axis([min(f) max(f) min(mag) max(mag)]);
plot(f,mag);%做频谱图
xlabel('频率(Hz)');
title('Fourier Magnitude Spectrum');
grid; |
|