DSP大作业.docx

上传人:b****6 文档编号:13050318 上传时间:2023-06-10 格式:DOCX 页数:15 大小:539.58KB
下载 相关 举报
DSP大作业.docx_第1页
第1页 / 共15页
DSP大作业.docx_第2页
第2页 / 共15页
DSP大作业.docx_第3页
第3页 / 共15页
DSP大作业.docx_第4页
第4页 / 共15页
DSP大作业.docx_第5页
第5页 / 共15页
DSP大作业.docx_第6页
第6页 / 共15页
DSP大作业.docx_第7页
第7页 / 共15页
DSP大作业.docx_第8页
第8页 / 共15页
DSP大作业.docx_第9页
第9页 / 共15页
DSP大作业.docx_第10页
第10页 / 共15页
DSP大作业.docx_第11页
第11页 / 共15页
DSP大作业.docx_第12页
第12页 / 共15页
DSP大作业.docx_第13页
第13页 / 共15页
DSP大作业.docx_第14页
第14页 / 共15页
DSP大作业.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

DSP大作业.docx

《DSP大作业.docx》由会员分享,可在线阅读,更多相关《DSP大作业.docx(15页珍藏版)》请在冰点文库上搜索。

DSP大作业.docx

DSP大作业

 

DSP大作业

 

学院:

 

专业:

年级:

 

姓名:

学号:

 

任课老师:

王忠*(教授)

 

导师姓名:

 

论文题目:

基于CCS软件下的自适应滤波器算法

 

年月日

摘要

随着DSP技术的高速发展,人们对信号处理的实时性、准确性和灵活性的要求越来越高,DSP技术在信号处理中的地位也越来越重要。

自适应滤波器是一种复杂的算法,设计它是为了在均衡信道,抵消回波,增强谱线,抑制噪声等方面有所应用。

而自适应滤波器的实现主要采用最小均方误差算法完成。

自适应算法通过调整滤波器系数来实现可以更好地跟踪信号的变化,最终实现自适应滤波

关键词:

自适应滤波器;CCS;DSP

 

1引言

这学期通过框架式学习方法,深入学习了DSP课程,非常希望通过所学的知识来做一点东西。

思前想后决定在CCS软件中实现自适应滤波算法。

因为,在许多应用场和中,常常要处理一些无法预知的信号、噪声或时变信号,如果采用具有固定滤波系数的数字滤波器无法实现最优滤波。

在这种情况下,必须设计自适应滤波器,以使得滤波器的动态特性随着信号和噪声的变化而变化,以达到最优滤波效果。

自适应滤波是仅需对当前观察的数据作处理的滤波算法。

它能自动调节本身冲激响应的特性,或者说自动调节数字滤波器的系数,以适应信号变化的特性,从而达到最佳滤波。

由于自适应滤波不需要关于输入信号的先验知识,计算量小,特别适用于实时处理,近年来得到广泛应用,如用于脑电图和心电图测量、噪声抵消、扩频通信及数字电话等。

2自适应滤波器理论知识

2.1自适应滤波器结构

自适应滤波器主要由两部分组成:

系数可调的数字滤波器和用来调节或修正滤波器系数的自适应算法。

图1 自适应滤波器原理框图

在图1中,自适应滤波器有两个输入端:

一个输入端的信号z(n)含有所要提取的信号s(n),被淹没在噪声d(n)中,s(n)、d(n)两者不相关,z(n)=s(n)+d(n)。

另一个输入端信号x(n),它是z(n)的一种度量,并与噪声d(n)有关。

x(n)被数字滤波器所处理得到噪声d(n)的估计值y(n),这样就可以从z(n)中减去y(n),得到所要提取的信号s(n)的估计值e(n),表示为式

(1)。

e(n)=z(n)-y(n)=s(n)+d(n)-y(n)

(1)

显然,自适应滤波器就是一个噪声抵消器。

如果得到对淹没信号的噪声的最佳估计,就能得到所要提取信号的最佳估计。

为了得到噪声的最佳估计y(n),可以经过适当的自适应算法来反馈调整数字滤波器的系数,使得e(n)中的噪声最小。

e(n)有两种作用:

一种是得到信号s(n)的最佳估计;二是用于调整数字滤波器系数的误差信号。

2.2数字滤波器部分

自适应滤波器的结构采用FIR横向滤波器结构,如图2所示。

图2 FIR横向滤波器结构

其中

为自适应滤波器的输入矢量

是权系数矢量,即自适应滤波器的冲击响应;y(n)为自适应滤波器的输出矢量。

T为矩阵转制符,n为时间序列,N为滤波器的阶数。

2.3自适应算法部分

算法思路为:

假设给出了和原始信号相关的参考信号d(n),那么首先对FIR滤波器的权任意设定一组初始值;输入信号时x(n),然后根据滤波器的输出值y(n)与参考信号d(n)之间的误差e(n)对权值进行调节,使下一次的输出误差能有所减少;这样重复下去,直到权收敛到最佳值。

如图3

图3自适应算法框图

输入信号矢量为:

  

加权矢量(即滤波器抽头系数矢量)为:

相应的滤波器的输出为:

y(n)相对于期望信号d(n)的误差为:

根据最小均方误差(MSE)准则,最佳的滤波器参量Wopt应使得性能函数—均方误差

为最小。

于是可得:

其中,μ为收敛因子,控制收敛速度和稳定性。

显然,上面的LMS算法不需要事先已知信号的统计量,而使用它们的瞬时估计代替。

LMS算法获得的权重只是一个估计值,但随着调节权重,这些估计值逐渐提高,滤波器也越来越适应信号特性。

最终,权重值收敛。

收敛条件为:

0<μ<1/λmax其中,λmax是输入数据方差矩阵的最大特征值。

在实际应用中,w(n)不会达到理论的最优点(维纳解),但会在其周围波动。

自适应步长μ是表征迭代快慢的物理量,μ越大,自适应时间越短,自适应过程越快,但引起的失调也越大,当μ大于1/λmax时,系统发散;μ越小,系统越稳定,失调越小,但自适应过程也相应加长。

3在CCS中实现自适应滤波器算法

设计的自适应滤波器,采用16阶FIR滤波器,采用相同的信号作为参考信号d(n)和输入信号x(n),并采用上一时刻的误差值来修正本时刻的滤波器系数,2μ取值0.0005或0.0003,对滤波器输出除128进行幅度限制。

3.1工程建立

1首先双击

,打开CCS5.5,然后选择workspace,如图4,

图4

2创建工程将工程名设置为”FIRLMS”,如图5,图6所示,

图5

图6

3将CCS设置位软件仿真如图7

图7

4在工程里添加.cmd文件,源文件,头文件,库文件,配置文件。

并编写主函数FIRLMS.C文件,然后添加在工程中,如图8,

图8

3.2算法设计与实现

1在主函数中编写自适应滤波算法,算法的思想如下:

更新滤波器系数,其中N为滤波器的阶数。

2FIRLMS.C文件中的主函数内容如下:

#include"DSP2833x_Device.h"//DSP2833xHeaderfileIncludeFile

#include"DSP2833x_Examples.h"//DSP2833xExamplesIncludeFile

#include"f28335a.h"

#include"math.h"

#definePI3.1415926

#defineCOEFFNUMBER16//阶数

#defineINPUTNUMBER1024//采样点数

intFIRLMS(int*nx,float*nh,intnError,intnCoeffNumber);

floath[COEFFNUMBER];//FIR横向滤波器的权系数

floatfU;//fU/2是自适应步长

intxx[INPUTNUMBER];//采用相同的信号作为参考信号和输入信号

intrr[INPUTNUMBER];//自适应滤波电路的输出信号

intwc[INPUTNUMBER];//输出信号与参考信号的之间的误差信号。

main()

