资源描述
本科课程设计报告
课程名称: DSP原理及应用
设计项目: FIR滤波器的设计
实验地点: 多学科楼机房
专业班级: 学号:
学生姓名:
指导教师:
2012年1月8日
一、设计目的:
1、掌握数字滤波器的设计过程;
2、了解FIR的原理和特性;
3、熟悉设计FIR数字滤波器的原理和方法;
4、学习FIR滤波器的DSP的实现原理;
5、学习使用CCS的波形观察窗口观察输入/输出信号波形和频谱变化情况。
二、设计内容:
1、通过MATLAB来设计一个低通滤波器,对它进行模拟仿真确定FIR滤波器系数;
2、用DSP汇编语言进行编程,实现FIR运算,对产生的合成信号,滤除信号中高频成分,观察滤波前后波形的变化。
三、设计原理:
FIR数字滤波器是一种非递归系统,其传递函数为:
H(z)=Y(z)/X(z)=∑b(n)z-n
由此可得到系统的差分方程为:y(n)=∑h(i)x(n-i),其冲击响应h(n)是有限长序列,它其实就是滤波器系数向量b(n),N为FIR滤波器的阶数。
为了使滤波器满足线性相位条件,要求其单位脉冲响应h(n)为实序列,且满足偶对称或奇对称条件,即h(n)=h(N-1-n)或h(n)=- h(N-1-n)
这样,当N为偶数时,偶对称线性相位FIR滤波器的差分方程表达式为:y(n)=∑h(i)x(n-i)+x((N-1-n-i)
应用MATLAB设计FIR滤波器的主要任务就是根据给定的性能指标设计一个H(z),使其逼近这一指标,进而计算并确定滤波器的系数b(n),再将所设计滤波器的幅频响应、相频响应曲线作为输出,与设计要求进行比较,对设计的滤波器进行优化,设计完成之后将得到FIR滤波器的单位冲击响应序列h(n)的各个参数值。
matlab用fir1函数设计FIR滤波器:
fir1函数用来设计标准频率响应的基于窗函数的FIR滤波器,可实现加窗线性相位FIR数字滤波器的设计。具体语法如下:
b=fir1(n,Wn)
b=fir1(n,Wn,‘ftype’)
b=fir1(n,Wn,Window)
b=fir1(n,Wn,‘ftype’,Window)
其中n为滤波器的阶数;Wn为滤波器的截止频率; ftype为用来决定滤波器的类型,当ftype=high时,可设计高通滤波器;当ftype=stop时,可设计带阻滤波器。Window为用来指定滤波器采用的窗函数类型,Window参数可采用的窗口函数有: Boxcar,Hanning,Bartlett,Blackman,Kasier和chebwin等,其默认时为Hamming窗,从而得到滤波器的系数。
matlab用fir2函数设计FIR滤波器:
fir2函数用来设计有任意频率响应的各种加窗FIR滤波器。具体语法如下:
b=fir2(n,f,m)
b=fir2(n,f,m,Window)
b=fir2(n,f,m,npt)
b=fir2(n,f,m,npt,Window)
b=fir2(n,f,m,npt,lap)
b=fir2(n,f,m,nptt,lap,Window)
其中n为滤波器的阶数;f为频率点矢量;m为幅度点矢量;Window用来指定所使用的窗函数类型,默认值为汉明(Hamming)窗;npt用来指定fir2函数对频率响应进行内插的点数;lap用来指定fir2函数在重复频率点附近插入的区域大小,从而得到滤波器的系数。
四、主要参数:
滤波器阶数n为40,截止频率为wp=0.35, ws=0.4。
五、总体方案设计:
1、由给定的设计参数确定滤波器的系数:
根据给定的设计参数,滤波器系数可由MATLAB中的fir2函数产生,函数调用格式为:
f =[0 0.35 0.4 1];
m =[1 1 0 0];
b =fir2(39, f, m)
求得的系数为:
b =
Columns 1 through 6
-0.0007 0.003 0.0014 0.0010 -0.0016 -0.0038
Columns 7 through 12
-0.0008 0.0064 0.0081 -0.0030 -0.0169 -0.0118
Columns 13 through 18
0.0162 0.0353 0.0083 -0.0515 -0.0689 0.0247
Columns 19 through 24
0.2051 0.3523 0.3523 0.2051 0.0247 -0.0689
Columns 25 through 30
-0.0515 0.0083 0.0353 0.0162 -0.0118 -0.0169
Columns 31 through 36
-0.0030 0.0081 0.0064 -0.0008 -0.0038 -0.0016
Columns 37 through 40
0.0010 0.0014 0.0003 -0.0007
2、用CCS进行汇编编程,实现FIR滤波器滤波。
六、源程序:
.title "FIR.ASM"
.mmregs
.bss y,1
K_FIR_BFFR .set 40
PA0 .set 0
PA1 .set 1
FIR_COFF .usect "FIR_COFF",40 ;定义数据存储空间
D_DATA_BUFFER .usect "FIR_BFR",40 ;定义数据存储空间
.data
COFF_FIR_START: .word -7*32768/10000,3*32768/10000 ;b0,b1
.word 14*32768/10000,10*32768/10000 ;b2,b3
.word -16*32768/10000,-38*32768/10000 ;b4,b5
.word -8*32768/10000,64*32768/10000 ;b6,b7
.word 81*32768/10000,-30*32768/10000 ;b8,b9
.word -169*32768/10000,-118*32768/10000 ;b10,b11
.word 162*32768/10000,353*32768/10000 ;b12,b13
.word 83*32768/10000,-515*32768/10000 ;b14,b15
.word -689*32768/10000,247*32768/10000 ;b16,b17
.word 2051*32768/10000,3523*32768/10000 ;b18,b19
.word 3523*32768/10000,2051*32768/10000 ;b20,b21
.word 247*32768/10000,-689*32768/10000 ;b22,b23
.word -515*32768/10000,83*32768/10000 ;b24,b25
.word 353*32768/10000,162*32768/10000 ;b26,b27
.word -118*32768/10000,-169*32768/10000 ;b28,b29
.word -30*32768/10000,81*32768/10000 ;b30,b31
.word 64*32768/10000,-8*32768/10000 ;b32,b33
.word -38*32768/10000,-16*32768/10000 ;b34,b35
.word 10*32768/10000,14*32768/10000 ;b36,b37
.word 3*32768/10000,-7*32768/10000 ;b38,b39
.text
.def FIR_INIT
.def FIR_TASK
FIR_INIT: SSBX FRCT ;设置小数乘法
STM #FIR_COFF,AR5 ;AR1指向b0单元
RPT #K_FIR_BFFR-1 ;设置传输次数
MVPD #COFF_FIR_START,*AR5+ ;系数bi传输至数据区
STM #D_DATA_BUFFER,AR4 ;D_DATA_BUFFER缓冲区清0
RPTZ A,#K_FIR_BFFR-1
STL A,*AR4+
STM #(D_DATA_BUFFER+K_FIR_BFFR-1),AR4
STM #(FIR_COFF+K_FIR_BFFR-1),AR5
STM #-1,AR0 ;设置双操作数减量
LD #D_DATA_BUFFER,DP ;设置页指针
PORTR PA1,@D_DATA_BUFFER ;输入x(n)
FIR_TASK: STM #K_FIR_BFFR,BK
RPTZ A,#K_FIR_BFFR-1 ;重复操作
MAC *AR4+0%,*AR5+0%,A ;双操作数乘法-累加
STH A,@y ;暂存y(n)
PORTW @y,PA0 ;输出y(n)
BD FIR_TASK ;循环
PORTR PA1,*AR4+0% ;输入最新样本,并修正AR3
.end
(命令程序)
vectors.obj
fir.obj
-o fir.obj
-m fir.map
-e fir_init
MEMORY
{
PAGE0: EPROM: org=0E000H len=1000H
VECS: org=0FF80H len=0080H
PAGE1: SPRAM: org=0060H len=0020H
DARAM: org=0080H len=1380H
}
SECTIONS
{
.text : > EPROM PAGE 0
.vectors : > VECS PAGE 0
.data : > EPRAM PAGE 1
.bss : > SPRAM PAGE 1
FIR_BFR : align(128){}> DARAM PAGE 1
FIR_COFF : align(128){}> DARAM PAGE 1
}
七、实验结果及分析:
(1) 输入的时域波形
(2)输入的频域波形
滤波后的输出波形:
(1)时域波形
(2)频域波形
八、设计总结:
经过了两天的课程设计,从查阅资料直到设计完成,这之间让我学到了很多东西。一开始对DSP这门课程并不是很理解,但是经过设计之后,感觉对它的理解加深了许多,而且对我所学的知识是一种很好的回顾,也让我对所学知识理解更加透彻。巩固知识的同时,我也掌握了更多一门的软件—CCS,多学会一个软件总是好的,并且以后用到它的地方会很多。
总体而言,课设不仅是对所学知识的回顾,更是对动手实践能力的一种锻炼。希望以后能更多的接触这类设计,多动手,多学习,为毕业以后步入工作岗位打下坚实的基础。
9
展开阅读全文