1902
5Z 课程名称:实验名称:实验地点:专业班级:学 号:—
学生姓名:指导教师:
%紅》犬寿 TAIYUAN UNIVERSITY OF TECHNOLOGY
本科课程设计报告
DSP 原理及应用 ___________
FIR
滤波器的DSP实现
_______________ 起点机房 _____________
_
FIR滤波器的DSP实现
一、设计目的
1 了解FIR滤波器的原理和特性
2. 熟悉设计FIR数字滤波器的原理和方法 3. 学习FIR滤波器的DSP的实现过程。 5.学习使用CCS软件。
二、设计内容
1 通过MATLAB^设计一个低通滤波器,并对它进行模拟仿真,确定 器系数
2. 用DSP汇编语言及C语言进行编程,实现FIR运算,对产生的合成信号滤除 信号中高频成分,观察滤波前后波形的变化。
FIR滤波
二、设计原理
数字滤波器是将输入的信号序列,按规定的算法进行处理,从而得到所期 望的输出序列。一个线性位移不变系统的输出序列 关系,应满足差分方程为:
N 1
y(n)和输入序列x(n)之间的
y n h i x n i
I 0
对其进行z变换,可得到FIR滤波器的传递函数为:
Y z
,作
=XI
FIR滤波算法实际上是一种乘法累加运算。它不断输入样本,经延时
乘法累加,再输出滤波结果y (n)
FIR滤波器的结构如图1:
图1: FIR滤波器的结构图
可以看出,在数字滤波器中FIR滤波器有以下几个特点: (1) 系统的单位冲激响应h (n)在有限个n值处不为零;
(2) 系统函数H (z)在|z|>0处收敛,在|z|>0处只有零点,有限z平面只有 零点,而全部极点都在z=0处;
(3) 结构主要是非递归结构,没有输出到输入的反馈。
在DSP芯片中,实现z-1算法很方便,可采用循环缓冲区法,其特点如下:
(1) 对于N级FIR滤波器,在数据存储器中开辟一个 N单元的缓冲区(窗),用 来放最新的N个输入样本; (2) 从最新样本开始取数;
(3) 读完最后一个样本后,输入最新样本来代替最老样本,而其他数据位置不 变;
(4) 用片内循环缓冲区长度寄存器对缓冲区进行间接寻址,是循环缓冲区地址 首位相邻。
使用CCS开发应用程序的一般步骤 (1) 打开或创建一个工程项目文件 (2) 编辑各类文件 (3) 对工程项目进行编译
(4) 对结果和数据进行分析和算法评估利用 CCS集成开发软件,用户可以在一个
开发环境下完成工程项目创建、程序编辑、编译、链接、调试和数据分析等工作 环节
四、设计方案
1、 利用MATLAB^确定FIR滤波器的参数;
具体方法为:利用fir2函数产生滤波系数:b=fir2(n-1,f,m), 的阶数;f为频率参数,m表示低通
2、 启动CCS在CCSt建立一个C源文件和一个命令文件,并将这两个文件添 加到工程,再编译并装载程序;
3、 设置波形时域观察窗口,得到滤波前后的波形变化图; 4、 设置频域观察窗口,得到滤波前后的频谱变化图。 4设计参数:
设计一个低通滤波器,其设计参数为:滤波器阶数40,截止频率wp=0.4 n,ws=0.45
参数n为滤波器
n。
五、设计程序 1、MATLA程序
» f-[0 , 0.4,0.45, 1J ;
» n=[l, 1,0, 0];
» b=f 112(39, f, *)
b =
Colmms 1 through 8
0. 0001
-0.0005
-0.0014
0. DCOO
0.0028
0.0018
-0.0043
-0.OOfll
-0.0176
9 thi:ouch ; LG
0, 0039 0.0131 0.0014
-0. 0210
-D.0161
0.0253
〔i. 0404
Columns 17 through 24 -0. 0834 -0,0227 D” 1902
0. 3925
0.3925
0. 1902
-0.0227
-0.0834
CaluuniLS 25 thro口gh 32
-0.0170 0.0404 0,0253 C alums 33 through 40
-0. 0161
-0.0210
0. 0014
0.0131
0.0039 0.0007
-0* 0061 -0.0043
0, 0018 0. 0028 0.0000 -0, 0DJ4 -0, 0005
2、C源文件
#i nclude \"s.h\" #in clude \"math.h\"
#define signal_1_f 200 #define signal_2_f 620 #define signal_sample_f 2000 #define pi 3.1415926 #define coff_L 23 #define bufer_L 256 int data_in[bufer_L]; int out[bufer_L] ; int firout; int x[coff_L+1]; int k=0;
int bufer=bufer_L; extern int fir(int *,int); extern int init(int *,int); extern int outdata(int *,int,int); void inputwave(); void main()
{
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;
} } }
void inputwave()
{
float wt1;
float wt2;
int i; 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;
} }
3、汇编源文件
.global _fir,_init,_B,_outdata _fir bset frct amov #_B,xdp mov #_B,cdp mov t0,ac0 sub #1,ac0 mov ac0,mmap(csr) add ac0,ar0 mov #0,ac0 rpt csr
macmz *ar0-,*cdp+,ac0 mov hi(ac0),t0 ret _init
mov mmap(t0),ac0 sub #1,ac0 mov ac0,ar7 rptz ac0,ar7 mov ac0,*ar0+ ret _outdata mov t1,ac0
sub #2,ac0 mov ac0,mmap(csr) add ac0,ar0 rpt csr delay *ar0- mar *ar0+ mov t0,*ar0 ret
4、命令文件 -stack 0x500
-sysstack 0x500 -heap 0x1000 -c -u _Reset -l rts55.lib MEMORY { PAGE 0:
RAM(RWIX): origin=0x000100, length=0x01ff00 ROM(RIX): origin=0x020100, length=0x01ff00 VECS(RIX): origin=0xffff00, length=0x000200 PAGE 2:
IOPORT(RWI):origin=0x000000, length=0x020000 }
SECTIONS {
.text >ROM PAGE 0 .data >ROM PAGE 0 .bss >RAM PAGE 0 .const >RAM PAGE 0 .sysmem >RAM PAGE 0 .stack >RAM PAGE 0 .sysstack >RAM PAGE 0 .switch >RAM PAGE 0 .cinit >RAM PAGE 0 .pinit >RAM PAGE 0 .vectors >VECS PAGE 0 .ioport >IOPORT PAGE 2 }
六、结果分析 (1)滤波前
图2:输入时域波形
图3:输入频域波形
(2)滤波后
图4:输出时域波形
图5::输出频域波形
由以上内容可以看出,时域图中,滤波前波形有很多毛刺,滤波 后,是平滑的等幅正弦波,而且滤波后最大振幅有所减小。频域图中, 滤波前有两个带尖峰的图像,滤波后只有一个带尖峰图像,而且是出 现在低频部分,说明信号经过低通滤波器后,将信号中的高频成分滤 除掉了。滤波前后时域、频域特性对比总结如下:
时域 滤波前 滤波后 波形有较多毛刺 两个带尖峰 表1滤波前后时域、频域对比
频域 平滑的等幅正弦波 一个低频带尖峰
因篇幅问题不能全部显示,请点此查看更多更全内容