难以理解噪声整形滤波器

信息处理 过滤器设计 噪音 功率谱密度
2022-02-20 23:44:22

作为上下文,我试图在我正在进行的模拟中理解和实现这个Von Karman 湍流模型。为了使用该模型在飞行中生成湍流速度,给出了经验确定的功率谱密度的因式分解,它被认为用作整形滤波器,当用白噪声驱动时,它将产生具有正确 PSD 的彩色噪声。

我试图通过一个简单的例子来理解它是如何工作的,所以我知道如何使用 scipy 在 python 中实现它。我假设一个简单的PSD由Φ(s)=11+s2并将其分解到过滤器中G(s)=11+s这样Φ(ω)=G(iω)G(iω).

我起草了一个 python 脚本来在一组随机高斯样本上运行这个过滤器。

from scipy.signal import welch, lfilter, bilinear, filtfilt
from numpy.random import normal
from numpy import linspace
import matplotlib.pyplot as plt

w = linspace(0, 5, 1000)
Sxx = 1/(1 + w**2)
plt.plot(w, Sxx)

z, p = bilinear([1], [1, 1])
x = normal(size=1000000)
y = filtfilt(z, p, x)
f, Pxx = welch(y)
plt.plot(f, Pxx)
plt.show()

但是,输出 PSD 和分析 PSD 不匹配,我很难看到我在这里缺少什么。我怀疑这与我不理解的离散化有关。

1个回答

该功能filtfilt对信号进行两次(正向和反向)滤波,以消除相位失真。作为副作用,您的信号不是由与提供给例程的分子和分母多项式系数相对应的传递函数过滤,而是由其平方幅度过滤。您应该使用普通的过滤器例程,例如lfilter.

除此之外,您还可以从双线性变换中获得频率扭曲。增加采样频率(可能默认为1) 来缓解这个问题。