在输入序列末尾添加零头和零如何影响 DFT-IDFT 过程?

问题描述 投票:0回答:1

如果我将零放在输入序列的末尾,并采用 fft,然后通过将零填充到 fft 输出来获取加器长度的 ifft,输入序列的零会反映在最终的 ifft 输出上吗? 我尝试在 MATLAB 中执行此操作,在原始数据中没有任何零头的情况下,最终 IFFT 输出的最后一部分似乎偏离了接近零。在输入序列开头不添加零的 IFFT 输出 但是,当我在数据开头添加零时,数据的最后部分似乎几乎为零。 谁能对此给出任何数学解释?

我尝试在 MATLAB 中执行此操作,在原始数据中没有任何零头的情况下,最终 IFFT 输出的最后一部分似乎偏离了接近零。 但是,当我在数据开头添加零时,数据的最后部分似乎几乎为零。 IFFT 输出在输入序列的开头带有零 谁能对此给出任何数学解释?

signal-processing fft dft digital dct
1个回答
0
投票

当您将零填充到信号末尾,然后通过对 FFT 输出进行零填充来进行 FFT 和“较长”长度信号的 iFFT 时,零会影响最终的 iFFT 结果。

我们知道信号的 FFT 将其从时域变换到频域。正确的? iFFT 将其变换回时域。如果我们在时域中进行补零,它会增加频域中的“分辨率”,但不会“从根本上”改变原始信号的频率内容。

当您在计算 FFT 之前对信号进行零填充时,就会增加信号的长度。这提高了频率分辨率,但原始信号中的实际值保持不变。然而,序列末尾的零填充可能会在填充开始的边界处引入“不连续性”,从而影响 iFFT 输出。

FFT 隐含地假设“循环卷积”。如果信号突然结束(末尾没有补零)而不是平滑结束,则循环卷积假设会导致 iFFT 输出回绕,从而导致信号末尾出现不连续性和偏离零的情况。

代码

import numpy as np
import matplotlib.pyplot as plt


def pad_end(size, pad):
    np.random.seed(42)
    x = np.random.randn(size)

    x_padded_end = np.concatenate((x, np.zeros(pad)))
    X_padded_end = np.fft.fft(x_padded_end)
    x_ifft_end = np.fft.ifft(np.concatenate((X_padded_end, np.zeros(pad))))
    return x_ifft_end


def pad_both(size, pad):
    np.random.seed(42)
    x = np.random.randn(512)
    x_padded_both = np.concatenate((np.zeros(pad), x, np.zeros(pad)))
    X_padded_both = np.fft.fft(x_padded_both)
    x_ifft_both = np.fft.ifft(np.concatenate((X_padded_both, np.zeros(pad))))
    return x_ifft_both


end = pad_end(512, 64)
both = pad_both(512, 64)

plt.figure(figsize=(12, 6))
plt.subplot(2, 1, 1)
plt.plot(np.real(end), label='Real')
plt.plot(np.imag(end), label='Imaginary')
plt.title('iFFT with Zero-padding at the End')
plt.legend()

plt.subplot(2, 1, 2)
plt.plot(np.real(both), label='Real')
plt.plot(np.imag(both), label='Imaginary')
plt.title('iFFT with Zero-Padding at the Start')
plt.legend()

plt.tight_layout()
plt.show()

打印

enter image description here

注意

信号开始和结束处的零填充有助于减轻由于 FFT/iFFT 中的“循环卷积”而产生的边界效应,这会导致“更平滑”的 iFFT,如果您愿意的话,它在结尾。 这就是为什么当您在信号开头添加零时,您会看到 iFFT 输出的差异。

链接

参见循环卷积

© www.soinside.com 2019 - 2024. All rights reserved.