傅里叶变换
傅里叶级数 => 傅里叶变换 => 离散傅里叶变换 推导
参考:https://www.zhihu.com/column/c_1299853366366543872
https://www.matongxue.com/madocs/712/
傅里叶级数
傅里叶变换
总结: 傅里叶级数适用于周期为T的周期函数,对于非周期函数,我们可以看成是T趋向于无穷大时,这样我们就可以通过傅里叶级数得到傅里叶变换。
离散傅里叶变换DFT IDFT
快速傅里叶变换FFT
参考:https://www.cnblogs.com/liam-ji/p/11685568.html
对于序列:
所以对于快速傅里叶变换而言,当数据长度N为2的m次方时,运算最快。
但是如果都补到2的m次方,有些情况下就会造成内存严重浪费,在OpenCV中提供了获得最优长度的函数,但返回的长度并不是2的
m次方,而是2^a * 3^b *5^c这样的乘积的数,兼具了性能和内存。
openCV中提供了方法 getOptimalDFTSize来得到最优长度,该方法通过对预先生成的表进行二分查找,得到最优长度。
int cv::getOptimalDFTSize( int size0 ) { int a = 0, b = sizeof(optimalDFTSizeTab)/sizeof(optimalDFTSizeTab[0]) - 1; if( (unsigned)size0 >= (unsigned)optimalDFTSizeTab[b] ) return -1; while( a < b ) { int c = (a + b) >> 1; if( size0 <= optimalDFTSizeTab[c] ) b = c; else a = c+1; } return optimalDFTSizeTab[b]; }
optimalDFTSizeTab这个表就是由2^a * 3^b *5^c算出来的,其中丢弃了一些3的幂次项