我目前被困在尝试实现滤波器极点以稳定 ΔΣ 调制器。我想我知道的是:
- 当阶数超过 2 时,沿单位圆仅具有复零的噪声整形滤波器会使 1 位 ΔΣ 调制器不稳定。
- 滤波器极点可用于降低带外噪声,使调制器更稳定
为了测试这种方法,我试图实现一个具有 2 个零点和 2 个极点的简单二阶调制器。
最初,我在没有极点的情况下尝试了它,只有两个零才有效,我以以下方式实现它以进行测试(使用 python/numpy):
import numpy as np
roots = np.exp(1j*np.array([0.05, -0.05])) # two exemplary complex roots
b = np.poly(roots) # and corresponding filter coeffs
errors = np.zeros_like(b)
signal = np.random.rand(100) - 0.5 # any signal smaller than [-1,1]
samps = np.zeros_like(signal)
for iSAM in range(len(samps)):
desired = signal[iSAM] + np.dot(b[1:],errors2[:-1]) # add the filtered errors to the input
samps[iSAM] = np.sign(desired) # discretize to 1-bit
errors = np.roll(errors, 1)
errors[0] = samps[iSAM] - desired # calculate new error
正如预期的那样,在对结果进行 FFT 时,我看到了与所需滤波器类似的频率响应。正如预期的那样,在 exp(i*0)=1 处添加另一个根(创建一个三阶调制器)时,整个事情变得不稳定,即使对于小输入也是如此。
制作带有极点的滤波器并定义它们的频率响应没有问题。我还能够使用设计的双二阶滤波器(2 个零点,2 个极点)获取时域信号并对其进行滤波,并获得正确的结果。
问题是:如何在噪声整形算法中使用极点。我什至如何使用简单的双二阶滤波器进行噪声整形?我今天看了很多视频和论文,但还是不明白。每个人都从我观看的视频系列中画出这样的图表:https ://youtu.be/IE8tU_10Hpg?t=63
更详细的流程图见 Stanley Lipshitz 1991 年的论文。
但是,即使我从字面上遵循此流程图,我也没有得到任何结果。状态变量刚刚爆炸。视频系列中的那个人还实现了一个具有 3 个零点和 3 个极点的 3 阶滤波器,以定义一个稳定的 3 阶调制器。虽然我可以重现滤波器系数和噪声传递函数 (NTF),但我不明白如何实际使用滤波器。在一个视频中,他快速评论了在模拟中测试过滤器的性能。他说执行测试是“微不足道的”或类似的事情。所以很明显我在这里遗漏了一些非常基本的东西:)
更新: 经过几天的尝试,我真的很茫然。任何人都可以发布一个使用非常简单的 IIR 滤波器进行噪声整形的示例,即使只有 2 个零点和 2 个极点。成形噪声频谱应再现设计滤波器的幅度响应。我会尽可能多地给它一些赏金。因为互联网上的所有指南都没有帮助我。我不在乎您使用哪种编程语言,但整形频谱应该明显产生正确的幅度。
最好的祝福
