我正在尝试了解FFT,这是到目前为止的内容:
为了找到波形中的频率幅度,必须在两个不同的相位(正弦和余弦)中将电波乘以它们正在搜索的频率,然后对它们进行平均,从而对它们进行探测。该阶段是通过与两者之间的关系找到的,其代码如下所示:
//simple pseudocode
var wave = [...]; //an array of floats representing amplitude of wave
var numSamples = wave.length;
var spectrum = [1,2,3,4,5,6...] //all frequencies being tested for.
function getMagnitudesOfSpectrum() {
var magnitudesOut = [];
var phasesOut = [];
for(freq in spectrum) {
var magnitudeSin = 0;
var magnitudeCos = 0;
for(sample in numSamples) {
magnitudeSin += amplitudeSinAt(sample, freq) * wave[sample];
magnitudeCos += amplitudeCosAt(sample, freq) * wave[sample];
}
magnitudesOut[freq] = (magnitudeSin + magnitudeCos)/numSamples;
phasesOut[freq] = //based off magnitudeSin and magnitudeCos
}
return magnitudesOut and phasesOut;
}
为了非常快地对很多频率执行此操作,FFT使用了许多技巧。
什么使FFT比DFT快得多的技巧?
PS我曾尝试在网络上查看完整的FFT算法,但是所有的技巧都倾向于被精简为一段漂亮的代码,而没有太多解释。在我能理解整个事情之前,我首先需要对这些有效更改中的每一个进行一些介绍作为概念。
谢谢。
sudo
在您的代码示例中使用可能会造成混淆,因为这是计算机领域中众所周知的命令。您可能是指伪代码。