1
我已经实现了一个简单的脚本,它比较了Butterworth,Chebyshev和Bessel过滤器的一系列过滤顺序。代码运行时会产生预期的结果,但bessel过滤器实现除外。我得到一个错误:'mkfilter'命令在MATLAB中设计bessel类型过滤器
Error in FilterComparison (line 75)
bes_1 = mkfilter(fc, 1, 'bessel');
我试过多个东西,但似乎无法删除此错误。我已经包含以下完整代码:
%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,我是新来堆栈溢出,所以格式化的道歉。
感谢您的答复0xMB。如何编辑内置函数?当我在命令窗口输入'编辑mkfilter'时,它会打开一个只读版本。有没有办法让我可以写作? – 2014-11-03 11:20:34
解决此问题的一种方法是将'mkfilter'函数的内容复制到一个新的函数文件中,并将其放置在当前的工作目录中。然后您可以应用修改。然后MATLAB将使用这个修改后的函数来代替内置函数。您也可以使用'which mkfilter'并更改该文件的权限。 – 0xMB 2014-11-03 12:01:29