matlab 6.5 设计数字滤波器

 

1、用脉冲响应不变法设计一个Butterworth低通数字滤波器,通带截止频率为0.4π   ,通带波纹Rp小于3dB,阻带边界频率为0.6π,阻带衰减大于15dB,采样频率Fs=10000Hz。假设一个信号 

其中f1=1000Hz,f2=4000Hz。试将原信号与通过该滤波器的输出信号进行比较。 (用经典法设计)

 

wp=0.4*pi;ws=0.6*pi;Rp=3;Rs=15;

T=0.0001;Nn=128;   %采样间隔

Wp=wp/T;Ws=ws/T;   %得到模拟滤波器的频率—采用脉冲响应不变法的频率转换形式

[N,Wn]=buttord(Wp,Ws,Rp,Rs,'s');   %计算模拟滤波器的最小阶数

[z,p,k]=buttap(N);   %设计低通原型数字滤波器

[Bap,Aap]=zp2tf(z,p,k);   %零点极点增益形式转换为传递函数形式

[b,a]=lp2lp(Bap,Aap,Wn);  %低通滤波器频率转换

%[b,a]=butter(N,Wn,’s’);

[bz,az]=impinvar(b,a,1/T);  %脉冲响应不变法设计数字滤波器传递函数

figure(1)

[H,f]=freqz(bz,az,Nn,1/T);  %输出幅频响应和相频响应

subplot(2,1,1),plot(f,20*log10(abs(H)));

xlabel('频率/Hz');ylabel('振幅/dB');grid on;

subplot(2,1,2),plot(f,180/pi*unwrap(angle(H)))

xlabel('频率/Hz');ylabel('相位/^o');grid on;

figure(2)

f1=5;f2=30;   %输入信号含有的频率

N=100;   %数据点数

n=0:N-1;t=n*T;   %时间序列

x=sin(2*pi*f1*t)+0.5*cos(2*pi*f2*t);  %输入信号

subplot(2,1,1),plot(t,x),title('输入信号')

y=filtfilt(bz,az,x);   %对信号进行滤波

y1=filter(bz,az,x);

subplot(2,1,2),plot(t,y,t,y1,':'),

title('输出信号'),xlabel('时间/s')

legend( ' filtfilt ', 'filter')

 





2、设计一个Butterworth高通数字滤波器,通带边界频率为300Hz,阻带边界频率为200Hz,通带波纹小于1dB,阻带衰减大于20dB,采样频率为1000Hz。试绘出其频率特性图并编制一测试该滤波器满足性能的例子。(用完全设计法)

 

Fs=1000;%采样频率

Wp=300*2/Fs;

Ws=200*2/Fs;

Rp=1;

Rs=20;Nn=128;

[N,wn]=buttord(Wp,Ws,Rp,Rs);

[b,a]=butter(N,wn,'high') %N为滤波器的阶数

figure(1)

[H,f]=freqz(b,a,Nn,Fs);   %求得滤波器的频率特性

subplot(2,1,1),plot(f,20*log10(abs(H)));

xlabel('频率/Hz');

ylabel('振幅/dB');

grid on;

subplot(2,1,2),plot(f,180/pi*unwrap(angle(H)))

xlabel('频率/Hz');

ylabel('相位/^o');


 

 


 


