keyi例:设计一个模拟低通滤波器,fp = 2000Hz,fs = 4000Hz,Rp = 5dB,Rs = 20dB。
用巴特沃斯滤波器原型,求出其3dB截止频率和滤波器阶数,传递函数,并做出幅频、相频特性曲线。
代码如下:
滤波器分析设计界面 MATLAB专门提供了滤波器设计工具箱FDATool,在MATLAB中输入
滤波器的实现 对模拟滤波器的实现本质上是求解微分方程的过程,对数字滤波器的实现本质是求解差分方程的过程。滤波器可以通过编程实现,也可通过simulink模块实现。DSP system toolbox中提供了滤波器实现的模块。 用MATLAB filter函数也可实现滤波器:
%设计要求指标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
打开滤波器分析设计界面
滤波器的实现 对模拟滤波器的实现本质上是求解微分方程的过程,对数字滤波器的实现本质是求解差分方程的过程。滤波器可以通过编程实现,也可通过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)
例:求数字滤波器的传递函数
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