这种“线性“错误”的原因是什么?

信息处理 过滤器设计 低通滤波器
2022-02-10 04:44:24

这是MIM幅度不变方法论文(按“查看 PDF”以获取带有 MATLAB 代码的论文),这是一个显示我要解决的问题的图:

在此处输入图像描述

一极 LP 滤波器在几个频率位置的幅度响应。

如图所示,在 MIM 函数c2dn()实现中存在某种问题,它“移动”了fc点,尤其是在fc值较低时。*IIRC,更改fs时会发生相同类型的错误。*

模拟原型 LPF 计算如下:

w0 = 2*pi*fc;
Analogb = 1;
Analoga = [1 w0];
Analog = tf(Analogb, Analoga);
Analog = Analog/dcgain(Analog);

然后将其作为计算 MIM 滤波器的输入:

fs=44100;
mimpim = 'mim';
samplingtime = 1/fs;
numofsamples = 2048;
[Dz1] = c2dn(Analog, samplingtime, mimpim, 1, numofsamples);
%[a, b, T] = tfdata(Dz1);   %coeffs

其中c2dn()是 MIM 论文中的函数。

绘图:

fs2 = fs/2;
nf = logspace(0, 5, fs2);
[mag, pha] = bode(Analog,2*pi*nf);
semilogx(nf, 20*log10(abs(mag)), 'color', 'g', 'linewidth', 1.5);
axis([10 fs2 -50 1]);
hold on;[mag, pha] = bode(Dz1,2*pi*nf);
semilogx(nf, 20*log10(abs(mag)), 'color', 'k', 'linewidth', 1.5, 'linestyle', '--');grid on;
title('Various TF (LPF 1)');
legend('Analog', 'MIM','location', 'southwest');
xlabel('Hz');ylabel('dB');

到目前为止,我发现fc误差是相当线性的(我为几个fc选择了 -3dB 点,然后计算了趋势f(x)(R² 为 0.99989...))所以,可能可以找到源通过查看 MIM 函数c2dn()的 matlab 代码来查找“错误” 。

这是显示我的校正效果的图f(x)

在此处输入图像描述

校正公式f(x) = 0.9704384746x - 51.6991952722适用于 60Hz-Nyqvist (fs=44.1kHz) 范围内的fc,甚至可以稍微改进一下。注意:图中显示的 fc=10Hz 的校正是使用另一个公式完成的,因此您可以将其作为 f(x) 的结果省略)。

关于这个“错误”的来源有什么建议吗?

编辑:我质疑问题背后的功能可以定位到倒谱处理块......有一行注释:“ % minimum phase sequence r^mn ” 其中h是使用之前在“同态滤波”块中创建的lmn矩阵重新计算的:

h = h.*lmn';

当这条线变成注释时,幅度图对于任何fc看起来都很好(如果 numofsamples 参数具有合适的(大)值):

在此处输入图像描述

问题是评论该行会导致这种类型的过滤器常见的别名问题...... :(。

如果可以以某种方式改进此(同态滤波/倒谱处理)以使fc点保持不变,有什么想法吗?

编辑2:

当生成的 LPF 顺序为 3 或更多时,讨论中的此问题不再存在:

在此处输入图像描述numofsamples=4096,fs=44.1kHz,fc=1...N Hz

--> 会不会是函数c2dn()中使用的拟合方法不适用于低阶滤波器?

0个回答
没有发现任何回复~