的数字生成噪声的 PSD 中的一些细微之处小号X( f) = A ( f)SX(f)=A(f)

信息处理 过滤器 过滤器设计 噪音 功率谱密度
2022-02-24 18:35:18

我知道标题不是最具描述性的,但我不知道如何以更字面的方式描述我的问题。情况如下:

我想以数字方式生成具有任意功率谱密度的噪声。为此,我通过简单地独立样本,然后用滤波器幅度它们进行数字滤波,生成了可以很容易地证明这导致,其中是用过滤得到的系列。S(f)=A(f)XSX(f)=1nσ=1F(f)=A(f)SY(f)=A(f)YXF(f)

我在实践中使用 Mathematica 的FrequencySamplingFilterKernelListConvolve做到了这一点。为此,当然需要知道所需,在我的示例中,我想成为中心频率给出的全宽最大 b A(f)f0

A(f)=11+(ff0b)2

所以我采用这个方程,对其进行采样,创建滤波器幅度并过滤白噪声。使用 Welch 方法分析时,得到的 PSD看起来符合预期。SY(f)

但现在我对上面的一个微妙之处感兴趣。正如我所指出的,上述洛伦兹不是真实信号的适当功率谱密度;但是该方法仍然有效,因为我没有得到任何复杂的数值数据,并且周期图在正频率处显示了正确的频谱。所以我的问题是,使用这种方法,负频率发生了什么?我是否基本上创建了一个 PSD,其中 或者它更像是 其中A(f)A(f)

A(f)=11+(ff0b)2+11+(f+f0b)2
A(f)=11+(fsgn[f]f0b)2
sgn[]是符号函数。

这些是我能想到的唯一合理的情况,由上述引起。它们的行为非常相似,除了处具有不连续导数这在物理上是可能的吗?f=0f=0

因此,我的问题是我最终得到了什么 PSD;我上面提到的两个之一,甚至第三个?

1个回答

你只看正频率。负频率也在那里。所以是的,频谱确实是(有一些符号的滥用)

A(f)11+(fsgn(f)f0b)2

使得PSD相对于轴镜像。y

我不会说 Mathematica,但我可以告诉你它是如何工作的。您的 FrequencySamplingFilterKernel 实际上是一种简单的频率采样方法,用于构建具有任意幅度频率响应的 FIR 滤波器(类似于 Matlab 的fdesign.arbmag)。鉴于您有个频率响应点,它实质上计算了一个脉冲响应(通过采用逆 DFT),其傅里叶变换在相应频率下评估时等于您所需的频谱。那是:N

h[n]=1Nk=0N1H(k)ej2πNk

其中是所需的 DFT(即来自个样本)。H(k)NA(f)

请注意,FrequencySamplingFilterKernel 文档(在 details 和 options 下)中的默认脉冲响应是具有偶数对称性的奇数长度 FIR 滤波器。从这一点开始,一切都只是使用进行的常规 FIR 过滤,当过滤实际过程时,它将生成具有均匀对称性的 PSD: 其中等于在给定的个期望点。h[n]h[n]

SY(f)=|H(f)|2SX(f)
|H(f)|2|A(f)|N


如果你想在 Matlab 中做:

N = 100;
f = 0:0.01:1;
b = 1;
f0 = 0.75;
A =sqrt(1./(1+((f-f0)./b).^2));
d = fdesign.arbmag('N,F,A',N,f,A);
hd = design(d,'freqsamp');
w = -pi:.001:pi;
freqz(hd,w);
x=randn(1000000,1);
y=filter(hd,x);
psd(y);

在此处输入图像描述

            在此处输入图像描述


使用低阶 FIR 近似 ( N=8):

在此处输入图像描述

            在此处输入图像描述