太原理工大学DSP课程设计

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本科课程设计报告

课程名称:DSP原理及应用实验名称:FIR滤波器的DSP实现实验地点:起点机房

专业班级:

学号:

学生:

指导教师:

FIR 滤波器的DSP 实现

一、设计目的

1 了解FIR 滤波器的原理和特性

2. 熟悉设计FIR 数字滤波器的原理和方法

3. 学习FIR 滤波器的DSP 的实现过程。 5. 学习使用CCS 软件。

二、设计容

1

通过MATLAB 来设计一个低通滤波器,并对它进行模拟仿真,确定FIR 滤

波器系数

2. 用DSP 汇编语言及C 语言进行编程,实现FIR 运算,对产生的合成信号滤除信号中高频成分,观察滤波前后波形的变化。

三、设计原理

数字滤波器是将输入的信号序列,按规定的算法进行处理,从而得到所期望的输出序列。一个线性位移不变系统的输出序列y(n)和输入序列x(n)之间的关系,应满足差分方程为:

()()()∑-=-=1

N I i n x i h n y

对其进行z 变换,可得到FIR 滤波器的传递函数为:

()Z H=

()

()

()

∑-

=

-

=

1

N

n

n

z

n

b

z

X

z

Y

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),参数n为滤波器的阶数;f为频率参数,m表示低通

2、启动CCS,在CCS中建立一个C源文件和一个命令文件,并将这两个文件添加到工程,再编译并装载程序;

3、设置波形时域观察窗口,得到滤波前后的波形变化图;

4、设置频域观察窗口,得到滤波前后的频谱变化图。

4设计参数:

设计一个低通滤波器,其设计参数为:滤波器阶数40,截止频率w p=0.4π,w s=0.45π。

五、设计程序

1、MATLAB程序

2、C源文件

#include "s.h"

#include "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

相关文档
最新文档