我尝试设计一个在频域中具有随机相位的 FIR 全通滤波器。我对我的结果有点困惑,不确定原因是编程错误还是对我自己的卷积和脉冲响应的误解。我使用 Python 和 Numpy:
import numpy as np
mag = np.ones(129) # magnitude is unitiy
phase = np.zeros(129)
random_numbers = (np.random.rand(128)-0.5)*2.0
phase[1:] = random_numbers * np.pi # phase is random except for dc offset
spec = mag*np.exp(phase * 1j) # get spectrum from magnitude and phase
coefficients = np.fft.irfft(spec) # do inverse fft to get coefficents, result is of length 256
如果我对系数进行 fft,则幅度看起来几乎正确。我的第一个问题:为什么最高频率被抑制?

其次,如果我使用我的系数与脉冲进行卷积,我认为应该重现系数?但事实并非如此。为什么在 1.0 左右会有这些“随机变化”?
impulse = np.zeros(256, dtype=np.float64) # create impulse
impulse[256/2] = 1.0
result = np.convolve(impulse, coefficients, "same") # convolve it

非常感谢任何解释或提示!