写点什么

IIR 数字滤波器设计(数字信号处理)

作者:Five
  • 2022 年 8 月 02 日
  • 本文字数:3482 字

    阅读完需:约 11 分钟

IIR数字滤波器设计(数字信号处理)

一、实验目的

1.熟悉双线性变换法设计 IIR 数字滤波器的原理与方法。

2.掌握 IIR 数字滤波器的 MATLAB 实现方法,会调用 ellipord()和 ellip() 

函数设计各种滤波器。

3.观察分析滤波器输入输出数据波形,理解数字滤波的概念。

             

二、实验原理

(一)实验原理-双线性变换法

数字滤波器是对数字信号实现滤波的线性时不变系统。数字滤波实质上是一种运算过程,实现对信号的运算处理。输入数字信号(数字序列)通过特定的运算转变为输出的数字序列,因此,数字滤波器本质上是一个完成特定运算的数字计算过程,也可以理解为是一台计算机。描述离散系统输出与输入关系的卷积和差分方程只是给数字信号滤波器提供运算规则,使其按照这个规则完成对输入数据的处理。时域离散系统的频域特性:



数字滤波器根据其冲激响应函数的时域特性,可分为两种,即无限长冲激响应(IIR)数字滤波器和有限长冲激响应(FIR)数字滤波器。IIR 数字滤波器的特征是,具有无限持续时间冲激响应,需要用递归模型来实现。

系统函数为:


             


设计 IIR 滤波器的任务就是寻求一个物理上可实现的系统函数 H(z),使其频率响应 H(z)满足所希望得到的频域指标,即符合给定的通带截止频率、阻带截止频率、通带衰减系数和阻带衰减系数。

基本设计过程如下:

1.将给定的数字滤波器指标转换成模拟滤波器的指标。

2.设计模拟滤波器。

3.将模拟滤波器转换成数字滤波器系统函数。

三、实验步骤

1.采用 filter()对输入信号进行滤波处理。

在完成滤波器设计之后,采用 filter()对输入信号进行滤波处理。调用信号产生函数 mstg 产生由抑制载波调制信号相加构成的复合信号 st,该函数还会自动绘图显示其时域波形和幅频特性曲线,如下图 1 所示。


图1

由图 1 中(a)和(b)可见,三路信号时域混叠无法在时域分离,但在频域是可以分离的,可以通过滤波的方法进行分离,即通过设计 IIR 滤波器,分离这三个不同频率的信号。

2.要求将三路信号进行分离

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

3.调用 ellipord()和 ellip()

分别设计这三个椭圆滤波器,并绘图显示其损耗函数曲线分别如图 2,图 3,图 4。


图2 低通损耗函数曲线



4.调用 filter()

用三个滤波器分别对信号产生函数 mstg 产生的信号进行滤波,分离出 st 中的不同载波频率信号,并绘图显示三个信号的时域波形,分别如图 5,图 6,图 7。


图5


图6


图7

四、实验结果分析

1. 函数 mstg

阅读信号产生函数 mstg,确定三路调幅信号的载波频率和调制信号频率。第 1 路调幅信号的载波频率 fc1=1000Hz,调制信号频率 fm1=100Hz。第 2 路调幅信号的载波频率 fc2=500Hz,调制信号频率 fm2=50Hz。第 3 路调幅信号的载波频率 fc2=250Hz,调制信号频率 fm2=25Hz。

采样点数对频谱图的影响

1.调幅信号

当 N=800,1600,1800,2000 时,调幅信号产生的频谱图如图 8,9,10,11 所示。


图8 N=800时s(t)的波形及频谱图




分析:因为信号 s(t)是周期序列,频谱分析时要求观察时间为整数倍周期。s(t)的每个频率成分都是 25Hz 的整数倍。采样频率 Fs=10kHz=25*400Hz,即在 25Hz 的正弦波的一个周期中采样 400 个点。所以,当 N 为 400 的整数倍时一定为 s(t)的整数倍周期。因此,采样点数 N=800,1600,2000 时,对 s(t)进行 N 点 FFT 可以得 6 根理想谱线,而当 N=1800 时,不是 400 的整数倍,则不能得到。

2.AM 调幅信号

当 N=800,1600,1800,2000 时产生的频谱图如图 12,13,14,15 所示。





分析

因为信号 s(t)时周期序列,频谱分析时要求观察时间为整数倍周期。因此,采样点数 N=800,1600,2000 时,对 s(t)进行 N 点 FFT 可以得理想谱线,而当 N=1800 时,不是 400 的整数倍,则不能得到。当将该调幅信号修改为 AM 信号后,s(t)的频谱中有较大的频谱分量。如图所示。

IIR 滤波器

滤波器参数选取

由(一)可知,三路调幅信号的载波频率分别为 250Hz,500Hz,1000Hz。带宽为 50Hz,100Hz,200Hz。所以分离混合信号 st 中三路抑制载波单频调幅信号的三个滤波器(低通滤波器、带通滤波器、高通滤波器)的指标参数选取如下:

