在上一篇内容
ElPsyCongree:傅里叶系列(二)傅里叶变换的推导zhuanlan.zhihu.com我们将傅里叶级数推导为傅里叶变换,而傅里叶变换计算的时候因为是一个积分,计算机并不是很好计算,所以要把积分换成一种累加形式,也就是本文要讨论的 离散傅里叶变化 DFT。
我们取上一篇的公式(7)
其中
因为傅里叶变化令
从而使一个累加的式子变成了一个积分,而DFT中
会根据输入的信号点数确定具体的值。具体计算公式为:
(注:
的计算方式是因为
的一个周期是
,N为你采样的点数)
因此我们可以简化公式为
因为标准化的傅里叶变化
有:
其中:
其中(1)为离散傅里叶逆变换,(2)为离散傅里叶变化。
代码实现:
先定义一个复数的结构体
public
注:t为f数组的索引,n为F数组的索引,理清楚了代码很好理解
计算DFT,即已知一个 float 数组求频谱
public
计算IDFT,即已知一个 float 数组求频谱
public
随便输入一个float的数组做一下实验
double
结果如下:
学过线性代数的会觉得有点像是 某个 维数很高的向量乘以 一个对应的矩阵,然后在乘以一个逆矩阵...转回来的过程。
我们记
得到DFT的矩阵:
以及IDFT的矩阵: