DSP技术与应用课程设计报告.doc

上传人:wj 文档编号:4843446 上传时间:2023-05-07 格式:DOC 页数:13 大小:179.64KB
下载 相关 举报
DSP技术与应用课程设计报告.doc_第1页
第1页 / 共13页
DSP技术与应用课程设计报告.doc_第2页
第2页 / 共13页
DSP技术与应用课程设计报告.doc_第3页
第3页 / 共13页
DSP技术与应用课程设计报告.doc_第4页
第4页 / 共13页
DSP技术与应用课程设计报告.doc_第5页
第5页 / 共13页
DSP技术与应用课程设计报告.doc_第6页
第6页 / 共13页
DSP技术与应用课程设计报告.doc_第7页
第7页 / 共13页
DSP技术与应用课程设计报告.doc_第8页
第8页 / 共13页
DSP技术与应用课程设计报告.doc_第9页
第9页 / 共13页
DSP技术与应用课程设计报告.doc_第10页
第10页 / 共13页
DSP技术与应用课程设计报告.doc_第11页
第11页 / 共13页
DSP技术与应用课程设计报告.doc_第12页
第12页 / 共13页
DSP技术与应用课程设计报告.doc_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

DSP技术与应用课程设计报告.doc

《DSP技术与应用课程设计报告.doc》由会员分享,可在线阅读,更多相关《DSP技术与应用课程设计报告.doc(13页珍藏版)》请在冰点文库上搜索。

DSP技术与应用课程设计报告.doc

DSP技术与应用

课程设计报告

华北水利水电大学

DSP技术及应用

课程设计题目:

基于DSP的FIR数字滤波器设计

学院:

信息工程学院

专业:

电子信息工程

姓名:

学号:

201215523

目录

摘要 3

一、设计要求和设计目的 3

二、FIR滤波器理论研究 3

三、CCS完成的流程示意图 4

四、滤波器源程序:

5

五、通过,ATLAB设定滤波器参数 5

六、生成.dat文件输入数据 6

七、CCS滤波器实现 6

八、扩展语音信号滤波观察 8

九、心得与体会 8

参考文献:

9

摘要

FIR数字滤波器以其良好的线性特性被广泛应用于现代电子通信系统中,是数字信号处理的重要内容之一。

在实际信号处理中,往往要求系统兼具实时性和灵活性。

使用MATLAB实现FIR滤波器,既有很强的实时性,又兼顾了灵活性,为数字信号处理提供了一种很好的解决方案。

论文借助MATLAB工具箱,选择合适的窗函数,设计了两种FIR数字滤波器,给出了实现的设计流程和一般步骤,并对其进行了相关仿真分析,展望数字滤波器设计技术的未来。

关键字:

FIR滤波器,MATLAB,CCS。

正文

一、设计要求和设计目的

1)利用数字信号处理理论设计一个滤波器;

2)利用CCS实现滤波器;

3)通过实际信号作用,验证滤波器是否达到设计目标;

通过CCS集成开发环境,源程序采用C语言或者汇编语言实现一个FFR滤波器,实现FIR运算,结合数字信号处理理论知识,通过MATLAB设计一个低通滤波器的所有参数,生成一个C的头文件.h文件。

并且通过MATLAB产生一个语音信号或者三个频率不相同的正弦信号相叠加,生成一个.dat文件,输入到CCS集成开发环境中,运行程序,观察信号输入和输出的波形图和频谱变换,通过观察数值窗口,得到滤波之后的频率同输入进行比较,得到FIR的滤波性能。

二、FIR滤波器基本理论

(1)FIR滤波器的特点 

数字滤波器的功能,就是把输入序列通过一定的运算变换成输出序列。

它的实现方法有很多,其中比较常用到的是无限长脉冲响应滤波器 IIR和有限长脉冲响应滤波器FIR两种。

 

在计算量相等的情况下,IIR数字滤波器比FIR滤波器的幅频特性优越,频率选择性也好。

但是,它有着致命的缺点,其相位特性不好控制。

它的相

位特性)是使频率产生严重的非线性的原因。

但是在图像处