{

inti,nLastOutput;

nLastOutput=0;

fU=0.0003;//自适应步长是0.00015

//fU=0.0005;//自适应步长是0.00025

//fU=0.0008;//自适应步长是0.0004

for(i=0;i

for(i=0;i

{

xx[i]=256*sin(i*2*PI/34);//对正弦波进行采样

rr[i]=wc[i]=0;//初始化为0

}

for(i=COEFFNUMBER+1;i

{

nLastOutput=FIRLMS(xx+i,h,nLastOutput-xx[i-1],COEFFNUMBER);//breakpoint

rr[i]=nLastOutput;

wc[i]=rr[i]-xx[i];

}

exit(0);

}

//nx输入信号;nh冲激响应;error误差;ncorenumber数据缓冲区长度

intFIRLMS(int*nx,float*nh,intnError,intnCoeffNumber)

{

inti,r;

floatfWork;

r=0;

for(i=0;i

{

fWork=nx[i]*nError*fU;

nh[i]+=fWork;

r+=(nx[i-i]*nh[i]);

}

r/=128;

returnr;

}

3.3结果分析

运行程序:

点击Dubug,

,之后,在调试窗口中进行下面步骤:

步骤1:

新建一个SingleTime0,(输入波形)如图9

图9

步骤2:

再建一个SingleTime1(输出信号),如图10

图10

步骤3:

建第三个SingleTime2(误差信号),如图11

图11

步骤4:

运行程序并观察波形

输入波形:

情况一,当自适应步长fU=0.00025时:

输出波形:

误差幅度:

 

情况二,当自适应步长fU=0.00015时:

输出信号是:

误差幅度:

 

情况三,当自适应步长fU=0.0004时:

输出信号是:

误差幅度:

由仿真结果可以看出:

1)输出波形SingleTime1在自适应滤波器的调整中逐渐与输入波形SingleTime0相重合,误差SingleTime2逐渐减小到0值附近。

2)自适应步长μ对系统的自适应时间和系统的失调有影响。

μ越大,自适应时间越短,自适应过程越快,但引起的失调也越大;μ越小,系统越稳定,失调越小,但自适应过程也相应加长。

在实验中当μ≥0.0004时系统发散。

因此自适应步长μ的选择应从整个系统的要求出发,在满足精度的前提下,尽量减少自适应时间,并且在满足系统性能要求的前提下,尽量减少滤波器的阶数。

在本实验中μ=0.00015,μ=0.00025均能满足系统性能指标,但是当μ=0.00025时系统引起的失调比μ=0.00015较大。

综合考虑以上两个因素,本次试验自适应滤波器步长的选取为μ=0.00015较合适。

 

4结束语

通过一个学期的学习,对于DSP原理及应用这门课有了更深刻的理解。

DSP是一门软件与硬件紧密结合的课程。

如果要学好DSP,我们不仅需要掌握DSP芯片的内部结构,存储空间分配,时钟系统,存储器与通用I/0口,中断与复位,片内外设模块;同时也需要熟练软件开发环境,汇编指令,伪/宏指令,目标文件链接,算法编程等。

在这次大作业中,我将大部分时间花费到CCS5.5软件的使用和自适应滤波器算法的编程中。

首先我查阅关于自适应滤波算法的文献,弄清楚该算法的数学思想,同时寻找采用C语言编写该算法的思路。

有了思路之后,就开始建立工程,然后在主函数中进行算法实现。

在编写程序的过程中,编译之后出现了很多错误,始终编译通不过,经过不断的思考与调试代码,将出现的错误一一攻克。

实验的滤波结果达到了预期的性能指标要求。

在完成这次大作业的过程中,遇到了很多想象不到的难题,如参数的设置,如何将数学思想通过代码实现等问题。

正是因为这些难题的存在,才让我在克服这些难题的过程中进步很多。

同时真诚得感谢王忠勇老师带我们走入DSP的世界里,让我们感受到这门学科的乐趣与魔力!

 

5参考文献

[1] 王忠勇,陈恩庆.DSP原理与应用技术.北京:

电子工业出版社

[2] 王永杰.用DSP快速实现自适应滤波器算法[J].现代电子技术,2007,3:

74-78.

[3] 朱 芳.用Matlab设计自适应低通滤波器[J].吉林水利学报,2002,5(5):

35-38.

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

当前位置:首页 > 人文社科 > 法律资料

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

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