IIR仿真实现.docx
- 文档编号:15074910
- 上传时间:2023-06-30
- 格式:DOCX
- 页数:37
- 大小:670.97KB
IIR仿真实现.docx
《IIR仿真实现.docx》由会员分享,可在线阅读,更多相关《IIR仿真实现.docx(37页珍藏版)》请在冰点文库上搜索。
IIR仿真实现
目录
一.题目名称2
二.内容摘要2
三.设计任务和要求2
3.1设计任务2
3.2设计要求2
3.2.1.课程设计基本要求2
3.2.2.成果要求2
四.设计基本原理2
4.1IIR滤波器的基本结构和数据存储方式2
4.2IIR滤波器实现的基本结构2
4.2.1直接型结构;2
4.2.2IIR滤波器的级联型结构;2
4.2.3IIR滤波器的并联型结构。
2
4.3滤波器的性能指标2
五.设计方法——软件设计,画出程序流程图2
5.1MATLAB设计2
5.1.1IIR低通滤波器的设计2
5.1.2IIR高通滤波器的设计2
5.1.3IIR带通滤波器的设计2
5.1.4IIR带阻滤波器的设计2
5.2CCS与MATLAB相结合的设计2
5.2.1IIR低通滤波器的设计2
5.2.2IIR高通滤波器的设计2
5.2.3IIR带通滤波器的设计2
5.2.4IIR带阻滤波器的设计2
六.系统调试2
6.1.使用的主要仪器2
6.2.调试程序的方法和技巧2
6.3.结果分析2
6.4.调试中出现的故障、原因及排除方法2
七.设计成果2
7.1MATLAB的设计成果2
7.2CCS与MATLAB相结合的设计成果2
7.2.1切贝雪夫I型结果2
7.2.2切贝雪夫II型结果2
八.设计结论2
8.1IIR滤波器的设计步骤2
8.2butter,cheby1,cheby2的使用2
8.3cheby1,cheby2的比较2
九.收获和体会2
十.附件(源程序)2
一.题目名称
IIR滤波器的DSP仿真实现
二.内容摘要
叙述了IIR数字滤波器的设计原理及其在DSP上的实现思路,并对用DSP实现IIR数字滤波的方法进行了分析。
使用MATLAB和CCS两种方式实现四种滤波器,其中在使用CCS的时候采用MATLAB计算出IIR数字滤波器的系数,最后在CCS上得以实现,并通过CCS(come composer studio)的输入输出功能观察输入输出波形。
在文中我们还分析了这个流程,并且画出了流程图。
其中IIR滤波器设计主要内容包括:
巴特沃思、切贝雪夫滤波器设计,其中切贝雪夫滤波器还分为I型和II型,文中还分别介绍了它们的性能指标还有他们各自的特点与使用方法,我们还用不同方案实现了一种功能,在此基础上我们比较了它们的差别。
三.设计任务和要求
3.1设计任务
(1)学习并掌握IIR数字滤波器的DSP实现原理。
(2)利用simulator仿真及MATLAB编程实现四种FIR滤波器(低通、高通、带通、带阻)
(3)通过CCS的图形显示工具观察输入/输出信号波形及频谱的变化。
(4)分析不同类型滤波器的性能。
3.2设计要求
3.2.1.课程设计基本要求
课题分析、查阅资料、方案论证、方案实现、系统联调、撰写课程设计报告
3.2.2.成果要求
(1)软件设计(包括主要模块的流程图,源程序清单和注释)
(2)调试过程(包括实验过程中的实验步骤,出现的问题,解决问题的方法,使用的实验数据等);
(3)设计说明书(课程设计报告)
四.设计基本原理
4.1IIR滤波器的基本结构和数据存储方式
IIR数字滤波器的传递函数H(z)为:
(2-1)
由这样的系统函数可以得到表示系统输入与输出关系的常系数线性差分方程为:
(2-2)
可见数字滤波器的功能就是把输入序列x(n)通过一定的运算变换成输出序列y(n)。
不同的运算处理方法决定了滤波器实现结构的不同。
无限冲激响应滤波器的单位抽样响应h(n)是无限长的,其差分方程如(2-2)式所示,是递归式的,即结构上存在着输出信号到输入信号的反馈,其系统函数具有(2-1)式的形式,因此在z平面的有限区间(0<︱z︱<∞)有极点存在。
前面已经说明,对于一个给定的线形时不变系统的系统函数,有着各种不同的等效差分方程或网络结构。
由于乘法是一种耗时运算,而每个延迟单元都要有一个存储寄存器,因此采用最少常熟乘法器和最少延迟支路的网络结构是通常的选择,以便提高运算速度和减少存储器。
然而,当需要考虑有限寄存器长度的影响时,往往也采用并非最少乘法器和延迟单元的结构。
假定用直接形式构成一个的IIR数字滤波器,其结构如图1所示,差分方程为:
图1直接形式的二阶IIR数字滤波器
编程时,可以分别开辟四个缓冲区,存放输入、输出变量和滤波器的系数,如图2所示。
图2存放输入、输出变量和滤波器系数的缓冲区
4.2IIR滤波器实现的基本结构
4.2.1直接型结构;
优点:
延迟线减少一半,变为N个,可节省寄存器或存储单元;
缺点:
其它缺点同直接I型。
通常在实际中很少采用上述两种结构实现高阶系统,而是把高阶变成一系列不同组合的低阶系统(一、二阶)来实现。
图3直接型
4.2.2IIR滤波器的级联型结构;
特点:
∙系统实现简单,只需一个二阶节系统通过改变输入系数即可完成;
∙极点位置可单独调整;
∙运算速度快(可并行进行);
∙各二阶网络的误差互不影响,总的误差小,对字长要求低。
缺点:
不能直接调整零点,因多个二阶节的零点并不是整个系统函数的零点,当需要准确的传输零点时,级联型最合适。
图4级联型
4.2.3IIR滤波器的并联型结构。
优点:
∙简化实现,用一个二阶节,通过变换系数就可实现整个系统;
∙极、零点可单独控制、调整,调整α1i、α2i只单独调整了第i对零点,调整β1i、β2i则单独调整了第i对极点;
∙各二阶节零、极点的搭配可互换位置,优化组合以减小运算误差;
∙可流水线操作。
缺点:
∙二阶阶电平难控制,电平大易导致溢出,电平小则使信噪比减小。
图5并联型
4.3滤波器的性能指标
我们在进行滤波器设计时,需要确定其性能指标。
一般来说,滤波器的性能要求往往以频率响应的幅度特性的允许误差来表征。
以低通滤波器特性为例,频率响应有通带、过渡带及阻带三个范围。
在通带内:
1-AP≤|H(ejω)|≤1|ω|≤ωc
在阻带中:
|H(ejω)|≤Astωst≤|ω|≤ωc
其中ωc为通带截止频率,ωst为阻带截止频率,Ap为通带误差,Ast为阻带误差。
图6低通滤波器频率响应幅度特性的容限图
与模拟滤波器类似,数字滤波器按频率特性划分为低通、高通、带通、带阻、全通等类型,由于数字滤波器的频率响应是周期性的,周期为2π。
各种理想数字滤波器的幅度频率响应如图所示:
图7各种理想数字滤波器的幅度频率响应
巴特沃斯滤波器是电子滤波器的一种。
巴特沃斯滤波器的特点是通频带的频率响应曲线最平滑。
巴特沃斯滤波器的特性是通频带内的频率响应曲线最大限度平坦,没有起伏,而在组频带则逐渐下降为零。
在振幅的对数对角频率的波得图上,从某一边界角频率开始,振幅随着角频率的增加而逐步减少,趋向负无穷大。
其振幅平方函数具有如2-3式:
(2-3)
式中,N为整数,称为滤波器的阶数,N越大,通带和阻带的近似性越好,过渡带也越陡。
理想滤波器的过渡带为Ω,阻带|H(jΩ)|=0,通带内幅度|H(jΩ)|=常数,H(jΩ)线性相 位。
通带内,分母Ω/Ωc<1,相应(Ω/Ωc)2N随N的增加而趋于0,A(Ω2)→1,在过渡带和阻带,Ω/Ωc>1,随N的增加,Ωe/Ωc>>1,所以A(Ω2)快速下降。
Ω=Ωc时,
,幅度衰减
,相当于3dB衰减点。
振幅平方函数的极点可写成如式2-4:
Ha(-s).Ha(s)=
(2-4)
可分解为2N个一次因式令分母为零,→
可见,Butterworth滤波器的振幅平方函数有2N个极点,它们均匀对称地分布在|s|=Ωc的圆周上。
切比雪夫滤波器的设计方法就是将逼近精确度均匀分布在整个通带内,或者均匀分布在整个阻带内,或者均匀分布在两者之内,这样就可以使滤波器阶数大大降低。
切比雪夫滤波器的振幅具有等波纹特性,它有两种形式:
切比雪夫I型滤波器平方幅度响应函数表示为:
=[1+
C
(
)]
其中
<1(正数),它与通带波纹有关,
越大,波纹也越大;C
(
)是切比雪夫多项式,它被定义为:
C
(
)=cos(Narccos(
)),
≤1,C
(
)=cosh(Narcosh(
)),
>1.
而切比雪夫II型滤波器平方幅度响应函数表示为:
={1+
{C
(
)/[
(
/
)]
}}
其中
<1(正数),表示波纹变化情况;
为截止频率;N为滤波器的阶次,也是C
(
)的阶次。
五.设计方法——软件设计,画出程序流程图
由实验要求我们知道要利用simulator仿真及MATLAB编程实现四种FIR滤波器(低通、高通、带通、带阻),simulator仿真我们了解到需要用MATLAB产生相关的系数,之后与CCS相结合实现四种IIR滤波器,其中我们选用了两种方法产生系数,即切贝雪夫I式和切贝雪夫II式。
MATLAB则直接可以编程实现四种IIR滤波器,先编写一个.m程序,这个程序的作用是生成系数,之后再编写一个输入输出波形的.m程序,将刚刚得到的系数放入到现在的.m程序中,之后运行。
其中在MATLAB中设计IIR滤波器的方法及其它们所用到的函数如表5-1所示。
我们选用的是巴特沃斯滤波器中的butter函数。
而对于simulator仿真则需要结合MATLAB,先由MATLAB产生系数,之后输入到CCS里面,实现仿真过程。
整个过程可以有图8流程图来表示。
。
图8CCS和MATLAB结合时程序流程图
5.1MATLAB设计
5.1.1IIR低通滤波器的设计
数字低通的技术指标为:
Fs=8KHZ,其通频带2.0KHz内损耗不大于1dB;3.5KHz为阻带,其衰减大于20dB。
(1)程序:
clear;
clearclc;
f1=1000;f2=3800;
fs=8000;Ts=1/fs;
M=256;
k=0:
M-1;
fk=sin(2*pi*f1*k/fs)+sin(2*pi*f2*k/fs);
subplot(221)
plot(k,fk)
xlabel''
title'滤波前的波形图';
N=M;
F=fft(fk,N);
subplot(223)
plot(2*pi*(0:
N/2-1)/N/pi,2*abs(F(1:
N/2))/N);
xlabel''
title'滤波前的频谱曲线';
h=[0000007.047754e-00411.152601e+0006.642442e-0012.426881e-0015.911232e-0029.128079e-0037.047754e-004];
yk=conv(fk,h);
subplot(222)
plot(0:
M+15-2,yk)
xlabel''
title'低通滤波后的波形图';
axis([0M-11])
Y=fft(yk,N);
subplot(224)
plot(2*pi*(0:
N/2-1)/N/pi,2*abs(Y(1:
N/2))/N);
title'低通滤波后的频谱曲线';
(2)巴特沃斯生成系数h的程序:
Wp=2000/8000;Ws=3500/8000;
Ap=1;As=20;
[N,Wc]=buttord(Wp,Ws,Ap,As,'s');
[B,A]=butter(N,Wc,'s')
B=round(B/6*2^15)
A=round(A/6*2^15)
5.1.2IIR高通滤波器的设计
数字高通的技术指标为:
采样频率Fs=8KHZ,其通频带3.0KHz内损耗不大于1dB;2.0KHz为阻带,其衰减大于20dB。
程序:
参照MATLAB设计IIR低通滤波器的程序,可以看出主要是由于h值不同,而这个是由于利用巴特沃斯生成系数的时候导致的,Wp=2000/8000;Ws=3500/8000改为Wp=3000/8000;Ws=2000/8000,将[B,A]=butter(N,Wc,'s')改为[B,A]=butter(N,Wc,'high','s');其他的保持不变。
5.1.3IIR带通滤波器的设计
带通滤波器技术指标为:
采样频率Fs=16KHZ,其通频带3.2KHz
程序:
参照MATLAB设计IIR低通滤波器的程序,可以看出主要是由于h值不同,而这个是由于利用巴特沃斯生成系数的时候导致的,还有就是现在需要选择三个频率,即将f1=1000;f2=3800改为f1=1000;f2=4000;f3=6500。
Wp=2000/8000;Ws=3500/8000改为Wp=[32004800]/16000;Ws=[24005600]/16000,将[B,A]=butter(N,Wc,'s')改为[B,A]=butter(N,Wc,'bandpass','s');其他的保持不变。
5.1.4IIR带阻滤波器的设计
带阻滤波器技术指标为:
采样频率Fs=16KHZ,其通频带2.4KHz 程序: 参照MATLAB设计IIR低通滤波器的程序,可以看出主要是由于h值不同,而这个是由于利用巴特沃斯生成系数的时候导致的,还有就是现在需要选择三个频率,即将f1=1000;f2=3800改为f1=1000;f2=4000;f3=6500。 将Wp=2000/8000;Ws=3500/8000改为Wp=[24005600]/8000;Ws=[32004800]/8000,将[B,A]=butter(N,Wc,'s')改为[B,A]=butter(N,Wc,'stop','s');其他的保持不变。 5.2CCS与MATLAB相结合的设计 5.2.1IIR低通滤波器的设计 设计一个三阶的切贝雪夫低通数字滤波器,其采样频率Fs=8KHZ,其通频带2.0KHz内损耗不大于1dB;3.5KHz为阻带,其衰减大于20dB。 (1)用MATLAB产生系数并将系数归一化 程序: 切比雪夫Ⅰ型 Wp=2000/8000;Ws=3500/8000; Rp=1;Rs=20; [n,Wn]=cheb1ord(Wp,Ws,Rp,Rs); [b,a]=cheby1(n,Rp,Wn) b=round(b/6*2^15); a=round(a/6*2^15); fid=fopen('C: \ti\myprojects\iir\iirdata.inc','wt'); fprintf(fid,'\n'); fprintf(fid,'N.set%1d\n',n); fprintf(fid,'table: .sect"table"\n'); fprintf(fid,'.word%1d\n',b); fprintf(fid,'.word%1d\n',a); fclose(fid); 当使用切贝雪夫II型的时候,直接将[b,a]=cheby1(n,Rp,Wn)改为[b,a]=cheby2(n,Rp,Wn),其他的和切贝雪夫I型一样。 结果为: 切贝雪夫I型切贝雪夫II型 N.set3 table: .sect"table" .word115 .word345 .word345 .word115 .word5461 .word-10193 .word8184 .word-2532 (2)MATLAB产生输入信号函数 fs=8000;f1=1000;f2=3800;N=256; x=sin(2*pi*f1*[0: N-1]/fs)+sin(2*pi*f2*[0: N-1]/fs); xmax=max(x); b=round(x/xmax*16384); fid=fopen('C: \ti\myprojects\iir\iirin.inc','wt'); fprintf(fid,'INPUT: .sect"INPUT"\n'); fori=0: 255; fprintf(fid,'.word%1d\n',b(i+1)); end fclose(fid); 5.2.2IIR高通滤波器的设计 设计一个三阶的切比雪夫高通数字滤波器,其采样频率Fs=8KHZ,其通频带3.0KHz内损耗不大于1dB;2.0KHz为阻带,其衰减20dB。 (1)用MATLAB产生系数并将系数归一化 程序: 参照CCS与MATLAB相结合的设计IIR低通滤波器的程序,将Wp=2000/8000;Ws=3500/8000改为Wp=3000/8000;Ws=2000/8000;将[b,a]=cheby1(n,Rp,Wn)改为[b,a]=cheby1(n,Rp,Wn,'high') 当使用切贝雪夫II型的时候,直接将[b,a]=cheby1(n,Rp,Wn)改为[b,a]=cheby2(n,Rp,Wn,’high’),其他的和切贝雪夫I型一样。 结果为: 切贝雪夫I型切贝雪夫II型 N.set4 table: .sect"table" .word704 .word-2818 .word4227 .word-2818 .word704 .word5461 .word-2091 .word4449 .word340 .word985 (3)MATLAB产生输入信号函数 程序: 参照CCS与MATLAB相结合的设计IIR低通滤波器的程序 5.2.3IIR带通滤波器的设计 设计一个三阶的切比雪夫带通数字滤波器,其采样频率Fs=16KHZ,其通频带3.2KHz (1)用MATLAB产生系数并将系数归一化 程序: 参照CCS与MATLAB相结合的设计IIR低通滤波器的程序,将Wp=2000/8000;Ws=3500/8000改为Wp=[32004800]/16000;Ws=[24005600]/16000 结果为: 切贝雪夫I型切贝雪夫II型 N.set3 table: .sect"table" .word9 .word0 .word-27 .word0 .word27 .word0 .word-9 .word5461 .word-21983 .word44033 .word-52511 .word39703 .word-17867 .word4006 (2)MATLAB产生输入信号函数 程序: 参照CCS与MATLAB相结合的设计IIR低通滤波器的程序,将f1=1000;f2=3800改为f1=1000;f2=4000;f3=6500 5.2.4IIR带阻滤波器的设计 设计一个三阶的切比雪夫带阻数字滤波器,其采样频率Fs=16KHZ,其通频带2.4KHz (1)用MATLAB产生系数并将系数归一化 程序: 参照CCS与MATLAB相结合的设计IIR低通滤波器的程序,将Wp=2000/8000;Ws=3500/8000改为Wp=[24005600]/16000;Ws=[32004800]/16000 结果为: 切贝雪夫I型切贝雪夫II型 N.set5 table: .sect"table" .word43 .word0 .word-217 .word0 .word434 .word0 .word-434 .word0 .word217 .word0 .word-43 .word5461 .word0 .word12117 .word0 .word16394 .word0 .word13387 .word0 .word6734 .word0 .word1698 (2)MATLAB产生输入信号函数 程序: 参照CCS与MATLAB相结合的设计IIR低通滤波器的程序,将f1=1000;f2=3800改为f1=1000;f2=4000;f3=6500 六.系统调试 6.1.使用的主要仪器 电脑一台(已安装CCSC5000和MATLAB) 6.2.调试程序的方法和技巧 当使用MATLAB时,则新建一个editor,然后将自己编写的程序输进去,之后点击运行键,然后观察是否出现错误,若出现错误,则将鼠标定到commandwindow窗口的红色error,检查错误并修改,之后运行。 当使用CCS时,则先新建一个工程,之后新建文件sourcefile,保存的时候保存类型有.asm,.cmd,在这个过程中还需要利用MATLAB产生系数,MATLAB这时需要注意的是文件的位置,需将文件位置进行修改,改成我们所存储.asm等文件的位置,在进行文件的添加,点击Project中的AddFilestoproject,之后将.asm,.cmd,.inc文件加进去,之后进行编译,链接,当这个过程没有出现错误时则在点击File中的Loadprogram按钮,将.out文件加进去,为了观察波形,我们需要先设置单击View→Graph→Time/Frequency窗口中的参数,进行修改,观察波形。 6.3.结果分析 我们组用MATLAB产生波形的时候,是利用的巴特沃斯滤波器,当使用CCS和MATLAB相结合的时候利用的是切贝雪夫I和切贝雪夫II型滤波器,从我们所得到的波形我们可以发现使用不同的滤波器时我们所得到的波形也是有点差异的,但是这个的话对结果不影响,并且我们观察到当使用低通滤波器时我们过滤了大部分其他的信号,留下了低频率的信号,当使用高通时,发现将会留下大部分的高频率的信号,而减弱了其他频率的信号,当使用带通滤波器,我们可以看到留下的是通带范围内的信号,减弱其他的信号,而当我们使用了带阻滤波器时,我们可以发现,在通带内是减弱的,其他地方是存在信号的。 6.4.调试中出现的故障、原因及排除方法 在进行CCS的编译,链接时,我们组遇到了问题,系统一直提示我有错误,上面显示的是irrdata.inc这个文件有问题,之后我们进行针对这个问题展开了讨论,先检查了irrdata.inc这个文件是否出错,之后发现我们应该将系数进行转换下(/6*2^15),在这个的前提下,我们通过查阅资料了解了转换的过程,在这个基础上,我们进行运行发现没有错误了,但是没有显示波形,经过检查发现是我们的程序出现问题,之后经过修改下,这时系统提示没有出现错误,但是后来运行的时候忘记了点击run,波形还是没有出现,后来进行运行操
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- IIR 仿真 实现