巴特沃兹滤波器的vb.net程序。 ' 使用双线性变换法的 Butterworth 型 IIR 数字滤波器设计程序 ' ' 形参说明如下 : ' ' PbType ----------- 输入整型量 ,滤波器通带类型 : ' PbType = 0 : 低通滤波器 ; ' PbType = 1 : 高通滤波器 ; 2 ' PbType = 2 : 带通滤波器 ; ' PbType = 3 : 带阻滤波器 . ' fp1 ----------- 输入双精度量 , 低通或高通滤波器通带边界频率 ( Hz ); 带通或带阻滤波器通带低端边 ‘ 界频率 ( Hz ). ' fp2 ----------- 输入双精度量 , 带通或带阻滤波器通带低端边界频率 ( Hz ). ' Apass ----------- 输入双精度量 , 通带衰减 ( dB ). ' fs1 ----------- 输入双精度量 , 低通或高通滤波器阻带边界频率 ( Hz ); 带通或带阻滤波器阻带高端边 ‘ 界频率 ( Hz ). ' fs2 ----------- 输入双精度量 , 带通或带阻滤波器阻带高端边界频率 ( Hz ). ' Astop ----------- 输入双精度量 , 阻带衰减 ( dB ). ' fsamp ----------- 输入双精度量 , 采样频率 ( Hz ). ' points ----------- 输入整型量 , 幅频特性计算点数 . ' ord ----------- 输入整型量 , 滤波器阶数 . ' NumSec( ) -------- 输出双精度量 , 转移函数二阶节的分子多项式系数二维数组 . ' 元素 NumSec( k, i ) 中 , ' k : 二阶节序号 ; ' i : 多项式系数 , i = 0 相应于常数项 . ' DenSec( ) -------- 输出双精度量 转移函数二阶节的分母多项式系数二维数组 . ' 元素 DenSec( k, i ) 中 , ' k : 二阶节序号 ; ' i : 多项式系数 , i = 0 相应于常数项 . ' NumSec_Z( ) ------ 输出双精度量 系统函数二阶节的分子多项式系数二维数组 . ' 元素 NumSec_Z( k, i ) 中 , ' k : 二阶节序号 ; ' i : 多项式系数 , i = 0 相应于常数项 . ' DenSec_Z( ) ------ 输出双精度量 系统函数二阶节的分母多项式系数二维数组 . ' 元素 DenSec_Z( k, i ) 中, ' k : 二阶节序号 ; ' i : 多项式系数 , i = 0 相应于常数项 . ' AR( ) ------------ 输出双精度量 ,滤波器的幅频特性数组 . ' Sub Butterworth(PbType As Integer, fp1 As Double, fp2 As Double, Apass As Double, fs1 As Double, fs2 As Double, Astop As Double, fsamp As Double, points As Integer, ord As Integer, NumSec() As Double, DenSec() As Double, NumSec_Z() As Double, DenSec_Z() As Double, AR() As Double) Dim i%, j%, k%, ord_t% Dim angle#, emp1#, temp2#, temp3# Dim ratio(0 To 50) As Double '''''''''''''''''''' If PbType = 0 Then ' 低通滤波器 ; wpass = 2# * Pi * fpass / fsamp: wstop = 2# * Pi * fstop / fsamp ' 通带阻带边界频率 omikaP = Tan(wpass / 2#): omikaS = Tan(wstop / 2#) epass = epson(Apass): estop = epson(Astop) ' 根据对幅频特性的技术要求 ,计算模拟滤波器的阶数 orde = Ne_B(estop, epass, omikaS, omikaP) ord = Fix(orde) + 1 omk0 = omika0(omikaP, epass, ord) ' 调用 Fz_LP 子程序, 将低通模拟滤波器的转移函数变量 s 映射为低通数字滤波器的系统函数变量 z Call Fz_LP(F1(), F2(), ord_t) ' End If '''''''''''''''''''' If PbType = 1 Then ' 高通滤波器 ; wpass = 2# * Pi * fpass / fsamp: wstop = 2# * Pi * fstop / fsamp ' 通带阻带边界频率 3 omikaP = 1# / Tan(wpass / 2#): omikaS = 1# / Tan(wstop / 2#) epass = epson(Apass): estop = epson(Astop) ' 根据对幅频特性的技术要求 ,计算模拟滤波器的阶数 orde = Ne_B(estop, epass, omikaS, omikaP) ord = Fix(orde) + 1 omk0 = omika0(omikaP, epass, ord) ' 调用 Fz_HP 子程序,将高通模拟滤波器的转移函数变量 s 映射为高通数字滤波器的系统函数变量 z Call Fz_HP(F1(), F2(), ord_t) End If '''''''''''''''''''' If PbType = 2 Then ' 带通滤波器 ; wp1 = 2# * Pi * fp1 / fsamp: wp2 = 2# * Pi * fp2 / fsamp ' 通带上下边界频率 ws1 = 2# * Pi * fs1 / fsamp: ws2 = 2# * Pi * fs2 / fsamp ' 阻带上下边界频率 Ci = BpC(wp1, wp2) omikaP = Abs((Ci - Cos(wp2)) / Sin(wp2)) omikaS1 = Abs((Ci - Cos(ws1)) / Sin(ws1)) omikaS2 = Abs((Ci - Cos(ws2)) / Sin(ws2)) If omikaS1 <= omikaS2 Then omikaS = omikaS1 Else omikaS = omikaS2 End If epass = epson(Apass): estop = epson(Astop) ' 根据对幅频特性的技术要求 ,计算模拟滤波器的阶数 orde = Ne_B(estop, epass, omikaS, omikaP) ord = Fix(orde) + 1 omk0 = omika0(omikaP, epass, ord) ' 调用 Fz_BP 子程序,将带通模拟滤波器的转移函数变量 s 映射为带通数字滤波器的系统函数变量 z Call Fz_BP(fp1, fp2, fsamp, F1(), F2(), ord_t) End If
1、设计一个工作于采样频率 80 kHz 的巴特沃斯低通数字滤波器,要求通带 边界频率为 4 kHz,通带最大衰减为 0.5 dB,阻带边界频率为 20 kHz,阻带最 小衰减为 45 dB。调用 Matlab 工具性函数 buttord 和 butter 设计,显示该数字 滤波器系统函数 H(z)的系数,并绘制所设计滤波器的单位脉冲响应、损耗函 数曲线和相频特性曲线。 2、设计一个工作于采样频率 5 kHz 的椭圆帯阻数字滤波器,要求通带边界 频率为 500 Hz 和 2125 Hz,通带最大衰减为 1 dB,阻带边界频率为 1050 Hz 和 1400 Hz,阻带最小衰减为 40 dB。调用 Matlab 工具箱函数 ellipord 和 ellip 设计数字滤波器,显示该滤波器系统函数 H(z)的系数,并绘制该滤波器的单 位脉冲响应、损耗函数曲线和相频特性曲线。 3、调用 Matlab 工具箱函数 remezord 和 remez 设计线性相位高通 FIR 滤波 器,实现对模拟信号的采样序列 x(n)的数字高通滤波处理。设计指标要求:采 样频率为 16kHz;通带截止频率为 5.5 kHz,通带最小衰减为 1 dB;过渡带宽度 小于或等于 3.5 kHz,阻带最小衰减为 75 dB。列出 h(n)的序列数据,画出损耗 函数曲线,并检验设计结果。 4、调用 Matlab 工具箱函数 fir1 设计线性相位带通 FIR 滤波器。要求通带 截止频率为0.55 rad和0.7 rad,阻带截止频率为0.45 rad和0.8 rad, 通带最大衰减为 0.15 dB,阻带最小衰减为 40 dB。显示所设计滤波器单位脉 冲响应 h(n)的数据,并画出损耗函数曲线。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值