理、数据传输等波形传递系统中都越来越多的要求信道具有线性的相位特性。

在这方面 FIR滤波器具有它独特的优点,设FIR滤波器单位脉冲响应h(n)长度为N,其系统函数H(z)为 

H(z)是1

-z的(N-1)次多项式,它在z平面上有(N-1)个零点,原点z=0是(N-1)阶重极点。

因此,H(z)永远稳定,它可以在幅度特性随意设计的同时,保证精确、严格的线性相位。

  

(2)FIR滤波器的基本结构  

数字滤波是将输入的信号序列,按规定的算法进行处理,从而得到所期望的输出序列,FIR滤波器的差分方程为:

 

                     

对上式进行Z变换得到FIR滤波器的传递函数为:

 

    

由上式可以看出,H(z)是1-z的N-1次多项式,它在z平面内有N-1个零点,同时在原点处有N-1个重极点。

N阶滤波器通常采用N个延迟单元、N个加法器与N+1个乘法器,取图中(a)、(b)两种结构。

 

 

图 FIR滤波器的一般结构 

因为FIR滤波器的单位抽样响应是有限长的,所以它永远是稳定的。

另外,若对 h(n)提出一些约束条件,那么可以很容易地使 H(z)具有线性相位,这在信号处理的很多领域是非常重要的。

FIR滤波器的设计任务,是要决定一个转移函数H(z),使它的频率响应满足给定的要求。

这里所说的要求,除了通带频率pw、阻带频率及两个带上的最大和最小衰减p¶和s¶外,很重要的一条是保证H(z)具有线性相位。

 

(3)Chebyshev逼近法 

窗函数法和频率采样法设计出的滤波器的频率特性都是在不同意义上对所给理想频率特性()jwdeH的逼近。

由数值逼近理论可知,对某个函数f(x)的逼近一般有以下三种方法:

 插值法(Interpolating Way) 最小平方逼近法(Least Square Approaching Way) 一致逼近法(Consistent Approaching Way)

切比雪夫最佳一致逼近的基本思想是,对于给定区间[a,b]上的连续函数()xf,在所有n次多项式的集合nj中,寻找一个多项式 p(x),使它在[a,b]上对()xf的偏差和其它一切属于nj的多项式 p(x)对f(x)的偏差相比是最小的,即 

切比雪夫逼近理论,这样的多项式是存在的,且是唯一的,并指出了构造这种最佳一致逼近多项式的方法,就是有名的“交错点组定理”。

三、CCS完成的流程示意图

保存结果至输出单元y

输入数据.dat

初始化DSP

读入数据存放至栈顶

滤波处理

结束

滤波样本点数(800)处理完?

图3-1CCS完成滤波示意图

四、滤波器源程序:

13

#include"stdio.h"

#include"f100-500-20000.h"

#defineN101

#defineL800//信号长度

longy; //每次累加器的中间变量

intin[L];//输入信号

intout[L];//输出信号

voidmain()//主函数入口

