Matlab里的fft是如何计算的?补零fft是否必要?Matlab里的fft事如何计算的?与Dft的结果是否相同?补零fft是否必要?
下面通过实验分析,结果如下:
在matlab中不论数据长度是否是2的整次幂,dft和fft的结果都是相同的。
Dft的标准角频率是以2π为周期的,若以π为周期,其效果等同于原始信号补一半零,再做dft变换,不会提高频率分辨率
.........。
Matlab中的fft变换,对于数据长度2的整次幂当然是基2的fft。但是对于长度非2的整次幂数据,其过程是多种混合基的混合运算,其结果当然与dft相同。绝对不是补零到2的整次幂再进行傅里叶变换,那样会漏掉特征(如图中曲线7)。但是对于补零原始数据的整倍数后,再抽样不会繁盛畸变,与直接fft变换结果一样(如图中曲线2、
3、4)
将原始数据补零后再抽取需要点数的做法不可取,不仅不能增加频率分辨率,还会引起较大畸变,就算是补原始数据点的整数倍零,其结果也是只与不补零的效果相同。
下图为matlab仿真图,原始数据400点
曲线1:dft计算时旋转因子周期定为π(标准以2π为周期)
曲线2:fft补一半零达到2倍原数据长度的fft变换,向上偏移10
曲线3:2倍原数据长度的fft变换,向上偏移20。
曲线4:dft补一半零达到2倍原数据长度的dft变换,向上偏移30
曲线5:标准fft曲线;
曲线6:标准dft曲线;
曲线7:原始数据400点补零到512点,傅里叶变换后再抽取400点的曲线。
function xk=dft(xn)%dft
N=length(xn);
n=0:(N-1);
WN=exp(-j*2*pi*n/N);%旋转因子
for i=1:N