五邑大学 DSP 基于DSPLib的滤波器程序设计

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

五邑大学实验报告实验课程名称:DSP原理及应用

院系名称:信息工程学院

专业名称:电子信息工程

实验项目名称:基于DSPLib的滤波器程序设计班级:学号:

报告人:

基于DSPLib 的滤波器程序设计实验

一、 实验目的

1、了解FIR 、IIR 数字滤波器的原理。

2、掌握FIR 、IIR 数字滤波器的设计方法。

3、熟悉对DSPLib 的调用方法以及数字滤波器在DSP 系统中的实现。

二 、实验内容(要求)

实验内容:现有连续时间信号[]()2000cos(21000)2cos(22000)x t t t ππ=⋅⋅+⋅⋅,已基于采样频率16000s f Hz =对()x t 采样,获得离散数据()x n 。设计一个FIR (或IIR )数字低通滤波器,对数据()x n 滤波,滤除()x n 中2000Hz 频率分量,保留1000Hz 频率分量。 实验要求:

1、设计FIR (或IIR )数字低通滤波器,得到滤波器的有关参数;

2、基于DSPLib 编制DSP 的C 语言程序,实现上述低通滤波,并对数据()x n 滤波。

3、利用CCS 中VIEW 菜单中的Graph 调试工具观察信号时域波形及其频谱。

三 、实验原理(背景知识)

1、FIR 、IIR 数字滤波器的基本原理。

IIR 滤波器传递函数包括零点和极点两组可调因素,对极点的惟一限制是在单位圆内。因此可用较低的阶数获得高的选择性,所用的存储单元少,计算量小,效率高。但是这个高效率是以相位的非线性为代价的。选择性越好,则相位非线性越严重。FIR 滤波器传递函数的极点固定在原点,是不能动的,它只能靠改变零点位置来改变它的性能。所以要达到高的选择性,必须用较高的阶数;对于同样的滤波器设计指标,FIR 滤波器所要求的阶数可能比IIR 滤波器高5-10倍,结果,成本较高,信号延时也较大;如果按线性相位要求来说,则IIR 滤波器就必须加全通网络进行相位校正,同样要大大增加滤波器的阶数和复杂性。而FIR 滤波器却可以得到严格的线性相位

2、MA TLAB 的数字滤波器设计工具FDAtool 。 2.1 启动滤波器设计分析器

在MA TLAB 的start 菜单中选择Toolboxes->Filter Design->Filter Design & Analysis Tools(fdatool),或者在命令行中输入fdatool 来启动滤波器设计分析器。启动后界面如图1所示:

图1 FDAtool设计界面

2.2 滤波器设计

在选项中选择或输入滤波器参数,然后点击“Design Filter”按钮完成滤波器设计。设计成功后的结果如图2所示。

图2 滤波器设计

2.3 导出FIR滤波器系数。

在fdatool中,选择Targets->Code Composer Studio IDE。

在出现的对话框中选择输出文件类型为C.header file,输出系数类型为signed 16-bit integer,如图2所示。

点击OK按钮,选择路径,即可输出前一步设计出的FIR滤波器系数表。

图2 导出FIR滤波器系数

3、DSPLib的应用

CCS提供DSPLib,其中包含了基本的数学计算和数字信号处理常用算法模块的函数,可直接调用这些函数实现一些数字信号处理算法。本实验主要使用了fir、firs、firs2、iircas4、

iircas5、iircas5I等函数实现数字滤波。

程序框图如下:

四、实验步骤

1、打开CCS,并设置好相对应的参数,采用软件仿真。

2、利用Matlab 产生带通滤波信号用于滤波器测试。在Matlab 中运行后将会生成input.dat 文件。该数据文件中含有1000Hz、2000Hz 两种频率的信号,用于滤波器滤波效果测试

3、编写主函数,包含必要的头文件,并设置好相对应的路径。完毕将支持的库函数加入工程中。编译成功后会在”<工程所以目录>/debug”文件夹下产生*.out 文件,在CCS 软件的File->Load Program 里打开这个.out 文件。

4、将滤波器设计文件载入到内存中。选择File->Data->Load…打开之前Matlab 生成的input.dat 文件;运行程序,查看滤波器滤波效果;打开View->Graph->Time/Frequency便可查看程序是否有逻辑错误。

五、程序源代码

1、主函数:

#include

#include

#include

#include "fdacoefs.h

#define NX 1024

#define NH 201

#define pi 3.1415926

#define PMST (unsigned int*)0x1D

int i,j;

DATA x[NX], h[NH],r[NX], db[NH];

DATA *dbptr=&db[0];

#pragma DATA_SECTION(h,".coeffs")

#pragma DATA_SECTION(db,".dbuffer")

void dataIO(void);

void main(void)

{

*PMST=0x00A0; //IPTR=000000001,MP/MC=0,OVLY=1,DROM=0

dataIO();

for (i=0; i

for(i=0;i

fir(x, h, r, &dbptr, NH, NX);

return;

}

void dataIO()

{

/* do data I/O */

return;

}

2、中断函数:

.ref _c_int00

.sect ".vectors"

相关文档
最新文档