首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MATLAB中的‘mkfilter命令设计贝塞尔型滤波器

MATLAB中的‘mkfilter命令设计贝塞尔型滤波器
EN

Stack Overflow用户
提问于 2014-10-31 10:28:20
回答 1查看 641关注 0票数 1

我已经实现了一个简单的脚本,它比较了Butterworth,Chebyshev和Bessel过滤器的一系列过滤顺序。该代码在运行时会产生预期的结果,但bessel过滤器实现除外。我收到了一个错误:

代码语言:javascript
复制
Error in FilterComparison (line 75)
bes_1 = mkfilter(fc, 1, 'bessel');

我尝试过多种方法,但似乎无法删除此错误。我已将下列全部代码包括在内:

代码语言:javascript
复制
%Script to compare the responses of various analogue filters
%including bessel, chebyshev and butterworth.
%mkfilter command syntax
%example = mkfilter (cutoff freq, order, 'type');

clear all
close all

%Cut off frequency
fc = 2000;

%Determines whether figures are displayed or not.
%Silent = 1, no display
silent = 1;

%BUTTERWORTH FILTERS
%1st order butterworth filter
butter_1 = mkfilter(fc, 1, 'butterw');

%2nd order butterworth filter
butter_2 = mkfilter(fc, 2, 'butterw');

%3rd order butterworth filter
butter_3 = mkfilter(fc, 3, 'butterw');

%4th order butterworth filter
butter_4 = mkfilter(fc, 4, 'butterw');

%5th order butterworth filter
butter_5 = mkfilter(fc, 5, 'butterw');

%6th order butterworth filter
butter_6 = mkfilter(fc, 6, 'butterw');

%Bode plot
if ~silent
    figure(1)
    bode(butter_1, 'red',butter_2, 'blue',butter_3, 'green',butter_4, 'cyan',butter_5,     'black',butter_6, 'magenta')
    legend('n = 1','n = 2','n = 3','n = 4', 'n = 5', 'n = 6')
end

%CHEBYSHEV FILTERS
%1st order chebyshev filter
cheby_1 = mkfilter(fc, 1, 'Cheby', 2);

%2nd order chebyshev filter
cheby_2 = mkfilter(fc, 2, 'Cheby', 2);

%3rd order chebyshev filter
cheby_3 = mkfilter(fc, 3, 'Cheby', 2);

%4th order chebyshev filter
cheby_4 = mkfilter(fc, 4, 'Cheby', 2);

%5th order chebyshev filter
cheby_5 = mkfilter(fc, 5, 'Cheby', 2);

%6th order chebyshev filter
cheby_6 = mkfilter(fc, 6, 'Cheby', 2);

%Bode plot
if ~silent
    figure(2) %open figure 2
    bode(cheby_1, 'red',cheby_2, 'blue',cheby_3, 'green',cheby_4, 'cyan',cheby_5, 'black',cheby_6, 'magenta')
    legend('n = 1','n = 2','n = 3','n = 4', 'n = 5', 'n = 6')
end

%BESSEL FILTERS
%1st order bessel filter
bes_1 = mkfilter(fc, 1, 'bessel');

%2nd order bessel filter
bes_2 = mkfilter(fc, 2, 'bessel');

%3rd order bessel filter
bes_3 = mkfilter(fc, 3, 'bessel');

%4th order bessel filter
bes_4 = mkfilter(fc, 4, 'bessel');

%5th order bessel filter
bes_5 = mkfilter(fc, 5, 'bessel');

%6th order bessel filter
bes_6 = mkfilter(fc, 6, 'bessel');

%Bode Plot
figure(3)
bode(bes_1, 'red',bes_2, 'blue',bes_3, 'green',bes_4, 'cyan',bes_5, 'black',bes_6,         'magenta')
legend('n = 1','n = 2','n = 3','n = 4', 'n = 5', 'n = 6')

%Plot 3rd order filters for comparison
figure (4)
bode(cheby_3, 'red', bes_3, 'blue', butter_3, 'green')
legend('Chebyshev', 'Bessel', 'Butterworth')

提前谢谢。P.s,我对堆栈溢出很陌生,所以对格式化表示歉意。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-31 10:39:24

贝塞尔滤波器的mkfilter中有一个错误,这会导致一阶和二阶贝塞尔滤波器返回此错误。您可以通过编辑mkfilter (使用edit mkfilter打开文件)来修复它:

从第58行开始:

代码语言:javascript
复制
if ord == 1,
    sys = nd2sys(1,b1);
elseif ord == 2,
    sys = nd2sys(1,b2);
...

将其改为:

代码语言:javascript
复制
if ord == 1,
    sys = tf(1,b1);
elseif ord == 2,
    sys = tf(1,b2);
...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26672464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档