声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1374|回复: 7

[FFT] FFT取值问题

[复制链接]
发表于 2008-12-11 21:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

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

使用道具 举报

发表于 2008-12-12 08:55 | 显示全部楼层
对的,实际上一半数据也是有N个(即一半数据的实部和虚部)。
 楼主| 发表于 2008-12-12 09:31 | 显示全部楼层
那FFT变换数据的后半部分有什么作用呢?整个FFT是将时域的信号转变为频域的信号,变换后的数据是对称的,它的这个变换的物理意义是什么呢??
发表于 2008-12-12 10:17 | 显示全部楼层
那是因为你用来做FFT的时域信号是实的,所以频谱对称。要是分析的信号的复数,就幅频和相频就没这对称性了
 楼主| 发表于 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;
发表于 2008-12-12 14:35 | 显示全部楼层
对于稳态的随机信号可用楼主给出的程序来处理,但对于语音信号来说,就不一定合适。因为语音信号是一个准稳态的信号,即它是慢变化的,语音信号的特性--音调和共振峰都随时间慢变化着。为了能观察语音信号的特性最好用短时傅里叶分析(STFT)。
 楼主| 发表于 2008-12-12 19:30 | 显示全部楼层
短时傅里叶变换是不是就是把z=fft变为  z=tfrstft(s);??
发表于 2008-12-12 20:42 | 显示全部楼层
是,这时z是一组时间有频率的函数。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-22 17:12 , Processed in 0.069210 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表