【问题标题】:Time Domain / Spectrum / DSP时域/频谱/DSP
【发布时间】:2012-02-22 05:10:52
【问题描述】:

我在复值频谱上执行 iFFT,并通过将第一个样本归零来更改相应的时域信号。最后我通过 FFT 将其转换回频域。

我想知道使用两侧(对称)频谱或仅使用一侧频谱(仅正频率)之间的(物理)差异在哪里,因为这两个结果是不同的(在比较正频率时) ?

版本 1(两侧光谱): fft( nulling( ifft( [0, 1+1j, 2+j, 2-2j, 1-1j] ) ) )

输出: [-1.2, -0.2+1j, 0.8+2j, 0.8-2j, -0.2-1j]

第 2 版(单边光谱): fft( nulling( ifft( [0, 1+1j, 2+j] ) ) )

输出: [ -1-1j, 0+0j, 1+1j]

【问题讨论】:

    标签: matlab numpy fft ifft


    【解决方案1】:

    由于您的 IFFT 例程不知道您提供的是单面频谱(即存在隐式复共轭对称负频率箱),因此它只能(错误)解释这一点作为具有正负频率 bin 的正常 N 点复频域输入。

    一些 FFT 库(例如 FFTW、vDSP)确实支持 real-to-complex FFT 和 complex-to-real IFFT,其中复频域 bin 的数量为 N / 2,冗余复杂的共轭对称项被省略了,但它们通常有一个单独的 API,这与具有 N 个输入和 N 个输出的更一般的复数到复数的情况不同。

    【讨论】:

    • 这意味着为了执行时域操作,应该始终在 iFFT 之前将一侧频谱扩展到两侧频谱?
    • 是的 - 如果您只有更常见的复数到复数 IFFT 可用,那么您需要自己处理负频率箱。
    • 附带说明一下,在 numpy 中返回/操作单侧频谱的相关函数是 np.fft.rfftnp.fft.irfft
    • @Joe: good catch - docs.scipy.org/doc/numpy/reference/generated/… 似乎是复杂到真实 IFFT 的更方便的解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    • 2010-11-28
    • 1970-01-01
    相关资源
    最近更新 更多