DSP课程设计有限冲击响应FIR滤波器的设计.docx
《DSP课程设计有限冲击响应FIR滤波器的设计.docx》由会员分享,可在线阅读,更多相关《DSP课程设计有限冲击响应FIR滤波器的设计.docx(9页珍藏版)》请在冰豆网上搜索。
![DSP课程设计有限冲击响应FIR滤波器的设计.docx](https://file1.bdocx.com/fileroot1/2022-12/7/0ce5697e-c13b-4af2-af38-695acdb4f326/0ce5697e-c13b-4af2-af38-695acdb4f3261.gif)
DSP课程设计有限冲击响应FIR滤波器的设计
DSP课程设计--有限冲击响应FIR滤波器的设计
有限冲击响应FIR滤波器的设计
一、设计目的
1使学生加深对DSP芯片TMS320C55x的结构、工作原理的理解;
2了解FIR的原理和特性;
3熟悉设计FIR数字滤波器的原理和方法;
4学习FIR滤波器的DSP实现原理;
5学习使用ccs的波形观察窗口观察输入、输出信号波形和频谱变化情况。
二、设计原理
滤波器就是在时间域或频域内,对已知激励产生规定响应的网络,使其能够从信号中提取有用的信号,抑制并衰减不需要的信号,滤波器的设计实质上就是对提出的要求给出相应的性能指标,再通过计算,使物理可实现的实际滤波器响应特性逼近给出的频率响应特性。
FIR数字滤波器是一种非递归系统,其传递函数为:
=
由此可得到系统的差分方程为:
则,FIR滤波器的结构如下图:
其冲激响应
是有限长序列,它滤波器系数向量
N为FIR滤波器的阶数。
在数字信号处理应用中往往需要设计线性相位的滤波器,FIR滤波器在保证幅度特性满足技术要求的同时,很容易做到严格的线性相位特性为了使滤波器满足线性相位条件,要求其单位脉冲响应
为实序列,且满足偶对称或奇对称条件,即
或
.这样,当N为偶数时,偶对称线性相位FIR滤波器的差分方程表达为
由上可见,FIR滤波器不断地对输入样本
延时后,再做乘法累加运算,将滤波器结果
输出。
因此,FIR实际上是一种乘法累加运算。
而对于线性相位FIR滤波器系数的对称特性,可以采用结构精简的FIR结构将乘法器数目减少一半。
应用MATLAB设计FIR滤波器的主要任务就是根据给定的性能指标设计一个
,使其逼近这一指标,进而计算并确定滤波器的系数
,再将所设计滤波器的幅频响应、相频响应曲线作为输出,与设计要求进行比较,对设计的滤波器进行优化,设计完成之后将得到的FIR滤波器的单位冲激响应序列
的各个参数值。
三、总体方案设计
1启动CCS,在CCS中建立一个汇编源文件、建立一个C源文件和一个命令文件,并将这三个文件添加到工程,再编译并装载程序
2设置波形时域观察窗口,得到其滤波前后波形变化图;
3设置频域观察窗口,得到其滤波前后频谱变化图。
四、源程序
1、新建工程文件
打开SetupCCS选择c55芯片,打开CCS软件,选择project/new,命名为myproject。
2、添加文件到工程
(1)建立文件选择file/new,汇编源程序,如下:
.global_fir,_init,_B,_outdata
_fir
bsetfrct
amov#_B,xdp
mov#_B,cdp
movt0,ac0
sub#1,ac0
movac0,mmap(csr)
addac0,ar0
mov#0,ac0
rptcsr
macmz*ar0-,*cdp+,ac0
movhi(ac0),t0
ret
_init
movmmap(t0),ac0
sub#1,ac0
movac0,ar7
rptzac0,ar7
movac0,*ar0+
ret
_outdata
movt1,ac0
sub#2,ac0
movac0,mmap(csr)
addac0,ar0
rptcsr
delay*ar0-
mar*ar0+
movt0,*ar0
ret
c文件
#include"s.h"
#include"math.h"
#definesignal_1_f200
#definesignal_2_f620
#definesignal_sample_f2000
#definepi3.1415926
#definecoff_L23
#definebufer_L256
intdata_in[bufer_L];
intout[bufer_L];
intfirout;
intx[coff_L+1];
intk=0;
intbufer=bufer_L;
externintfir(int*,int);
externintinit(int*,int);
externintoutdata(int*,int,int);
voidinputwave();
voidmain()
{
inputwave();
init(x,BL);
while
(1)
{
x[0]=data_in[k];
firout=fir(x,BL);
outdata(out,firout,bufer);
k++;
if(k>=bufer_L)
{
k=0;
}
}
}
voidinputwave()
{
floatwt1;
floatwt2;
inti;
for(i=0;i<=bufer_L;i++)
{
wt1=2*pi*i*signal_1_f;
wt1=wt1/signal_sample_f;
wt2=2*pi*i*signal_2_f;
wt2=wt2/signal_sample_f;
data_in[i]=(cos(wt1)+cos(wt2))/2*32768;
}
}
S.h文件
intBL=23;
intB[23]={-417,342,1961,1692,-762,-1003,1676,1115,-3200,-1159,10335,17562,10335,-1159,-3200,1115,1676,-1003,-762,1692,1961,342,-417};
(2)保存文件
(3)添加文件右键点击建立的工程,选择Addfiletoproject,在选中建立的文件。
3、汇编源程序的链接命令文件:
-stack0x500
-sysstack0x500
-heap0x1000
-c
-u_Reset
-lrts55.lib
MEMORY
{
PAGE0:
RAM(RWIX):
origin=0x000100,length=0x01ff00
ROM(RIX):
origin=0x020100,length=0x01ff00
VECS(RIX):
origin=0xffff00,length=0x000200
PAGE2:
IOPORT(RWI):
origin=0x000000,length=0x020000
}
SECTIONS
{
.text>ROMPAGE0
.data>ROMPAGE0
.bss>RAMPAGE0
.const>RAMPAGE0
.sysmem>RAMPAGE0
.stack>RAMPAGE0
.sysstack>RAMPAGE0
.switch>RAMPAGE0
.cinit>RAMPAGE0
.pinit>RAMPAGE0
.vectors>VECSPAGE0
.ioport>IOPORTPAGE2
}
4、加载可执行文件
选择工程,点击file/loadprogram,选择.out文件
5、运行执行.out文件
6、设置波形时域/频域观察窗口,得到其滤波前后波形变化图;
五、实验结果及分析
Acquisitionbuffersize:
256
Displaydatasize:
250
DSPdatatype:
16-bitssignedinteger
时域输入输出波形:
由时域图可得:
滤波前的时域图是带很多毛刺不规则的正弦波,而滤波后的波形是平滑的等幅正弦波且波形振幅相对滤波前的最大振幅有所减小。
频域输入输出波形:
由频域图可得:
滤波前的频域图会出现两个带尖峰的图像,而滤波后的波形只会出现一个带尖峰图像,而且是出现在低频部分,说明信号经过滤波器后,将信号中的高频成分滤除掉了。
六、设计总结
通过这次基于DSP的数字滤波器设计,我初步学会了应用CCS进行DSP设计的实践操作。
熟悉了DSP集成开发环境(CCS),掌握了FIR数字滤波器原理和方法。
通过对系统的调试,对线性相位FIR数字滤波器特性及不同阶数对滤波器特性的影响进行了研究。
通过观察时域和频域图,对FIR数字滤波器特性进行了验证,在应用DSP对数字滤波器实现的过程中,体会到了DSP在数字滤波实现中的优缺点。
用DSP实现FIR数字滤波,具有稳定性好、准确度高、灵活性好、不受环境影响等优点。
在这次的课程设计中学会了如何和老师、同学一起交流、探讨问题,在学习的过程中同时培养了和同学之间的合作能力,增进了彼此之间的友谊,感谢在这次设计中给予我帮助的老师还有各位同学。