MATLAB仿真:数字信号处理IIR数字滤波器设计

目录

1.实验目的

2.实验原理

3.实验仪器及设备

[4. 实验内容及步骤](#4. 实验内容及步骤)

5.信号产生函数mstg清单

6.实验程序及波形如下:


1.实验目的

(1)熟悉用双线性变换法设计IIR数字滤波器的原理与方法;

(2)学会调用MATLAB信号处理工具箱中滤波器设计函数(或滤波器设计分析工具fdatool)设计各种IIR数字滤波器,学会根据滤波需求确定滤波器指标参数。

(3)掌握IIR数字滤波器的MATLAB实现方法。

(3)通过观察滤波器输入输出信号的时域波形及其频谱,建立数字滤波的概念。

2.实验原理

设计IIR数字滤波器一般采用间接法(脉冲响应不变法和双线性变换法),应用最广泛的是双线性变换法。基本设计过程是:①先将给定的数字滤波器的指标转换成过渡模拟滤波器的指标; ②设计过渡模拟滤波器;③将过渡模拟滤波器系统函数转换成数字滤波器的系统函数。MATLAB信号处理工具箱中的各种IIR数字滤波器设计函数都是采用双线性变换法。第六章介绍的滤波器设计函数butter、cheby1 、cheby2 和ellip可以分别被调用来直接设计巴特沃斯、切比雪夫1、切比雪夫2和椭圆模拟和数字滤波器。

本实验的数字滤波器的MATLAB实现是指调用MATLAB信号处理工具箱函数filter对给定的输入信号x(n)进行滤波,得到滤波后的输出信号y(n)。

3.实验 仪器及设备

计算机,MATLAB 软件

4 . 实验内容及步骤

(1)调用信号产生函数mstg产生由三路抑制载波调幅信号相加构成的复合信号st,该函数还会自动绘图显示st的时域波形和幅频特性曲线,如图10.4.1所示。由图可见,三路信号时域混叠无法在时域分离。但频域是分离的,所以可以通过滤波的方法在频域分离,这就是本实验的目的。

(2)要求将st中三路调幅信号分离,通过观察st的幅频特性曲线,分别确定可以分离st中三路抑制载波单频调幅信号的三个滤波器(低通滤波器、带通滤波器、高通滤波器)的通带截止频率和阻带截止频率。要求滤波器的通带最大衰减为0.1dB,阻带最小衰减为60dB。

提示:抑制载波单频调幅信号的数学表示式为

5 .信号产生函数mstg清单

function st=mstg

%产生信号序列向量st,并显示st的时域波形和频

Matlab 复制代码
%st=mstg 返回三路调幅信号相加形成的混合信号,长度N=1600
N=1600   %N为信号st的长度。
Fs=10000;T=1/Fs;Tp=N*T; %采样频率Fs=10kHz,Tp为采样时间
t=0:T:(N-1)*T;k=0:N-1;f=k/Tp;
fc1=Fs/10;		%第1路调幅信号的载波频率fc1=1000Hz,
fm1=fc1/10;   	%第1路调幅信号的调制信号频率fm1=100Hz
fc2=Fs/20;	 	%第2路调幅信号的载波频率fc2=500Hz
fm2=fc2/10;   	%第2路调幅信号的调制信号频率fm2=50Hz
fc3=Fs/40;		%第3路调幅信号的载波频率fc3=250Hz,
fm3=fc3/10;   	%第3路调幅信号的调制信号频率fm3=25Hz
xt1=cos(2*pi*fm1*t).*cos(2*pi*fc1*t); %产生第1路调幅信号
xt2=cos(2*pi*fm2*t).*cos(2*pi*fc2*t); %产生第2路调幅信号
xt3=cos(2*pi*fm3*t).*cos(2*pi*fc3*t); %产生第3路调幅信号
st=xt1+xt2+xt3;         %三路调幅信号相加
fxt=fft(st,N);          %计算信号st的频谱
%====以下为绘图部分,绘制st的时域波形和幅频特性曲线====================
subplot(3,1,1)
plot(t,st);grid;xlabel('t/s');ylabel('s(t)');
axis([0,Tp/8,min(st),max(st)]);title('(a) s(t)的波形')
subplot(3,1,2)
stem(f,abs(fxt)/max(abs(fxt)),'.');grid;title('(b) s(t)的频谱')
axis([0,Fs/5,0,1.2]);
xlabel('f/Hz');ylabel('幅度')

6.实验程序及波形如下:

Matlab 复制代码
低通滤波器:
fp=290;fs=440;
wp=2*fp/Fs;ws=2*fs/Fs;rp=0.1;rs=60;
[N,wpo]=cheb1ord(wp,ws,rp,rs);
[B,A]=cheby1(N,rp,wpo);
y1t=filter(B,A,st);
figure(2);subplot(3,1,1);
myplot(B,A);
yt='y_1(t)';
subplot(3,1,2);tplot(y1t,T,yt);
Matlab 复制代码
带通滤波器
fpl=440;fpu=560;fsl=275;fsu=900;
wp=[2*fpl/Fs,2*fpu/Fs];ws=[2*fsl/Fs,2*fsu/Fs];rp=0.1;rs=60;
[N,wpo]=cheb1ord(wp,ws,rp,rs);
[B,A]=cheby1(N,rp,wpo);
y2t=filter(B,A,st);
figure(3);subplot(3,1,1);
myplot(B,A);
yt='y_2(t)';
subplot(3,1,2);tplot(y2t,T,yt);axis([0,0.08,-1.2,1.2])
Matlab 复制代码
高通滤波器
fp=800;fs=400;
wp=2*fp/Fs;ws=2*fs/Fs;rp=0.1;rs=60;
[N,wpo]=cheb1ord(wp,ws,rp,rs);
[B,A]=cheby1(N,rp,wpo,'high');
y3t=filter(B,A,st);
figure(4);subplot(3,1,1);
myplot(B,A);
yt='y_3(t)';
subplot(3,1,2);tplot(y3t,T,yt);axis([0,0.08,-1.2,1.2])
相关推荐
玩电脑的辣条哥2 小时前
Python如何播放本地音乐并在web页面播放
开发语言·前端·python
ll7788114 小时前
LeetCode每日精进:20.有效的括号
c语言·开发语言·算法·leetcode·职场和发展
Jackson@ML6 小时前
Python数据可视化简介
开发语言·python·数据可视化
赵琳琅6 小时前
Java语言的云计算
开发语言·后端·golang
lly2024066 小时前
jQuery 杂项方法
开发语言
赵琳琅6 小时前
MDX语言的安全开发
开发语言·后端·golang
开开又心心的学嵌入式7 小时前
C语言——指针进阶应用
c语言·开发语言
开开又心心的学嵌入式7 小时前
C语言——指针基础知识
c语言·开发语言
lonelyhiker7 小时前
javascript的原型链
开发语言·javascript·原型模式
夏梓蕙8 小时前
Elixir语言的软件开发工具
开发语言·后端·golang