对载波频率为 250Hz 的调幅信号,用低通滤波器分离,其通带截止频率 fp=280Hz,通带最大衰减 ap=0.1dB,阻带截止频率为 fs=450Hz,阻带最小衰减 as=60dB。对载波频率为 500Hz 的调幅信号,用低通滤波器分离,其通带截止频率 fpl=440Hz、fph=560Hz,通带最大衰减 ap=0.1dB,阻带截止频率为 fsl=275Hz、fsh=900Hz 阻带最小衰减 as=60dB。对载波频率为 1000Hz 的调幅信号,用低通滤波器分离,其通带截止频率 fp=890Hz,通带最大衰减 ap=0.1dB,阻带截止频率为 fs=600Hz,阻带最小衰减 as=60dB。


function mainst=mstg;   %调用信号产生函数mstg产生由三路抑制载波调幅信号相加构成的复合信号sFs=10000; T=1/Fs;  %采样频率fp=280; fs=450;wp=2*fp/Fs;ws=2*fs/Fs; %低通   name='y_1(t)';LHL_filter(wp,ws,name,st,T,'low');fp_L=440; fp_R=560;fs_L=275; fs_R=900;%带通   wp=[2*fp_L/Fs,2*fp_R/Fs];ws=[2*fs_L/Fs,2*fs_R/Fs];   name='y_2(t)'; LHL_filter(wp,ws,name,st,T,'bandpass');fp=890; fs=600;wp=2*fp/Fs;ws=2*fs/Fs; %高通   name='y_3(t)';LHL_filter(wp,ws,name,st,T,'high');endfunction LHL_filter(wp,ws,name,st,T,flag)rp=0.1;rs=60; %DF指标(低通滤波器的通、阻带边界频)[N,wp]=ellipord(wp,ws,rp,rs); %调用ellipord计算椭圆DF阶数N和通带截止频率wp?[B,A]=ellip(N,rp,rs,wp,flag); %调用ellip计算椭圆带通DF系统函数系数向量B和Ayt=filter(B,A,st); %滤波器软件实现 figure; freqz(B,A);%B,A分别为系统函数分子,分母多项式系数向量? figure;tplot(st,yt,T,name);endfunction tplot(st,xn,T,name)%时域序列连续曲线绘图函数?%?xn:信号数据序列,%?T为采样间隔N=length(xn);n=0:N-1; t=n*T; Tp=N*T; f=n/Tp;subplot(311);plot(t,xn);xlabel('t/s');ylabel(name);axis([0,t(end),min(xn),1.2*max(xn)]);subplot(312);stem(f,abs(fftshift(fft(st,N))));title('原 st(t)的频谱');xlabel('f/Hz');ylabel('幅度');subplot(313);stem(f,abs(fftshift(fft(xn,N))));title('滤波后xn(t)的频谱');xlabel('f/Hz');ylabel('幅度');endfunction st=mstg%产生信号序列向量st,并显示st的时域波形和频谱%st=mstg 返回三路调幅信号相加形成的混合信号,长度N=1600N=1600;Fs=10000;T=1/Fs;Tp=N*T; % N为信号st的长度。采样频率Fs=10kHz,Tp为采样时间t=0:T:(N-1)*T;k=0:N-1;f=k/Tp;fc1=Fs/10;fm1=fc1/10;%第1路调幅信号的载波频率fc1=1000Hz,调制信号频率fm1=100Hzfc2=Fs/20;fm2=fc2/10;%第2路调幅信号的载波频率fc2=500Hz,调制信号频率fm2=50Hzfc3=Fs/40;fm3=fc3/10;%第3路调幅信号的载波频率fc3=250Hz,调制信号频率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的频谱subplot(211);plot(t,st);xlabel('t/s');ylabel('s(t)');axis([0,Tp/2,min(st),max(st)]);title('(a) s(t)的波形');subplot(212);stem(f,abs(fxt)./max(abs(fxt)));title('(频谱');xlabel('f/Hz');ylabel('幅度');end
复制代码


function st=mstg%产生信号序列向量st,并显示st的时域波形和频谱%st=mstg; 返回三路调幅信号相加形成的混合信号,长度N=1600N=2000;Fs=10000;T=1/Fs;Tp=N*T; % N为信号st的长度。采样频率Fs=10kHz,Tp为采样时间t=0:T:(N-1)*T;k=0:N-1;f=k/Tp;fc1=Fs/10;fm1=fc1/10;%第1路调幅信号的载波频率fc1=1000Hz,调制信号频率fm1=100Hzfc2=Fs/20;fm2=fc2/10;%第2路调幅信号的载波频率fc2=500Hz,调制信号频率fm2=50Hzfc3=Fs/40;fm3=fc3/10;%第3路调幅信号的载波频率fc3=250Hz,调制信号频率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的频谱subplot(2,1,1);plot(t,st);xlabel('t/s');ylabel('s(t)');title(['N=',num2str(N),'s(t)的波形']);axis([0,Tp/8,min(st),max(st)]);subplot(2,1,2);stem(f,abs(fxt)/max(abs(fxt)));title(['N=',num2str(N),'s(t)的频谱']);xlabel('f/Hz');ylabel('幅度'); axis([0,Fs/5,0,1.2]);end
复制代码


发布于: 2022 年 08 月 02 日阅读数: 56
用户头像

Five

关注

有事多研究,没事瞎琢磨 2022.08.02 加入

CSDN 前端领域优质创作者 , 博客专家认证。 退役ACMer, IT技术狂热爱好者 擅长领域,web前端,算法, 业务架构,可视化,富文本编辑器等。 github: https://github.com/Five-great

评论

发布
暂无评论
IIR数字滤波器设计(数字信号处理)_matlab_Five_InfoQ写作社区