{

intm,n;

int*x;

for(n=0;n

{

x=&in[n];//指针指向载入样本点地址

y=0;//每次执行完将累加器置成0

for(m=0;m

{

y+=B[m]*(*(x++));

}

out[n]=y;//输出本次累加滤波结果

}

while

(1);

}

输入信号长度定义为800,滤波器阶数为100;滤波即本质上为相乘相加的关系。

端口输入为in,输出为out,参数B[]为数组。

[1]同时需要.cmd文件进行连接[2]。

五、通过,ATLAB设定滤波器参数

在MATLAB上打开示波器设计APP,选择低通滤波器,窗函数,阶数和C源程序设计的相同,设定为100,设定抽样频率为20000HZ,截至频率为600HZ,抽样频率要大于两倍的截止频率即可。

点击生成为C语言的头文件.h文件,生成的头文件包含了示波器的所有参数,并且包含在源程序当中,在CCS开发环境中就不需要添加.h文件了,只需要将.h文件同源程序文件放在一个文件夹下即可;设计的滤波器如图所示:

图5-1滤波器设置界面

六、生成.dat文件输入数据

同样通过MATLAB,产生三个正弦信号数据相叠加,原信号频率为300HZ,第一个高频噪声为3000HZ为正弦信号,第二个高频噪声为8000HZ的正弦信号,抽样频率为20000HZ,满足信号最高频率的两倍以上。

即:

fs>2fh

通过截止频率为600的滤波器,滤除高频噪声,得到300HZ的原信号,抽样点N为1000。

生成的.dat文件如图:

[3]

图6-1生成.dat文件

七、CCS滤波器实现

1.将cmd连接文件,fir.c源文件,.lib库文件添加到工程之中,重新编译,得到。

Out可执行文件,将生成的.out文件加载到项目当中,然后将外界的.dat文件load到CCS中,startaddress为in,长度为0x1fff,选择加载类型为DATA。

之后运行程序,选择view,查看graphics,属性修改如下:

图7-1ccs图形显示属性设置

然后将输入和输出的时序图和频域图都显示如下,滤波之后同滤波之前比较:

图7-2输入输出波形图和频谱图

分析:

输入的为300HZ的正弦信号和两个高频正弦噪声信号,分别是3000HZ和8000HZ,通过一个截止频率为500HZ的低通滤波器,输出为一个频率为300HZ的正弦信号,3000HZ和8000HZ滤除掉了。

频谱输入为3个脉冲,滤波之后输出为一个脉冲。

对于原信号:

signal=sin(2*pi*sl*n*T);sl=300;fs=20000;T=1/fs;时域周期为:

T1=fs/s1=200/3=66.7s 经过滤波之后取点(50,0)和(150,0)可得滤波之后的波形周期:

1.5T2=150-50=100s

得到T2=66.7 T1=T2,可判定滤波器滤波性能理想。

2.打开VIEW的watchwindow,添加in端口,添加out端口,如图7-3所示:

图7-3window输出out端口地址和数据

3.打开memory窗口out端口数据如图7-4所示:

图7-4memory输出out端口地址和数据

八、扩展语音信号滤波观察

重新设计滤波器,通过输入一个语音信号,测的其抽样频率为8192HZ,将MATLAB上也定义抽样频率为8192HZ,截至频率为300,阶数为100,将语音信号加噪声生成.dat文件输入到CCS中,其滤波之后效果如下:

图8-1语音信号滤波输入与输出

九、心得与体会

这次设计FIR滤波器设计,让我对数字信号和DSP技术和应用有了更深的理解,C语言的编程也更加熟悉,而且对MATLAB也有了一定的认识,更重要的是提高了我的学习能力和解决问题的能力。

与其他高级语言的程序设计相比,MATLAB环境下可以更方便、快捷地设计出具有严格线性相位的FIR滤波器,节省大量的编程时间,提高编程效率,且参数的修改也十分方便,还可以进一步进行优化设计。

如何通过软件来实现低通滤波器设计,而之前经常用硬件来实现滤波器的设计,硬件实现的低通滤波器滤波单一,无法改变,硬件设计一旦错了就会无法挽回和经济的浪费,结果又得重新开始浪费时间。

而通过DSP的FIR低通滤波器可以改变设置的参数来改变滤波器的截止频率,使得设计非常的灵活,方便且易于修改。

而MATLAB在编程上更灵活,功能更强大。

在FIR低通滤波器的设计中,还可以通过软件编程和硬件的结合,通过示波器来看到真实的低通滤波器的设计,因为软件还是一个虚拟的东西,最终的成品不仅仅在于软件上,与实际的结合才是真正意义上的设计,通过本次课程设计,使我更加扎实的掌握了有关数字滤波器方面的知识,在这次课程设计中虽然遇到了很多的困难,但是经过一次又一次的查阅资料,一次一次的认真思考,终于找出了原因,通过这次课程设计,了解知识还是需要通过实践才能真正的掌握住精髓。

通过这一周的课程设计,从查找资料,题目选定,到最后的实践成稿。

正在这其中学到了很多的东西。

既巩固了在课堂上学习的知识,也在查找资料的过程中也学到了很多课本上没有学习到的知识,可以说是收获颇丰。

通过这次课程设计将理论与实践相结合,从中提高而来自己独立思考能力和实践动手能力,从而不断超越自己,学会了坚持不懈,坚持到底。

参考文献:

1.乔瑞萍,崔涛,张芳娟.TMS320C54x原理及应用[M].西安:

西安电子科技大学出版社,2005.

2.周金治.基于Matlab与DSP的语音信号FIR滤波[J].兵工自动化,2005

3.陈金鹰,《DSP技术及应用》,机械工业出版社,2004年

4.程佩青,数字信号处理,[M]清华大学出版社,2003

5.王先峰,石东,基于DSP的FIR数字滤波器的设计与实现,天津科技大学电子信息与自动化学院,天津300222

附录:

CCS滤波源程序

#include"stdio.h"

#include"f100-500-20000.h"

#defineN101

#defineL800//信号长度

longy; //每次累加器的中间变量

intin[L];//输入信号

intout[L];//输出信号

voidmain()//主函数入口

{

intm,n;

int*x;

for(n=0;n

{

x=&in[n];//指针指向载入样本点地址

y=0;//每次执行完将累加器置成0

for(m=0;m

{

y+=B[m]*(*(x++));

}

out[n]=y;//输出本次累加滤波结果

}

while

(1);

}

Cmd连接文件

-stack0x2000/*Primarystacksize*/

-sysstack0x1000/*Secondarystacksize*/

-heap0x2000/*Heapareasize*/

-c/*UseClinkingconventions:

auto-initvarsatruntime*/

-u_Reset/*Forceloadofresetinterrupthandler*/

MEMORY

{

PAGE0:

/*----UnifiedProgram/DataAddressSpace----*/

MMR(RWIX):

origin=0x000000,length=0x0000c0/*MMRs*/

DARAM0(RWIX):

origin=0x0000c0,length=0x00ff40/*64Kb-MMRs*/

SARAM0(RWIX):

origin=0x010000,length=0x010000/*64Kb*/

SARAM1(RWIX):

origin=0x020000,length=0x020000/*128Kb*/

SARAM2(RWIX):

origin=0x040000,length=0x010000/*64Kb*/

PDROM(RIX):

origin=0xff8000,length=0x008000/*32Kb*/

PAGE2:

/*--------64K-wordI/OAddressSpace--------*/

IOPORT(RWI):

origin=0x000000,length=0x020000

}

/*SPECIFYTHESECTIONSALLOCATIONINTOMEMORY*/

SECTIONS

{

.text>>SARAM1|SARAM2|SARAM0/*Code*/

/*Bothstacksmustbeonsamephysicalmemorypage*/

.stack>DARAM0/*Primarysystemstack*/

.sysstack>DARAM0/*Secondarysystemstack*/

.bss>>DARAM0|SARAM0|SARAM1/*Global&staticvars*/

.data>>DARAM0|SARAM0|SARAM1/*Initializedvars*/

.const>>DARAM0|SARAM0|SARAM1/*Constantdata*/

.sysmem>>DARAM0|SARAM0|SARAM1/*Dynamicmemory(malloc)*/

.switch>SARAM2/*Switchstatementtables*/

.cinit>SARAM2/*Auto-initializationtables*/

.pinit>SARAM2/*Initializationfntables*/

.cio>SARAM2/*CI/Obuffers*/

vectors:

0xffff00/*Interruptvectors*/

.ioport>IOPORTPAGE2/*Global&staticioportvars*/

}

生成.dat的matlab源程序

sl=300;ns1=3000;ns2=8000;fs=20000;

N=1000;T=1/fs;

n=0:

N;

signal=sin(2*pi*sl*n*T);

noise1=0.7*sin(2*pi*ns1*n*T);

noise2=0.4*sin(2*pi*ns2*n*T);

x=(signal+noise1+noise2);

%归一化:

xout=x/max(x);

xto_css=round(32767*xout);

xoutcss=xto_css;

%通过函数fopen产生一个.dat文件,执行写操作,写入CCS头标识,写入三个正弦信号数据;

fid=fopen('E:

\programfiles\matlab2012b\bin\inputd.dat','w');fprintf(fid,'16511010\n');

fprintf(fid,'%d\n',xoutcss);

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2