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

简介: 1.熟悉双线性变换法设计IIR数字滤波器的原理与方法。2.掌握IIR数字滤波器的MATLAB实现方法,会调用ellipord()和ellip() 函数设计各种滤波器。3.观察分析滤波器输入输出数据波形,理解数字滤波的概念。

一、实验目的

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

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

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

3.调用ellipord()和ellip()

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

网络异常,图片无法展示
|
网络异常,图片无法展示
|
网络异常,图片无法展示
|

4.调用filter()

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

网络异常,图片无法展示
|
网络异常,图片无法展示
|
网络异常,图片无法展示
|
网络异常,图片无法展示
|

分析:因为信号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。

functionmainst=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');
endfunctionLHL_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);
endfunctiontplot(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('幅度');
endfunctionst=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
functionst=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
目录
相关文章
|
存储 缓存 NoSQL
跟着源码学IM(十一):一套基于Netty的分布式高可用IM详细设计与实现(有源码)
本文将要分享的是如何从零实现一套基于Netty框架的分布式高可用IM系统,它将支持长连接网关管理、单聊、群聊、聊天记录查询、离线消息存储、消息推送、心跳、分布式唯一ID、红包、消息同步等功能,并且还支持集群部署。
13844 1
基于DSP的数字滤波器设计
基于DSP的数字滤波器设计
460 4
|
消息中间件 存储 负载均衡
C 语言多线程编程:并行处理的利剑
C语言多线程编程是实现并行处理的强大工具,通过创建和管理多个线程,可以显著提升程序执行效率,尤其在处理大量数据或复杂计算时效果显著。
|
监控 搜索推荐 安全
探究亚马逊详情API接口:开发与应用
在数字化时代,亚马逊作为全球领先的电商平台,为商家和消费者提供了丰富的商品信息和便捷的购物体验。本文深入探讨了亚马逊详情API接口的获取与运用,帮助开发者和商家实时监控商品数据、分析市场趋势、优化价格策略、分析竞争对手、构建推荐系统及自动化营销工具,从而在竞争中占据优势。文章还提供了Python调用示例和注意事项,确保API使用的安全与高效。
408 3
|
机器学习/深度学习 存储 数据可视化
基于机器学习的地震预测(Earthquake Prediction with Machine Learning)(上)
基于机器学习的地震预测(Earthquake Prediction with Machine Learning)
466 0
|
监控 安全 物联网
物联卡:物联网卡和SIM卡的不同
物联网卡(IoT SIM卡)和普通SIM卡在多个方面存在显著的差异,这些差异主要体现在应用场景、功能特点、资费结构、管理方式等方面。以下是它们之间区别的详细分析:
|
前端开发 JavaScript 中间件
React中使用​​useReducer​​​高阶钩子来管理状态
通过本文的介绍,您可以在React中使用 `useReducer`高阶钩子来管理复杂的状态逻辑。`useReducer`不仅提供了清晰的状态管理方式,还可以通过与 `useContext`结合,实现全局状态管理。此外,通过自定义中间件,可以进一步扩展其功能。希望本文对您理解和应用 `useReducer`有所帮助。
229 0
|
存储 C语言
ArcGIS:Excel/Txt 文件生成点图层、属性表编辑的基本方法、属性表之间的连接(合并)和关联的操作、属性表的字段计算器的使用
ArcGIS:Excel/Txt 文件生成点图层、属性表编辑的基本方法、属性表之间的连接(合并)和关联的操作、属性表的字段计算器的使用
733 0
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的自适应神经网络
【6月更文挑战第24天】在深度学习的浪潮中,自适应神经网络以其独特的灵活性和高效性引起了研究者的广泛关注。本文将深入探讨自适应神经网络的设计原理、优化算法以及在不同领域的应用案例,揭示其在处理复杂数据模式时的优势与挑战。
|
应用服务中间件 网络安全 Apache
构建高性能Web服务器:Nginx vs Apache
【5月更文挑战第16天】Nginx与Apache是两种主流Web服务器,各具优势。Nginx以其轻量级、高并发处理能力和反向代理功能见长,适合大型网站和高并发场景;而Apache以功能丰富、稳定性强闻名,适合企业网站和需要多种Web服务功能的场景。在性能上,Nginx处理高并发更优,Apache则可能在高负载时遭遇瓶颈。在选择时,应根据实际需求权衡。