我被要求使用MATLAB设计数字低通butterworth滤波器,具有以下规格:
我已计算出滤波器的顺序为1.57。我们知道我们需要将此值设置为确保过滤器满足规范。但是,在matlab我正在使用
buttord()
此函数返回最低顺序,在这种情况下为1。那么如何返回最高订单而不是返回最低订单?
答案 0 :(得分:3)
没有最高阶的butterworth过滤器,因为任何大于或等于buttord
返回的结果的顺序都可以满足规范。
由于采样率为8kHz,因此奈奎斯特频率为4kHz。如果你假设3dB通带纹波(这是标准的),那么调用buttord
我们得到
Fn = 4000;
Wp = 1500/Fn;
Ws = 3000/Fn;
Rp = 3;
Rs = 10;
ord = buttord(Wp, Ws, Rp, Rs)
给出了ord = 1
。使用滤波器设计器,我们可以设计这样一个滤波器,我们看到确实存在符合规范的订单1 butterworth滤波器。
如果您将过滤器导出到工作区(假设您已保存到SOS
和G
变量),则可以使用freqz
进行绘图,如下所示
[b,a] = sos2tf(SOS,G);
freqz(b,a,[],8000);
如果您想使用butter
设计过滤器,则可以使用
[n,Wn] = buttord(Wp, Ws, Rp, Rs);
[b,a] = butter(n,Wn);
freqz(b,a,[],8000);
在阻带开始时产生10dB的衰减,在通带内衰减小于3dB。