FFT
是一种如雷贯耳的快速算法,应用范围及其广泛,就不多说了。不过 DFT 很多人并不是很清楚,只知道 DFT 比 FFT
效率低,速度慢。实际上,在很多应用场合下,DFT 反而会比 FFT 效率高很多。
首先,回顾一下复数的特性:
V = R + jI = M*(R/M + j I/M) = M*(cos(A) + j
sin(A)) = M*exp(j
A) (1)
where
R is the real and I is the image, M = sqrt(R*R + I*I) and
A=arctan2(R, I) is the angle.
DFT/FFT 首要的任务是确定系统的基频(Fundamental Frequency),
这样就能确定系统一个周期的采样点数。基频在同一个系统中可根据需要而采用不同的值。现在假设系统的采样时间为
Ts, 周期采样点数 N (对于
FFT, 一般要求 N = 2*M = 2^L, DFT 则无此要求),则第
H 次谐波的 DFT 的计算公式可以从基本的
Fourier 积分公式中得出:
V(k) = sum (x(k - n) * exp( j 2* n *PI
* H /N)
*2/N) (2)
这里, n = 0 to N-1,
sum 是 N 项之和, 也就是一个周波(cycle)
的数据乘积之和。
累加一般可以化成迭代形式,公式 (2) 的迭代形式: