转载:http://blog.csdn.net/tt2767/article/details/47301849
离散傅立叶变换(DFT)
傅立叶变换存在4种变体,它们都是线性积分变换:傅里叶级数,连续傅里叶变换,离散傅里叶变换,离散时域傅里叶变换。
我们来看一下4种变换的图样与特性:
大家都知道,计算机系统是离散的,所以离散傅立叶变换在计算机领域得到了很大的应用与改进。
DFT的图像上不是一条连续的曲线了,而是一个一个点组成的图像,所以说它的公式是这样的:
yk=Σn−1j=0xj(e−2πikn)j
这里也给出 逆离散傅立叶变换公式(IDFT):
xj=1nΣn−1k=0yk(e−2πijn)k
它最大的作用之一就是求卷积!
1.卷积
百度百科上讲的卷积很抽象,这里有一个“通俗“的例子:假如我打了你一拳,这一拳的痛感会在1个小时之内消失,但你这一个小时之内的感觉也不一样。我们记使用最轻的力打你一拳时,你在这一个小时内的疼痛感觉图像为2h(t),那么用两倍的力打你就是2h(t),3倍力3h(t)……f(n)倍力就为f(n)h(t)。如果我每秒打你一次,连续打你半分钟,那么你在一个小时零半分钟之内都会感到疼(每一次有新痛感来临时上一次痛感都会变化),那么怎么计算你在这一时间段内某一秒时的痛感呢?就是把之前的所有痛感叠加起来啊!Y(t) = 0 + …… + f(n)h(t-n),然而当你每次被打一拳的前无穷小时刻与后无穷小时刻都被打了一拳,那么我就认为打你是一件连续的行为,这时候就要把加和改写为积分了:
Y(t)=∫+∞−∞f(n)h(t−n)dt
而卷积定理指出:函数卷积的傅里叶变换是函数傅里叶变换后的乘积!
也就是说要求两个函数的卷积,我们就可以先把两个函数做傅立叶变换,之后算出它们的乘积,再做一次傅立叶逆变换就得出结果了!大学计算瞬间变成小学算术啊有木有!
2.点值表示法
可以粗略的理解为卷积是两个相关函数的乘积(这么说并不准确)
求多项式乘法的本质就是求卷积,像这样:
(8x3+6x2+7)×(4x8+x4+2x)
可是如果单单就是这样相乘就没有什么可优化的了,可是让我们想一下多项式其实也是一个函数,每一个x值都对应一个y值,那么就如两个点确定一条直线一样,我们也能用几个点确定一个多项式,这就是点值表示法。
如果多项式的最高次项的次数为n,那么在常数已知的情况下,我们只需要知道n个不同点就能联立求得多项式了,那么我就可以用这n个点的集合表示这个多项式了。只要把点值对应相乘就可以了,复杂度为O(n)。
那么问题来了,如果单纯的代值进去,运算量会非常大,复杂度为O(n²),这时候就需要用到快速傅立叶变换了。