我被问到一个面试问题,我需要使用它,但我不知道它是什么 那么用简单的英语是什么Fast Fourier Transform我怎么能用它来找到函数的导数,给定它的(x,y)值作为输入?
你会如何实现它?
编辑:
我问这个是因为给定一系列(x,y)值我需要计算函数的样子,派生它并找出它不断变化的次数(即(0,1),(1, 2)被计为一个)或根本没有变化(0,5),(1,5)也算作一个变化。)
答案 0 :(得分:10)
关于问题的第一部分,前物理学教授Bartosz Milewski有一个非常好的explanation,FFT是什么以及它是如何工作的。
此外,Mastering The Fourier Transform in One Day也值得一读。
说你有发声的声音。
然后设置,让我们在这里获得一个很好的圆数,1024个谐波振荡器,它们会响应特定的频率范围。
播放声音,比如一秒钟。
振荡器开始对扬声器发出的声音产生共鸣。在上述第二个之后,你会读到每个振荡器产生共振的程度。因此,您可以获得离散傅里叶变换,这意味着您可以获得每个频率范围对扬声器发出的声音有多大影响的图表。
不是将声音可视化为由波形引起的气压量,而是改变时隙,而是将其视为一系列频率范围的强度。
当然在解释DFT时,扬声器部分并不合适,因为您必须处理采样输入。因此,在这种情况下,实际上应该在1/44秒之后测量1024个数字“振荡器”,因为音频是以44kHz的速率采样的。
快速傅里叶变换是一种执行离散傅立叶变换的算法,计算机可以很容易地在输入信号上运行。它强加了你必须在实现中使用的一些约束(例如,样本的数量必须是2的幂),因为它使用一些聪明的技巧来大大减少对样本缓冲区执行的计算量。
实际上没有必要更深入,因为我提供的两个链接提供了非常明确的解释。请注意,如果不了解其背后的数学,就不可能从理论到实施。
我希望这个介绍有道理!
答案 1 :(得分:7)
来自Wolfram,
快速傅立叶变换(FFT)是一种离散傅里叶变换算法,它将N点所需的计算次数从2N ^ 2减少到2NlgN,其中lg是基数-2对数。如果要变换的函数与采样频率不是谐波相关的,则FFT的响应看起来像sinc函数(尽管积分功率仍然是正确的)。使用变迹函数通过变迹可以减少混叠(也称为泄漏)。然而,混叠减少是以扩大光谱响应为代价的。
它通常作为信号处理课程的一部分进行教学。因此,您一定需要处理一些图像/声音处理。 :)
请参阅斯坦福工程学院的这些讲座:here
基本上,DFT是
Y0,...,N−1 ← ditfft2(X, N, s): DFT of (X0, Xs, X2s, ..., X(N-1)s):
if N = 1 then
Y0 ← X0 trivial size-1 DFT base case
else
Y0,...,N/2−1 ← ditfft2(X, N/2, 2s) DFT of (X0, X2s, X4s, ...)
YN/2,...,N−1 ← ditfft2(X+s, N/2, 2s) DFT of (Xs, Xs+2s, Xs+4s, ...)
for k = 0 to N/2−1 combine DFTs of two halves into full DFT:
t ← Yk
Yk ← t + exp(−2πi k/N) Yk+N/2
Yk+N/2 ← t − exp(−2πi k/N) Yk+N/2
endfor
endif
(从http://en.wikipedia.org/wiki/Cooley%E2%80%93Tukey_FFT_algorithm无耻地复制)
另外,您可能想查看
答案 2 :(得分:6)
快速傅里叶变换(FFT)是用于计算discrete Fourier transform(DFT)的算法。您可以将DFT视为将采样信号表示为正弦曲线之和的一种方式。由于正弦的导数很简单,你可以通过找到其DFT的导数来估计信号样本的导数。
这是signal processing中的一个大话题,我建议您购买介绍性书籍或参加课程以了解更多信息。
更新:在简洁的英语中,它是一种将一系列数字看作波浪之和的方式。
答案 3 :(得分:2)
我能想到的最简单的解释:给定一个包含音调的.wav文件,FFT可以告诉你该音调的频率。但它也可以用于更有趣的事情。
答案 4 :(得分:0)
这可能会解决您的问题: Fast Fourier transform on wikipedia
他们甚至可以链接到已实现的算法。
基本上它是一种以数字方式进行傅里叶变换的方法,它允许计算机执行此操作。