实验 3 无限冲激响应滤波器IIR算法实验之欧阳德创编.docx
《实验 3 无限冲激响应滤波器IIR算法实验之欧阳德创编.docx》由会员分享,可在线阅读,更多相关《实验 3 无限冲激响应滤波器IIR算法实验之欧阳德创编.docx(7页珍藏版)》请在冰点文库上搜索。
![实验 3 无限冲激响应滤波器IIR算法实验之欧阳德创编.docx](https://file1.bingdoc.com/fileroot1/2023-5/20/51ba14ea-a812-4018-8b47-03c940da58fb/51ba14ea-a812-4018-8b47-03c940da58fb1.gif)
实验3无限冲激响应滤波器IIR算法实验之欧阳德创编
实验3:
无限冲激响应滤波器(IIR)算法实验一、实验目的
时间:
2021.03.07
创作:
欧阳德
1.熟悉IIR数字滤波器特性;
2.掌握IIR数字滤波器的设计过程;
3.掌握IIR数字滤波器性能测试方法。
二、实验设备
1.PC兼容机
2.WIN7操作系统
3.CodeComposerStudiov5
三、实验内容
1.掌握IIR数字滤波器的基础理论;
2.基于MATLAB的IIR数字滤波器参数确定方法;
3.采用C语言编程实现低通IIR滤波器;
4.掌握基于CCS的波形观察方法;观察滤波前后的波形变化。
四.实验原理分析
要求:
使用低通巴特沃斯滤波器,设计通带截止频率fp为1kHz、增益为-3dB,阻带截止频率fst为12kHz、衰减为30dB,采样频率fs为25kHz。
设计:
通带截止频率为:
fp=1000Hz,fst=12000Hz
(一)、滤波器参数计算
●模拟预畸变通带截止频率为:
wp=2fstan(2πfp/(2fs))=6316.5弧度/秒
●模拟预畸变阻带截止频率为:
wst=2fstan(2πfst/(2fs))=794727.2弧度/秒
由式(7.5.24)
●N=0.714,则:
一阶巴特沃斯滤波器就足以满足要求。
一阶模拟巴特沃斯滤波器的传输函数为:
H(s)=wp/(s+wp)=6316.5/(s+6316.5)
由双线性变换定义s=2fs(z-1)/(z+1)得到数字滤波器的传输函数为:
因此,差分方程为:
y[n]=0.7757y[n-1]+0.1122x[n]+0.1122x[n-1]。
(二)、基于MATLAB的滤波器参数求解
(1)IIR数字滤波器阶次的选择的MATLAB函数
[N,wc]=buttord(wp,wst,Rp,As);
[N,wc]=cheb1ord(wp,wst,Rp,As);
[N,wc]=cheb2ord(wp,wst,Rp,As);
[N,wc]=ellipord(wp,wst,Rp,As);
对低通滤波器,必须有wp对高通滤波器,必须有wp>wst
对带通滤波器,必须有ws1对带阻滤波器,必须有wp1(2)IIR数字滤波器的设计
[b,a]=butter(N,wc,’ftype’)
[b,a]=cheby1(N,wc,’ftype’)
[b,a]=cheby2(N,wc,’ftype’)
[b,a]=ellip(N,wc,’ftype’)
(三)、基于C语言编程的IIR数字滤波器编程实现
程序流程图
五.实验步骤
1.打开CCS,进入CCS的操作环境。
2.打开工程,浏览程序:
工程目录为C:
\ICETEK\ICETEK-DM6437-A\Lab0402_IIR
3.点击图标
,CCS会自动编译、链接和下载程序。
4.运行程序。
可以观察收到的数据。
*选择菜单Tools->Graph->DualTime,进行如下设置:
DualTime参数设置
*选择菜单Tools->Graph->FFTMagnitude,新建2个观察窗口,分别进行如下设置:
5.设置断点:
在有注释“breakpoint”的语句设置软件断点。
使用菜单的View->Breakpoints,打开断点观察窗口,在刚才设置的断点上右键->Breadkpointproperties调出断点的属性设置界面,设置Action为RefreshAllwindows。
则程序每次运行到断点,所有的观察窗口值都会被刷新。
其中,输入波形:
一个低频正弦波与一个高频正弦波的叠加;输出波形:
经过低通滤波后的低频正弦波。
6.运行并观察结果:
⑴F8键运行程序。
⑵观察“IIR”窗口中时域图形;观察滤波效果。
7.退出CCS
六.实验结果输入波形为一个低频率的正弦波与一个高频的余弦波叠加而成。
如图:
通过观察频域和时域图,得知:
输入波形中的低频波形通过了滤波器,而高频部分则被衰减。
六.问题与思考
基本任务:
1.试微调(±0.0001)改变程序中fU的取值,观察步长因子μ在自适应算法中所起的作用。
2.确定程序中的信号频率,试选用设计不同的信号、噪声组合,基于MATLAB设计不同的类型的滤波器,并基于CCS实现,并观察实验的结果。
3.分析实验程序,细化算法流程图。
4.结合CCS的使用,分析实验结果
提高任务:
5.尝试使用信号源生成组合信号,经过A/D采样后,送IIR滤波器实现。
源代码:
#include"math.h"
#defineIIRNUMBER2/*典范性的滤波器阶数*/
#defineSIGNAL1F1000/*正弦信号频率,代码中没有使用*/
#defineSIGNAL2F4500/*正弦信号频率,代码中没有使用*/
#defineSAMPLEF10000/*采样频率,代码中没有使用*/
#definePI3.1415926
floatInputWave();/*输入给IIR滤波器的信号,每次输出一个点*/
floatIIR();/*IIR滤波,每次输出一个点*/
/*滤波器的设计采用了案例的结果,应该重新设计*/
floatfBn[IIRNUMBER]={0.0,0.7757};/*IIR滤波器的分子多项式系数,有错*/
floatfAn[IIRNUMBER]={0.1122,0.1122};/*IIR滤波器的分母多项式系数*/
floatfXn[IIRNUMBER]={0.0};/*IIR滤波器的迭代初始值*/
floatfYn[IIRNUMBER]={0.0};/*IIR滤波器的输出值*/
floatfInput,fOutput;/*输入点和输出点*/
floatfSignal1,fSignal2;/*信号1、2的初始相位*/
floatfStepSignal1,fStepSignal2;/*信号1、2的相位步长*/
floatf2PI;
inti;
floatfIn[256],fOut[256];
intnIn,nOut;
main()
{
nIn=0;nOut=0;
f2PI=2*PI;
fSignal1=0.0;
fSignal2=PI*0.1;
//fStepSignal1=2*PI/30;
//fStepSignal2=2*PI*1.4;
fStepSignal1=2*PI/50;/*信号1的相位步长:
f1/fs=1/50*/
fStepSignal2=2*PI/2.5;/*信号2的相位步长:
f1/fs=1/2.5*/
while
(1)
{
fInput=InputWave();
fIn[nIn]=fInput;
nIn++;nIn%=256;
fOutput=IIR();
fOut[nOut]=fOutput;
nOut++;/*请在此句上设置软件断点*/
if(nOut>=256)
{
nOut=0;
}
}
}
floatInputWave()
{
for(i=IIRNUMBER-1;i>0;i--)
{
fXn[i]=fXn[i-1];
fYn[i]=fYn[i-1];
}
fXn[0]=sin(fSignal1)+cos(fSignal2)/6.0;
fYn[0]=0.0;
fSignal1+=fStepSignal1;
if(fSignal1>=f2PI)fSignal1-=f2PI;
fSignal2+=fStepSignal2;
if(fSignal2>=f2PI)fSignal2-=f2PI;
return(fXn[0]);
}
floatIIR()
{
floatfSum;
fSum=0.0;
/*y[n]=0.7757y[n-1]+0.1122x[n]+0.1122x[n-1]*/
for(i=0;i{
fSum+=(fXn[i]*fAn[i]);
fSum+=(fYn[i]*fBn[i]);
}
return(fSum);
}
时间:
2021.03.07
创作:
欧阳德