基于dsp芯片的自适应滤波器实现本科论文Word文档格式.docx
- 文档编号:19716687
- 上传时间:2023-01-09
- 格式:DOCX
- 页数:15
- 大小:121.27KB
基于dsp芯片的自适应滤波器实现本科论文Word文档格式.docx
《基于dsp芯片的自适应滤波器实现本科论文Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于dsp芯片的自适应滤波器实现本科论文Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
3.3自适应滤波器DSP设计实现4
4实验过程6
4.1CCS程序运行后的各种输出结果6
4.2DSP实现结果7
5结论与体会9
1课程设计的目的和要求
对自适应滤波算法的研究是当今自适应信号处理中最为活跃的研究课题之一。
Windrow等于1967年提出的自适应滤波系统的参数能自动的调整而达到最优状况,而且在设计时,只需要很少的或根本不需要任何关于信号与噪声的先验统计知识。
自适应滤波器本身有一个重要的自适应算法,这个算法可以根据输入、输出及原参量信号按照一定准则修改滤波参量,以使它本身能有效的跟踪外部环境的变化。
因此,自适应数字系统具有很强的自学习、自跟踪能力和算法的简单易实现性。
自适应滤波技术的核心问题是自适应算法的性能问题,提出的自适应算法主要有最小均方(LMS)算法、递归最小二乘(RLS)算法及相应的改进算法如:
归一化(NLMS)算法、变步长(SVSLMS)算法、递归最小二乘方格形(RLSL)算法等。
这些算法各有特点,适用于不同的场合。
比如用于系统辨识、回波消除、自适应谱线增强、自适应信道均衡、语音线性预测、自适应天线阵等诸多领域。
自适应滤波,对发展通信业务有着不可或缺的作用。
所以是我们通信专业学习的重点。
也是巩固《数字信号处理》知识的一个重要的实验。
2主要内容和步骤
自适应滤波器主要由两部分组成:
系数可调的数字滤波器和用来调节或修正滤波器系数的自适应算法。
下图为自适应滤波器原理框图:
图中,自适应滤波器有两个输入端:
一个输入端的信号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),表示为:
e(n)=z(n)-y(n)=s(n)+d(n)-y(n)。
显然,自适应滤波器就是一个噪声抵消器。
如果得到对淹没信号的噪声的最佳估计,就能得到所要提取的信号的最佳估计。
为了得到噪声的最佳估计y(n),可以经过适当的自适应算法,例如用LMS(最小均方)算法来反馈调整数字滤波器的系数,使得e(n)中的噪声最小。
e(n)有两种作用:
一是得到信号s(n)的最佳估计;
二是用于调整滤波器系数的误差信号。
自适应滤波器中,数字滤波器的滤波系数是可调的,多数采用FIR型数字滤波器,设其单位脉冲响应为h(0),h
(1),…,h(N-1),你们它在时刻n的输出便可写成如下的卷积形式
y(n)=∑h(k)x(n-k)(2-1)
为方便起见,上式中的各h(k)亦被称为权值。
根据要求,输出y(n)和目标号d(n)之间
应满足最小均方误差条件,即
E[e2(n)]=E{[d(n)-y(n)]2}(2-2)
有最小值,其中e(n)表示误差。
令
аE[e2(n)]/аh(k)=0(2-3)
并把式(2—2)代入,便得正交条件:
E[e(n)x(n-k)]=0,0≤k≤N-1(2-4)
如果令
h=hT(0,1,2,...,N-1),x(n)=xT(n,n-1,...,n-N-1)
那么式(2-1)便可被写成
y(n)=xT(n)h=hTx(n)(2-5)
而由式(2-4)给出的正交条件则变为:
E{[d(n)-y(n)]x(n)}=0
把式(2-5)代入上式后,有
E[d(n)x(n)]=E[x(n)xT(n)]h(2-6)
如果令:
r=E[d(n)x(n)],Фxx=E[x(n)xT(n)],那么最佳权向量
h*=Фxx-1r(2-7)
3详细设计过程
3.1LMS自适应算法
自适应算法是根据某种判断来设计的。
通常有两种判据条件:
最小均方误差判据和最小二乘法判据。
LMS算法是以最小均方误差为判据的最典型的算法,也是应用最广泛的一种算法。
LMS算法的目标是通过调整系数,使输出误差序列
的均方值最小化,并且根据这个判据来修改权系数,该算法因此而得名。
误差序列的均方值又叫“均方误差”(MeanSqluareError,MSE)。
理想信号
与滤波器输出
之差
的期望值最小,并且根据这个判据来修改权系数
。
由此产生的算法称为LMS。
3.2FIR滤波器设计
设h(n),n=0,i.2…N-l为滤波器的冲激响应,输人信号为x(n),则FIR滤波器就是要实现下列差分方程:
(3-1)
式中,y(n)为输出信号,即经过滤波之后的信号;
N为滤波器阶数。
FIR滤波器的最主要特点是没有反馈回路,因此是无条件稳定系统,其单位脉冲响应h(n)是一个有限长序列。
由式
(1)可见,FIR滤波算法实际上是一种乘法累加运算。
不断地输入样本x(n),经延时(z-1)做乘法累加,再输出滤波结果Y(n)对式
(1)进行z变换.整理后可得FIR滤波器的传递函数为:
(3-2)
FIR滤波器的一般结构如图3-4所示。
其中,X(n)=[x(n),x(n-1),…,x(n-N+1)]为自适应滤波器的输入矢量;
W(n)=[w0
(1),w1(n),…,wn-1(n)]T为系统的权系数矢量;
为时间序列;
N为滤波器的阶数;
T为矩转置符。
由表达式可以看出输出是两矢量的内积。
3.3自适应滤波器DSP设计实现
实验中采用的自适应滤波器采用16阶FIR滤波器,采用相同的信号作为参考d(n)和输入信号x(n),并采用上一时刻的误差值来修正本时刻的滤波器系数,2μ取值0.0005,对滤波器输出除128进行幅度限制。
实验流程图如下:
程序设计的整个实现过程主要分为3个步:
(1)滤波运算前的相关运算单元、寄存器以及变量的初始化;
原始信号xx[i]=256*sin(i*2*PI/34);
(2)根据输入的采样值计算滤波器的输出并求出误差;
这一步是最重要的滤波计算,我们用FIRLMS(int*nx,float*nh,intnError,intnCoeffNumber)这个函数来实现。
其完整代码是
intFIRLMS(int*nx,float*nh,intnError,intnCoeffNumber)
{
inti,r;
floatfWork;
r=0;
for(i=0;
i<
nCoeffNumber;
i++)
{
fWork=nx[i]*nError*fU;
nh[i]+=fWork;
r+=(nx[i-i]*nh[i]);
}
r/=128;
returnr;
}
收敛因子fU=0.0005。
nError是上一次的误差值,fWork是当前的滤波器权系数,输出值r。
这里实现自适应算法中
的公式。
输出值y(n)等于输入值x(n-1)*w(i)的积分。
½
(3)根据LMS算法的迭代公式更新滤波器参数,有新的采样输入后转到第二步循环执行。
把一信号进行采样。
把采样点放在数字中。
这里用到了输入信号数组xx[],输出信号数组rr[],误差数组wc[],以及滤波器权系数h[]。
通过for循环语句进行一个一个样点值滤波计算。
得到想要的结果。
for(i=COEFFNUMBER+1;
INPUTNUMBER;
nLastOutput=FIRLMS(xx+i,h,nLastOutput-xx[i-1],COEFFNUMBER);
rr[i]=nLastOutput;
wc[i]=rr[i]-xx[i];
用FIRLMS函数得到了一个滤波后的样点信号值nLastOutput存放在输出信号数组rr[]中。
for循环一个一个得到滤波过的信号值第INPUTNUMBER=1024个为止。
4实验过程
4.1CCS程序运行后的各种输出结果
1.实验准备
-启动软件仿真模式
-启动CCS
2.打开工程
3.编译并下载程序
4.点击运行按钮
5.打开观察窗口(view->
Graph->
Property....)
设置如下
图4-1设置输入信号XX
图4-2设置输出信号rr
图4-3设置误差wc
7.观察结果
8.退出CCS
4.2DSP实现结果
观察得结果的波形如下:
图4-4输出信号原始波形
图4-5滤波后输出信号的波形
图4-6自适应误差e(n)波形
5结论与体会
本课程设计的重点是自适应FIR滤波器的设计和DSP的实现。
通过本课程设计加深了对DSP原理的理解,初步掌握了DSP芯片的开发应用,为接下来的深入学习打下了坚实的基础。
但是同时还有很多的问题还有待于进一步深入研究,我将在今后的学习工作中,要加强学习,不断进取。
参考文献
[1]吴湘淇,肖熙,郝晓莉.信号系统与信号处理的软硬件实现[M].北京:
电子工业出版社,2002
[2]万建伟,王玲.信号处理仿真技术[M].长沙:
国防科技大学出版社,2008
[3]JohnG.Proakis,DimitrisG.Manolakis.数字信号处理[M].方艳梅,刘永清译.北京:
电子工业出版社,2007
[4]SanjitKMitra.数字信号处理实验指导书[M].孙洪等译.北京:
电子工业出版社,2006
附件源程序清单:
/******************************************************************************
Main()主函数。
******************************************************************************/
/////////////////////////////////////////////////
//ExampleForICETEK-VC5416-EDU//
//CTRVersion:
V4//
//Filename:
FirLms.c//
//Project:
FirLms.pjt//
//Version:
2.00//
//Writeby:
DanielHawk//
//Company:
RealtimedspCo.Ltd.//
////
//AllRightsopened&
noOnus2005.06//
#include"
math.h"
#definePI3.1415926
#defineCOEFFNUMBER16
#defineINPUTNUMBER1024
intFIRLMS(int*nx,float*nh,intnError,intnCoeffNumber);
floath[COEFFNUMBER],fU;
intxx[INPUTNUMBER],rr[INPUTNUMBER],wc[INPUTNUMBER];
main()
inti,nLastOutput;
nLastOutput=0;
fU=0.0005;
COEFFNUMBER;
i++)h[i]=0;
xx[i]=256*sin(i*2*PI/34);
rr[i]=wc[i]=0;
for(i=COEFFNUMBER+1;
//breakpoint
exit(0);
func.h头文件
voidinterrupttint(void);
voidCLK_init(void);
voidSDRAM_init(void);
voidINTR_init(void);
voidTIME_init(void);
voidTMCR_Reset(void);
voidSetDSPPLL(unsignedintuPLL);
scancode.h头文件
#defineSCANCODE_00x70
#defineSCANCODE_10x69
#defineSCANCODE_20x72
#defineSCANCODE_30x7A
#defineSCANCODE_40x6B
#defineSCANCODE_50x73
#defineSCANCODE_60x74
#defineSCANCODE_70x6C
#defineSCANCODE_80x75
#defineSCANCODE_90x7D
#defineSCANCODE_Del0x49
#defineSCANCODE_Enter0x5A
#defineSCANCODE_Plus0x79
#defineSCANCODE_Minus0x7B
#defineSCANCODE_Mult0x7C
#defineSCANCODE_Divid0x4A
#defineSCANCODE_Num0x77
/******************************************************************************
util.h头文件
/*
*Copyright(C)2001,SpectrumDigital,Inc.AllRightsReserved.
*/
#defineDSP_CLKIN20
#defineNULLLOOP_CLK20
typedefstruct{
intfreq;
//DSPoperatingclock
intclkin;
//DSPinputclock
intpllmult;
//PLLmultiplier
intplldiv;
//PLLdivisor
intclksperusec;
//DSPclocksperusec
intnullloopclk;
//DSPclockspernullloop
}DSPCLK;
externDSPCLKdspclk;
//Readandwritefromanaddress
#defineRead(addr)addr
#defineWrite(addr,data)addr=data
//Setorclearallbitsinthemask
#defineClearMask(addr,mask)addr=(addr&
~(mask))
#defineSetMask(addr,mask)addr=(addr|(mask))
//Readandwritedataataddr,onlybitsinmaskareaffected
#defineReadMask(addr,mask)(addr&
(mask))
#defineWriteMask(addr,data,mask)addr=(addr&
~(mask))|(data)
//Readandwritedataataddr,shiftdatasothatbit0ofdataisaligned
//withlowestsetbitinmask.Onlybitsinmaskaremodified.Example
//withaddress0x1000initialcontents=0x4007:
//WriteField(0x1000,0x56,0x0ff0)willsetaddress0x1000to0x4567.
#defineReadField(addr,mask)((addr&
(mask))>
>
firstbit(mask))
#defineWriteField(addr,data,mask)addr=(addr&
~(mask))|(data<
<
firstbit(mask))
externintfirstbit(unsignedshortmask);
/*****************************************************************************/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 dsp 芯片 自适应 滤波器 实现 本科 论文