傅里叶级数 => 傅里叶变换 => 离散傅里叶变换 推导
参考: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的幂次项