【问题标题】:Forcing multiple sets of constraints during filter design在滤波器设计期间强制多组约束
【发布时间】:2015-03-25 12:57:57
【问题描述】:

我目前正在根据预先确定的过滤器要求使用MATLAB example on generating a Kaiser window finite impulse response (FIR) 过滤器。

Kaiser 窗口滤波器设计

设计一个通带定义为 0 到 1 kHz 的低通滤波器,并且 阻带定义为 1500 Hz 至 4 kHz。指定通带纹波 5% 和 40 dB 的阻带衰减。

fsamp = 8000;
fcuts = [1000 1500];
mags = [1 0];
devs = [0.05 0.01];

[n,Wn,beta,ftype] = kaiserord(fcuts,mags,devs,fsamp);
hh = fir1(n,Wn,ftype,kaiser(n+1,beta),'noscale');

freqz(hh)

在我的情况下,当我们达到频谱中的 4kHz 标记时(即:过渡带结束,阻带开始),我预计至少有 40dB 的信号衰减。但是,我还有一个额外的要求:滤波器在过渡带的中点(i:1250Hz 标记)处还提供至少 20dB 的衰减。我用上面的代码设计的滤波器不能同时满足这两个要求,因为 Kaiser FIR 实现的初始滚降很慢。

是否有一种直接的方法可以从一开始就对过滤器施加多个约束,即:

设计一个通带定义为 0 到 1 kHz 的低通滤波器,并且 阻带定义为 1500 Hz 至 4 kHz。指定通带纹波 5% 和 40 dB 的阻带衰减,以及至少 20dB 衰减 1250Hz。

到目前为止,唯一想到的解决方案是生成与我在上面所做的相同的 Kaiser 窗口(一次),然后循环多次迭代并增加过滤器顺序,n,每次迭代直到我的要求满意。是否有更精细或更直接的方法,或者我的迭代方法是目前唯一的方法?

我尝试只制作一个在 1250Hz 处衰减 20dB 的滤波器,但该滤波器似乎并没有进一步提供更多衰减(即:只有 22dB 阻带衰减到 1500Hz)。

谢谢!

【问题讨论】:

  • 我很困惑。当我运行您的代码时,我已经在 0.375(=1500 Hz)的归一化频率下获得了 40 dB 的衰减。这是有道理的,因为您已将阻带定义为从 1500 Hz 开始。所以看起来“过渡点”应该在 1000 到 1500 Hz 之间。您已经处于 2750 Hz 的阻带中。
  • @DaveKielpinski 我犯了一个错误。我会纠正的。我的意思是说,在 1250Hz 处至少有 20dB 的衰减(即:过渡带的中点)。

标签: matlab filter filtering signal-processing


【解决方案1】:

Kaiser 窗口过滤器设计器不支持自动求解此类约束。查看kaiserord 的源代码,它似乎支持低通和高通、带通、带阻和多个带通/停止,只要通带/阻带的幅度都相同。

解决问题的最简单方法是将阻带定义为从 1250Hz 开始,衰减 40dB。这将确保 1500Hz 也等于或低于 40dB,但显然可能会导致滤波器的阶数比您实际需要的更高。

旁瓣中的衰减与 beta 值直接相关,这意味着增加阶数的唯一效果应该是增加滚降的陡度,因此您的方法似乎是 MATLAB 支持的最简单和最直接的方法过滤器设计工具。不幸的是,它在实践中行不通。

滤波器构建器实现具有通带和阻带纹波/衰减约束的截止滤波器的方式是将截止点设置在通过约束结束和停止约束开始之间的正中间。截止点始终限制在 -6dB。因此,无论您使用多高的滤波器阶数,1250Hz总是为 -6dB。

我建议像上面描述的那样将阻带定义为 1250Hz/-40dB,然后减少您的滤波器阶数,直到您不再满足限制条件。我写这篇文章时的测试结果是 47,但我没有严格检查。

1250Hz -40dB 的最小阶滤波器:

[n, Wn, beta, ftype] = kaiserord([1000, 1250], [1, 0], [.05, db2mag(-40)], 8000);
hh = fir1(n, Wn, ftype, kaiser(n+1, beta), 'noscale');
freqz(hh)

n = 72

相同的过滤器,顺序减少到 47:

hh = fir1(n-25, Wn, ftype, kaiser(n-25+1, beta), 'noscale');
freqz(hh)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-03
    • 2014-11-09
    • 1970-01-01
    • 2021-03-08
    • 1970-01-01
    相关资源
    最近更新 更多