逆快速傅里叶变换:不同的阶段

时间:2015-05-11 16:07:32

标签: c++ math fft spectrum ifft

RosettaCode提供了Cooley-Tukey FFT算法here的简单实现。问题如下,从数学和编程的角度来看。假设节目的输入是信号的频谱,并且我们想要生成具有这种频谱的信号。如果是正确的,我们需要对输入频谱进行逆FFT。

RosettaCode提供的代码如下:

// inverse fft (in-place)
void ifft(CArray& x)
{
    // conjugate the complex numbers
    x = x.apply(std::conj);

    // forward fft
    fft( x );

    // conjugate the complex numbers again
    x = x.apply(std::conj);

    // scale the numbers
    x /= x.size();
}

但这只能产生一个信号。但是几个信号可以具有相同的频谱。那么如何添加一个参数才能生成这些不同的信号?

2 个答案:

答案 0 :(得分:2)

不,不同的信号有不同的傅里叶变换;它是可逆的。 N个复数,N个复数;离散傅立叶变换相当于将样本矢量乘以非奇异矩阵,得到相同大小的矢量。

您可能会将实际的傅里叶变换与"频谱"混淆。获得傅里叶变换的幅度或其他信息破坏操作的结果。

答案 1 :(得分:1)

FFT基变换的一个特性是,独特的有限信号具有独特的有限谱(如在完整的复杂向量中),反之亦然。如果相位不同,复频率的分量也会不同。