matlab“椭圆”函数可用于设计未量化的系数集。
来自matlab网站:
n:过滤器的顺序
Wp:归一化通带边缘频率
Rp: 通带纹波 (db)
Rs:从通带峰值向下的分贝
如果我有一个具有以下传递函数幅度响应的 8 阶 IIR 滤波器:
如何用合适的值填充 matlab 函数?
matlab“椭圆”函数可用于设计未量化的系数集。
来自matlab网站:
n:过滤器的顺序
Wp:归一化通带边缘频率
Rp: 通带纹波 (db)
Rs:从通带峰值向下的分贝
如果我有一个具有以下传递函数幅度响应的 8 阶 IIR 滤波器:
如何用合适的值填充 matlab 函数?
最快的方法是
[b,a] = ellip(8,1.5,60,[.2 .3]);
这设计了一个从 0.2 到 0.3 的带通,具有 1.5 dB 纹波和 60 db 阻带衰减。由于您已经预先选择了订单,因此您无需选择阻带的边缘。你可以做一个或另一个,但不能同时做。然而,8 阶滤波器足以满足您的阻带要求。事实上,低波段止于 0.195,高波段止于 0.307。
另一个问题是纹波实际上只会下降,即通带不在-1.5dB 和+1.5 dB 之间,而只是在-1.5dB 和0 dB 之间。为了解决这个问题(如果您关心的话),您可以将纹波加倍至 3 dB,而不是简单地增加 1.5 dB 增益。您还必须将阻带衰减增加到 61.5dB,以补偿整体增益变化。椭圆允许计算达到某个阻带所需的阶数,因此最正确的方法是
%% Ellip filter design example
[n,wp] = ellipord([.2 .3],[.14 .36],3,61.5);
[b,a] = ellip(n,3,61.5,wp);
% add 1.5 dB of gain
b = b*10.^(1.5/20);
[H,F]= freqz(b,a,1000,2);
plot(F,10*log10(H.*conj(H)));
set(gca,'ylim',[-70,3]);
grid('on');
所以事实证明,一个 5 阶椭圆滤波器可以很好地完成这项工作。
新答案(间接地)指出希尔玛的过滤器是十阶而不是八阶,人们可能不得不重新解释原始问题的边缘。很容易假设它们被归一化为采样频率而不是奈奎斯特频率(不仅基于八阶假设,而且这种情况下的滤波器给出了一个对称滤波器,这从家庭工作点来看是有意义的看法)。
因此,相应的行将是:
[b,a] = ellip(4,1.5,60,[.4 .6]);
然而,这个过滤器也可以设计为
[b,a] = ellip(4,1.5,60, 0.8, 'high');
b=upsample(b,2);
a=upsample(a,2);
%% Where one may want to shave the trailing zero off by:
b(10)=[];
a(10)=[];
在最终设计中,通过将每个延迟元件替换为两个来(明显地)周期性地进行传输。当然有低通到带通的转换来做同样的事情。
我想扩展 Hilmar 的答案,以供那些将其作为参考阅读的人受益。
这个功能:
[b,a] = ellip(8,1.5,60,[.2 .3]);
根据 MATLAB文档,实际上会产生一个 16 阶带通 IIR 滤波器。
如果您正在设计低通 IIR 滤波器,则第一个参数 n 仅等于滤波器阶数,否则滤波器阶数将为 2n。
因此,如果你想获得一个 8 阶 IIR 滤波器,你应该使用这些参数:
[b,a] = ellip(4,1.5,60,[.2 .3]);