weidaidi 发表于 2008-12-11 21:45

FFT取值问题

FFT变换后,如果我只需要幅值信息的话,从而想得到能量,带宽,频谱质心等等,是否保留一半的数据就可以???

songzy41 发表于 2008-12-12 08:55

对的,实际上一半数据也是有N个(即一半数据的实部和虚部)。

weidaidi 发表于 2008-12-12 09:31

那FFT变换数据的后半部分有什么作用呢?整个FFT是将时域的信号转变为频域的信号,变换后的数据是对称的,它的这个变换的物理意义是什么呢??

moonlaker 发表于 2008-12-12 10:17

那是因为你用来做FFT的时域信号是实的,所以频谱对称。要是分析的信号的复数,就幅频和相频就没这对称性了

weidaidi 发表于 2008-12-12 11:32

请问下,如果对信号进行分帧了,对每帧数据求FFT变换,画幅度谱的时候,是不是应该将每帧对应同一频率的幅值加起来,然后在画出整个信号的幅度值,如下面的代码,这样写可对??
function FFTSpectrum();
clear all;
Winsize=1024;
Shift=512;
=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();
plot(f,mag);%做频谱图
xlabel('频率(Hz)');
title('Fourier Magnitude Spectrum');
grid;

songzy41 发表于 2008-12-12 14:35

对于稳态的随机信号可用楼主给出的程序来处理,但对于语音信号来说,就不一定合适。因为语音信号是一个准稳态的信号,即它是慢变化的,语音信号的特性--音调和共振峰都随时间慢变化着。为了能观察语音信号的特性最好用短时傅里叶分析(STFT)。

weidaidi 发表于 2008-12-12 19:30

短时傅里叶变换是不是就是把z=fft变为z=tfrstft(s);??

songzy41 发表于 2008-12-12 20:42

是,这时z是一组时间有频率的函数。
页: [1]
查看完整版本: FFT取值问题