JavaScript实现快速傅里叶变换FFT
以下是JavaScript实现快速傅里叶变换FFT的完整源码:
function fft(input) {
const n = input.length;
if (n === 1) {
return input;
}
const evenInput = new Array(n / 2);
const oddInput = new Array(n / 2);
for (let i = 0; i < n / 2; i++) {
evenInput[i] = input[2 * i];
oddInput[i] = input[2 * i + 1];
}
const evenOutput = fft(evenInput);
const oddOutput = fft(oddInput);
const output = new Array(n);
for (let i = 0; i < n / 2; i++) {
const term = oddOutput[i] * exp(-2 * PI * i / n);
output[i] = evenOutput[i] + term;
output[i + n / 2] = evenOutput[i] - term;
}
return output;
}
function exp(theta) {
return new ComplexNumber(Math.cos(theta), Math.sin(theta));
}
class