%设计要求指标fp=2000;fs=4000;Rp=5;Rs=20;[n,fn]=buttord(fp,fs,Rp,Rs,'s');  %计算阶数和截止频率Wn = 2*pi*fn; %转换为角频率[b,a]=butter(n,Wn,'s');  %计算Hsf = 0:100:10000;  %计算频率点和频率范围s=j*2*pi*f;  Hs=polyval(b,s)./polyval(a,s);  %计算相应频率点处H(s)的值 polyval是多项式求值subplot(2,1,1);plot(f,20*log10(abs(Hs)));  %幅频特性axis([0 10000 -40 1]);xlabel('频率 Hz');ylabel('幅度 dB');subplot(2,1,2);plot(f,angle(Hs));   %相频特性xlabel('频率 Hz');ylabel('相角 rad');


运行后得到下图仿真结果:上面是幅频特性曲线,巴特沃斯滤波器在通带和阻带上都是平坦下降的。下面是相频特性,巴特沃斯滤波器表示缓变性质。

python 巴斯特滤波 simulink巴特沃斯滤波器仿真_matlab求系统根轨迹代码


在工作空间中可得阶数和截止频率的计算值

python 巴斯特滤波 simulink巴特沃斯滤波器仿真_多项式_02



滤波器分析设计界面 MATLAB专门提供了滤波器设计工具箱FDATool,在MATLAB中输入

fdatool


打开滤波器分析设计界面

python 巴斯特滤波 simulink巴特沃斯滤波器仿真_MATLAB_03


界面使用说明:https://wenku.baidu.com/view/fdf9f74dfe4733687e21aaed.html



滤波器的实现 对模拟滤波器的实现本质上是求解微分方程的过程,对数字滤波器的实现本质是求解差分方程的过程。滤波器可以通过编程实现,也可通过simulink模块实现。DSP system toolbox中提供了滤波器实现的模块。 用MATLAB filter函数也可实现滤波器:

y=filter(b,a,X) %b是传递函数H(z)的分子多项式系数向量,a是分母多项式系数向量[y,zf]=filter(b,a,X)%a(1)如果不等于1,则进行归一化,x是输入信号序列,y是输出信号序列[y,zf]=filter(b,a,X,zi)


例:求数字滤波器的传递函数

python 巴斯特滤波 simulink巴特沃斯滤波器仿真_matlab求系统根轨迹代码_04


输入信号为X=[1,0,0,0,0,0],求滤波器的零状态响应输出 (a)计算理论值 由传递函数H(z),其分子多项式系数向量b=[0,1],分母多项式系数向量为a=[1,-0.7],H(z)逆变换可得该系统的数字冲击响应序列,即:

python 巴斯特滤波 simulink巴特沃斯滤波器仿真_MATLAB_05


编写如下代码:

a=0.7; k=0:1:5; hk=a.^(k-1).*(k>0)hk =         0    1.0000    0.7000    0.4900    0.3430    0.2401         -------------------------------------------b=[0,1];a=[1 -0.7]; X=[1,0,0,0,0,0]; filter(b,a,X);y =         0    1.0000    0.7000    0.4900    0.3430    0.2401


可以看到数值上,理论值和仿真值是一样的 (c)建立滤波器仿真模型

python 巴斯特滤波 simulink巴特沃斯滤波器仿真_matlab求系统根轨迹代码_06

python 巴斯特滤波 simulink巴特沃斯滤波器仿真_MATLAB_07

                                此处0.1改为1,仿真时长为10

python 巴斯特滤波 simulink巴特沃斯滤波器仿真_传递函数_08