%设计要求指标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');
运行后得到下图仿真结果:上面是幅频特性曲线,巴特沃斯滤波器在通带和阻带上都是平坦下降的。下面是相频特性,巴特沃斯滤波器表示缓变性质。
在工作空间中可得阶数和截止频率的计算值
滤波器分析设计界面
MATLAB专门提供了滤波器设计工具箱FDATool,在MATLAB中输入
fdatool
打开滤波器分析设计界面
界面使用说明: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)
例:求数字滤波器的传递函数
输入信号为X=[1,0,0,0,0,0],求滤波器的零状态响应输出
(a)计算理论值
由传递函数H(z),其分子多项式系数向量b=[0,1],分母多项式系数向量为a=[1,-0.7],H(z)逆变换可得该系统的数字冲击响应序列,即:
编写如下代码:
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)建立滤波器仿真模型
此处0.1改为1,仿真时长为10