您的当前位置:首页正文

太原理工大学DSP课程设计报告书

2024-09-13 来源:步旅网


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滤波前后时域、频域对比

频域 平滑的等幅正弦波 一个低频带尖峰

因篇幅问题不能全部显示,请点此查看更多更全内容