【发布时间】: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