matlab cftool光滑曲线导出为什么就不光滑了_快速傅里叶变换(FFT)中为什么要“补零”?…

  • Post author:
  • Post category:其他


066a2fb9ec80c32eb40dc5c8329cbb51.png

为了大家能够复现各个图中的结果,我附上了所有我编写的MATLAB代码。


创作不易,未经允许,禁止转载。

另外,说明一下,用MATLAB做FFT并不要求数据点个数必须为以2为基数的整数次方。之所以很多资料上说控制数据点数为以2为基数的整数次方,是因为这样就能采用以2为基的FFT算法,提升运算性能。

如果数据点数不是以2为基数的整数次方,处理方法有两种,一种是在原始数据开头或末尾补零,即将数据补到以2为基数的整数次方,

这是“补零”的一个用处

;第二种是采用以任意数为基数的FFT算法。

而MATLAB的


函数在参数

正好就是数据

的长度,但又不是以2为基数的整数次方时,并不会采用补零的方法,而是采用以任意数为基数的FFT算法,这样也能得到很好的结果,只不过速度要稍稍慢了一些,但一般的计算量是体现不出来的。

快速傅里叶变换 FFT

比如,现在我有一个信号,这个信号中仅包含两个正(余)弦波,一个是


,一个是

,即

。设定采样频率为

,如果采

个点,那么时域信号的时长就有

e62f73cea983713db7959f95c09acff1.png
图1. 1000个数据点

如果,直接对这1000个数据点其做快速傅里叶变换,