基于DSP的自适应滤波器设计

目录:

摘要 .................................................................................................................. 2

一.设计目的 .................................................................................................. 3

二.设计原理及程序分析 .............................................................................. 3

2.1数字滤波器的基本概念 ........................................................................................................................ 3

2.2自适应滤波器原理 ................................................................................................................................ 5

2.3自适应滤波算法 . ................................................................................................................................... 6

2.3.1最小均方算法(LMS )算法 . .................................................................................................... 6

2.4 基于DSP 实现自适应滤波器 . ........................................................................................................... 12

2.4.1自适应滤波算法的DSP 实现 . ............................................................................................... 12

三.设计步骤 ................................................................................................ 15

四.设计心得 ................................................................................................ 15

五.参考文献 ................................................................................................ 15

附件源程序清单: ........................................................................................ 16

摘要

在科学技术高速发展的今天,由于在实际应用中,没有充足的信息来设计固定系数的数字滤波器,或者设计规则会在滤波器正常运行时改变,因此自适应滤波器成为统计信号处理的一个重要组成部分。自适应滤波器在需要处理未知统计环境下运算结果所产生的信号或需要处理非平稳信号时,有非常优异的解决方法,而且其性能通常远优于用常方法设计的固定滤波器。此外,自适应滤波器还有非自适应方法所不可能提供的新的信号处理能力。

本文从高速数字信号处理器的特点、自适应滤波器的原理及主要应用领域入手,介绍了自适应滤波器的基本理论思想,具体阐述了自适应滤波器的基本原理、算法及设计方法。本文中,对两种最基本的自适应算法,即最小均方误差(LMS ) 算法和递归最小二乘(RLS ) 算法进行了详细的介绍和分析,并针对两种算法的优缺点进行了详细的比较。最后用DSP 实现了自适应滤波器。实验结果表明,该自适应滤波器滤波效果优越。

关键词:DSP 自适应滤波器 LMS RLS

一.设计目的

我们是电子信息工程专业,数字信号处理在我们今后的学习与应用中扮演着举足轻重的地位,是我们所学知识的重点,所以,对于自适应信号处理知识需要我们去学习与研究。目前,对自适应滤波算法的研究是当今自适应信号处理中最为活跃的研究课题之一。Windrow 等于1967年提出的自适应滤波系统的参数能自动的调整而达到最优状况,而且在设计时,只需要很少的或根本不需要任何关于信号与噪声的先验统计知识。自适应滤波器本身有一个重要的自适应算法,这个算法可以根据输入、输出及原参量信号按照一定准则修改滤波参量,以使它本身能有效的跟踪外部环境的变化。因此,自适应数字系统具有很强的自学习、自跟踪能力和算法的简单易实现性。自适应滤波技术的核心问题是自适应算法的性能问题,提出的自适应算法主要有最小均方(LMS)算法、递归最小二乘(RLS)算法及相应的改进算法如:归一化(NLMS)算法、变步长(SVSLMS)算法、递归最小二乘方格形(RLSL)算法等。这些算法各有特点,适用于不同的场合。所以,对发展通信业务有着不可或缺的作用的自适应滤波,更需要我们去学习与研究,并应用到实际应用中。

二.设计原理及程序分析

2.1数字滤波器的基本概念

从输入信号中滤出噪声和干扰以提取有用信息的过程称为滤波,相应的装置称为滤波器。如果滤波器的输入和输出均为离散信号,称该滤波器为数字滤波器。当滤波器的输出信号为输入端的线性函数时,该滤波器称为线性滤波器,否则就称为非线性滤波器。一个典型的数字滤波器的框图如图2-1所示。

图2-1 数字滤波器

设输入信号为x(n),输出信号为y(n),该数字滤波器可用以下差分方程来表示:

y (n ) =∑a i x (n -i ) -∑b i y (n -i ) (2-1)

i =0i =1M -1N -1

式中a i ,b i 称为滤波器系数。

当b i =0时,上式变为:

y (n )=∑a i x (n -i ) (2-2)

i =0M -1

这种滤波器称为全零点滤波器。

如果a i =0,b i ≠0时,则称为全极点滤波器或递归滤波器。

由上式,可知数字滤波器的传递函数为:

M -1

H (z )=∑a z i

i =0

M

i =1-1 (2-3) 1+∑b i z -i

其单位冲击响应函数为:

h (n )=z -1(H (z )) (2-4)

y (n )=h (n )⊗x (n )=

i =-∞∑h (i )x (n -i ) (2-5) ∞

如果当n

⎧h (n ), 0≤n ≤N h (n )=⎨ (2-6) 0, e l s e ⎩

则称此滤波器为有限冲激响应FIR(FiniteImpulseResponse)滤波器,否则,称之为无限冲激响应IIR(InfiniteImpulseResponse)滤波器。

如果h(n)满足如下条件:

h (n )=0, n

则称此滤波器是因果的,并且是稳定的。

2.2自适应滤波器原理

图2.2 自适应滤波器结构的一般形式

图2.3 自适应滤波器的系统识别框图

的目的使得误差信号e (k)最小。重复上面过程,滤波器在自己的工作过程中逐渐了解到输

入信号和噪声的统计规律,并以此为根据自动调整滤波器权系数,从而达到最佳的滤波效果。一旦输入的统计规律发生了变化,滤波器能够自动跟踪输入信号变化,自动调整滤波器的权系数,最终达到滤波效果,实现自适应过程。图2-3是使用自适应滤波器的系统识别原理图。

自适应滤波器的结构可以采用FIR 或IIR 滤波器存在稳定性问题,因此一般采用FIR 滤波器作为自适应滤波器的结构。自适应FIR 滤波器结构又可分为3种结构类型:横向型结构(Transversal Structure)、对称横向型结构(Symmetric Transversal Structure)以及格型结构(Lattice Struture)。本文采用自适应滤波器设计中最常用的FIR 横向型结构。

2.3自适应滤波算法

2.3.1最小均方算法(LMS )算法

由Widrow 和Hoff 引入的最小均方(LMS)算法,由于其简单性、运算高效性各种运行条件下良好的性能,而被广泛应用。基于梯度的最小均方(LMS)算法是最基本的算法,其含义相对简单明了。选定均方误差为权矢量二次函数时,性能度量曲线可以形象地看成一个碗形曲面这样自适应处理器的任务便是不断地向最低点逼近,即可以通过计算梯度的方法实现性能度量的最优化。而基于梯度的算法中,最简单的一种就是最小均方算法LMS 算法,LMS 算法使用的准则是使均衡器的期望输出值和实际输出值之间的均方误差(MSE)最小化的准则,依据输入信号在迭代过程中估计梯度矢量,并更新权系数以达到最优的自适应迭代算法。这算法不需要计算相应的相关函数,也不需要进行矩阵运算。自适应滤波器最普通的应用就是横向结构。滤波器的输出信号y(n)是y(n)

y (n )=w (n )*x (n )=∑w i (n )x (n -i ) (2-7) T

i =0N -1

T 表示转置矩阵, n 是时间指针,N 是滤波器次数。这个例子就是有限脉冲响应滤波器的形式,为x(n)和w(n)两个矩阵卷积。

这种自适应算法使用误差信号

e (n )=d (n )-y (n ) (2-8)

为了方便起见,将上述式子表示为向量形式,则上述式子表示为:

y (n )=w T (n )*x (n ) (2-9)

误差序列可写为

e (n )=d (n )-y (n )=d (n )-w T (n )*x (n ) (2-10) 其中d(n)是期望信号,y(n)是滤波器的输出。使用输入向量x(n)和e(n)来更新自适应滤波器的最小化标准的相关系数。

显然,自适应滤波器控制机理是用误差序列e(n)按照某种准则和算法对其系数{wi(n)},i=1,2,…,N 进行调节的,最终使自适应滤波的目标(代价) 函数最小化,达到最佳滤波状态。

本节所用的标准是最小均方误差(MSE)。

e =E e 2(n ) (2-11) E[]表示算子期望。假如公式中的y(n)被公式(3.3)取代,公式(3.5)就可以表

示为

e =E e 2(n )+w T (n )*R *w (n )-2w T (n )*P (2-12) [][]

R =E x (n )*x T (n )是N ⨯N 自相关矩阵,是输入信号的自相关矩阵。

也指出了期望信号d(n)和输入信号向量x(n)的相互关P =E [d (n )*x (n )]是N *1互相关向量,

矢量。

由式(2-12)可见,自适应滤波器的代价函数是延迟线抽头系数的二次函数。当矩阵R 和矢量P 己知时,可以由权系数矢量w 直接求其解。

最优解w 0=[w o *w 1* w N -1*]最小化MSE ,源自解这个公式 T []

δε

δw n =0 (2-13)

将式(2-12)对w 求其偏导数,并令其等于零,假设矩阵R 满秩(非奇异) ,

可得代价函数最小的最佳滤波系数

w 0=R -1*P (2-14) 这个解称为维纳解,即最佳滤波系数值。因为均方误差(MSE)函数是滤波系数w 的二次方程,由此形成一个多维的超抛物面,这好像一个碗状曲面又具有唯一的碗底最小点,通常称之为自适应滤波器的误差性能曲面。当滤波器工作在平稳随机过程的环境下,这个误差

性能曲面就具有固定边缘的恒定形状。自适应滤波系数的起始值{wi(0)},i=1,2,…,N 是任意值,位于误差性能曲面上某一点,经过自适应调节过程,使对应于滤

波系数变化的点移动,朝碗底最小点方向移动,最终到达碗底最小点,实现了最佳维纳滤波。

自适应过程是在梯度矢量的负方向接连的校正滤波系数的,即在误差性能曲面的最陡下降法方向移动和逐步校正滤波系数,最终到达均方误差为最小的碗底最小点,获得最佳滤波或准最优工作状态。广泛使用的LMS 算法是一种选择性法适应采样和采样基础。这个方法可以避免复杂的计算。LMS 算法是最陡下降法,在这个算法中,向量w(n+1)通过改变对最小均方误差性能的负梯度比例自适应滤波算法及应用研究来增强。

对于LMS 算法梯度v(n)通过假设平方误差。2(n)作为公式2-13的MSE 来预测。因此,梯度预测可以单一化表示为:

δ[e 2(n )] ∇(n )==-2e (n )*x (n ) (2-15) δw n 在实际应用中,2u 经常用来代替u 。瞬间梯度预测产生的Widrow 一Hoff LMS算法,w(n)为自适应滤波器在n 时刻的滤波系数或权矢量。按照最陡下降法调节滤波系数,则在n+1时刻的滤波系数或权矢量w(n+l)可以用下列简单递归关系来计算:

w (n +1)=w (n )+2u *e (n )*x (n ) (2-16) u 是自适应步长来控制稳定性和收敛率。这种瞬时估计是无偏的,因为它的期望值E[]等于最陡下降法的梯度矢量。

以任意初始向量w(0)来开始,向量w(n)集中在最佳解决方法w 0,假如选择u

0

λm a x (2-17)

λmax 为矩阵R 的最大特征值,受限制于

λmax

i =0N -1

Tr[.]为指示矩阵的轨迹,r (0)=E x 2(n )是平均输入功率。

对于自适应信号处理应用,最重要的实际考虑是收敛速度,决定滤波器跟踪不稳定型号的能力。总体来说,权向量要获得收敛只有当最缓慢的权集中一点。这个最慢的时间 []

t = (2-19) u λm i n 1

这个指出时间连续相反的以u 的比例收敛,并且依靠输入矩阵的自相关特征值。具有全异的特征值,规定时间是受最慢模式的限制。以梯度预测为基础的自适应导致噪声矩阵的权向量,因此会有性能的损失。这个自适应处理的噪声导致稳态权向量随意的改变为最适宜的权向量。稳态权向量的精度通过超额的最小均方误差来测量。这个LMS 算法超过EMS 的是

n (2-20) excessEMS =u *Tr [R ]*εm i

εmin 是MSE 在稳态的最小值。

公式(2-19)和(2-20)产生LMS 算法基本协定:为了在稳态获得高精度(低超自适应滤波算法及应用研究额MSE) ,需要u 的最小值,但是也会降低收敛率。后面会有进一步关于LMS 算法特征的讨论。

对于N 维更新u*e(n)是常数,误差信号e(n)乘以u 得到u*e(n)。这个常数首先计算,然后乘以x(n)来更新w(n)。自适应LMS 算法如同最陡下降法,利用时间n=0的滤波系数矢量为任意的起始值w(0),然后开始LMS 算法的计算,其步骤如下:

l) 由现在时刻n 的滤波器滤波系数矢量估值w(n),输入信号矢量x(n)及期望信

号d(n),计算误差信号e(n):

e (n )=d (n )-y (n ) (2-21)

2) 利用递归法计算滤波系数矢量的更新估值。

3) 将时间指数n 增加1,回到第一步骤,重复上述计算步骤,一直到达稳定状态为止。由此可见,自适应LMS 算法简单,它既不需要计算输入信号的相关函数,又不要求矩阵之逆。因而得到了广泛的应用。

2.3.2递推最小二乘法(RLS )算法

从2.1节的分析得知,LMS 算法的收敛速度很慢,为了得到较块的收敛速度,有必要设计包含附加参数的更复杂的算法。特别是,如果矩阵R 是N×N 的且特征值为λ1,λ2, ,λN ,则可以使用一种含有N 个参数的算法,其中每个参数对应一个特征值。 在快速收敛算法的推导中,我们将采用最小二乘法。因此,将直接处理接收数据,使二次性能指数最小,而以前是使平方误差的期望值最小。这意味着,用时间平均而不是

统计平均来表示性能指数。

基于时间平均的最小平方误差被定义如下:

J (n )=∑λ

i =1n n -1e *(i , n )e (i , n ) (2-22)

式中,λ是接近1, 但是小于1的加权因子,e*(i,n)是e(i,n)的复共轭,且误差e(i,n)为:

e (i , n )=d (i )-x T (i )w (n ) 0≤i ≤n (2-23)

x (i )=[x (i ), x (i -1), , x (i -N +1)] (2-24) T

式中,x(i)是i 时刻的输入数据向量,w(n)是n 时刻的新的抽头增益向量。因而e(i,n)是用n 时刻的抽头增益向量测试i 时刻的旧数据所得的误差,J(n)是在所有旧数据上用新抽头增益所得的累计平方误差。

要完成RLS 算法就要找到均衡器的抽头增益向量w(n),使得累计平方误差J(n)最小。为了测试新的抽头增益向量,会用到那些先前的数据。而因子λ会在计算时更依赖于新近的数据,也就是说,J(n)会丢掉非稳定环境中的较旧的数据。如果信道是稳定的,那么λ可以设为1。

为了获得J(n)的最小值,可使J(n)的梯度为0, 即

∧∂J (n )=0,通过运算可知: ∂w n R (n )w (n )=p (n ) (2-25) 式中,w (n )是RLS 均衡其的最佳抽头增益向量。

R (n )=∑λn -1x *(i )x T (i )

i =1n ∧ (2-26)

P (n )=∑λn -1d *(n )x (i )i =1n (2-27) 式(2-26)中的方阵R(n)是输入数据向量x(i)的确定相关矩阵,式(2-26)中向量P(n)是输入向量x(i)和期望输出d(i)之间的确定互相关矩阵。要用式(2-25)计算均衡器的抽头增益向量w ,

-1(n )。 R 就需要计算∧

从式(2-26)中R(n)的定义可知,我们可以得到关于R(n-1)的递归公式。

T

()()()(n ) (2-28) R n =λR n -1+x n x

由于式(2-28)中的三项都是N×N 的方阵,我们可以使用方程倒数的引理得到R 式:

-1(n )

递归公

1⎡-1R -1(n -1)x (n )x T (n )R -1(n -1)⎤

R (n )=⎢R (n -1)-⎥ (2-29)

λ⎣λ+μn ⎦

-1

式中

T -1

()()(n -1)x (n ) (2-30) μn =x N R

根据上述递归公式,可知:

w (n )=w (n -1)+g (n )e *(n , n -1) (2-31) 式中

R -1(n )x (n ) g (n )= (2-32)

λ+μn 初始化:

w (0)=g (0)=0, R -1(0)=δI , δ是一个正常数 计算:

对于n=1,2…,计算

T

()(n -1)x (n ) y n =w

e (n )=d (n )-y (n )

R -1(n -1)x (n )g (n )=T -1

n -1x n λ+x n R

1

R -1(n )=R -1(n -1)-g (n )x T (n )R -1(N -1)

λ

[]

*

()()()(n ) w n =w n -1+g n e

λ是一个可以改变均衡器性能的抽头系数。如果信道是非时变的,那么λ可 以设为1。而通常的λ取值为0.8

着RLS 算法的跟踪能力。λ值越小,均衡器的跟踪能力更强。但是,如果λ值太小,均衡器将会不稳定。

2.4 基于DSP 实现自适应滤波器

2.4.1自适应滤波算法的DSP 实现

为了提高LMS 算法的处理速度及减小系统的硬件规模, 在实现滤波器算法时, 采用了TMS320C54xx 作为核心芯片。由于该处理器采用改进型结构, 具有高度并行性, 同时拥有高度集成的指令系统, 简化编程过程, 模块化结构程序设计增强了程序的可移植性。利用TMS320C54xx 实现LMS 自适应算法时, 存储器中数据的存放形式对DSP 的有效运用有着特殊的意义, 合理的存放形式, 可以使算法实现起来更加快速和高效, 为了实现算法中输入样值x(n) 和滤波器系数W(n) 的对应项相乘, 他们在存储器中的存放形式如图2.4 所示。

低地址

高地址

图2.4 TMS320C54xx自适应滤波器存储器组织形式

实验中采用的自适应滤波器采用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,int nError,int nCoeffNumber) 这个函数来实现。其完整代码是

int FIRLMS(int *nx,float *nh,int nError,int nCoeffNumber)

int i,r;

} {

float fWork; r=0;

for ( i=0;i

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

收敛因子fU=0.0005。nError 是上一次的误差值, fWork 是当前的滤波器权系数, 输出值r 。 这里实现自适应算法中y (n ) =∑x (n -1) *w (i ) 的公式。输出值y (n )等于输入值x(n-1)*w(i)

i =0N -1

的积分。½½½

(3)根据LMS 算法的迭代公式更新滤波器参数,有新的采样输入后转到第二步循环执行。 把一信号进行采样。把采样点放在数字中。这里用到了输入信号数组xx[],输出信号数组rr[],误差数组wc[],以及滤波器权系数h[]。通过for 循环语句进行一个一个样点值滤波计算。得到想要的结果。

for ( i=COEFFNUMBER+1;i

用FIRLMS 函数得到了一个滤波后的样点信号值nLastOutput 存放在输出信号数组rr[]中。for 循环一个一个得到滤波过的信号值第INPUTNUMBER=1024个为止。

{ }

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

根据算法和DSP 程序, 在CCS 环境下编译, 连接生成公共目标代码文件, 在线下载到DSP 中运行。为了能观察到相应的波形, 在CCS 环境下选择View \ Grap h\ Time \ Freqency 进入图形观察窗口, 在“Graph Property Dialog”窗口中选定相应类型的值。

将编译产生的可执行文件下载到DSP 芯片中,经过运行得到图4.5输入波形、图4.6滤波后输出信号波形与图2.7自适应误差e (n )波形

图2.5输出信号原始波形

图2.6滤波后输出信号的波形

图2.7 自适应误差e (n )波形

三.设计步骤

1. 查找有关自适应滤波器资料,从而了解自适应滤波器原理以及与其他滤波器区别。 2. 查找与自适应滤波器与DSP 实现资料,从中学习DSP 实验自适应滤波器方法。 3. 学习LMS 算法。

4. 根据LMS 算法编写DSP 程序,调试并下载到DSP 芯片中,在CCS 环境下编译, 连接生成公共目标代码文件, 在线下载到DSP 中运行,并观察相应的波形。 5. 记录所编写代码,撰写课程设计。

四.设计心得

通过此次课程设计,使我了解到自适应滤波器在统计信号处理的中的重要性,了解到在实际应用中,由于没有充足的信息来设计固定系数的数字滤波器,或者设计规则会在滤波器正常运行时改变,自适应滤波器所能发挥的关键作用。并且在设计过程中,我学会到自适应滤波器设计原理以及最小均方(LMS)算法、递归最小二乘(RLS)算法等自适应算法,同时初步认识到DSP 芯片在数字信号处理方面巨大的优势,这对我今后的学习与工作有很深远的影响。

五.参考文献

[1]邹彦等. DSP原理及应用. 北京. 电子工业出版社,2008.

[2]赵洪亮等. TMS320C55xDSP应用系统设计. 北京:北京航空航天大学出版社,2008. [3]张志勇. 精通MA TLAB6.5[M].北京:北京航空航天大学出版社,2003 [4]西蒙赫金. 自适应滤波器原理. 北京:电子工业出版社,2003

[5] 何振亚. 自适应信号处理. 北京:科学出版社,2002

附件源程序清单:

/******************************************************************************

Main()主函数。

******************************************************************************/

///////////////////////////////////////////////// // Example For ICETEK-VC5416-EDU // // CTR Version : V4 // // Filename: FirLms.c // // Project : FirLms.pjt // // Version : 2.00 // // Write by: Daniel Hawk // // Company : Realtimedsp Co.Ltd. // // // // All Rights opened & no Onus 2005.06 // ///////////////////////////////////////////////// #include"math.h"

#define PI 3.1415926 #define COEFFNUMBER 16 #define INPUTNUMBER 1024

int FIRLMS(int *nx,float *nh,int nError,int nCoeffNumber); float h[COEFFNUMBER],fU;

int xx[INPUTNUMBER],rr[INPUTNUMBER],wc[INPUTNUMBER]; main() { int i,nLastOutput;

nLastOutput=0; fU=0.0005;

for ( i=0;i

}

for ( i=COEFFNUMBER+1;i

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

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

} exit(0);

}

int FIRLMS(int *nx,float *nh,int nError,int nCoeffNumber) {

break

}

float fWork; r=0;

for ( i=0;i

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

/******************************************************************************

func .h 头文件

******************************************************************************/

void interrupt tint( void ); void CLK_init( void ); void SDRAM_init( void ); void INTR_init( void ); void TIME_init(void); void TMCR_Reset( void );

void SetDSPPLL(unsigned int uPLL);

/****************************************************************************

scancode.h 头文件

******************************************************************************/

#define SCANCODE_0 0x70 #define SCANCODE_1 0x69 #define SCANCODE_2 0x72 #define SCANCODE_3 0x7A #define SCANCODE_4 0x6B #define SCANCODE_5 0x73 #define SCANCODE_6 0x74 #define SCANCODE_7 0x6C #define SCANCODE_8 0x75 #define SCANCODE_9 0x7D #define SCANCODE_Del 0x49 #define SCANCODE_Enter 0x5A #define SCANCODE_Plus 0x79 #define SCANCODE_Minus 0x7B #define SCANCODE_Mult 0x7C #define SCANCODE_Divid 0x4A #define SCANCODE_Num 0x77

/******************************************************************************

util.h 头文件

******************************************************************************/

* Copyright (C) 2001, Spectrum Digital, Inc. All Rights Reserved. */

#define DSP_CLKIN 20 #define NULLLOOP_CLK 20

typedef struct {

int freq; // DSP operating clock int clkin; // DSP input clock int pllmult; // PLL multiplier int plldiv; // PLL divisor int clksperusec; // DSP clocks per usec int nullloopclk; // DSP clocks per null loop } DSPCLK;

extern DSPCLK dspclk;

// Read and write from an address #define Read(addr) addr

#define Write(addr,data) addr = data

// Set or clear all bits in the mask

#define ClearMask(addr,mask) addr = (addr & ~(mask)) #define SetMask(addr,mask) addr = (addr | (mask))

// Read and write data at addr, only bits in mask are affected

#define ReadMask(addr,mask) (addr & (mask))

#define WriteMask(addr,data,mask) addr = (addr & ~(mask)) | (data)

// Read and write data at addr, shift data so that bit 0 of data is aligned // with lowest set bit in mask. Only bits in mask are modified. Example // with address 0x1000 initial contents = 0x4007:

// WriteField(0x1000, 0x56, 0x0ff0) will set address 0x1000 to 0x4567. #define ReadField(addr,mask) ((addr & (mask)) >> firstbit(mask))

#define WriteField(addr,data,mask) addr = (addr & ~(mask)) | (data

extern int firstbit(unsigned short mask);

/*****************************************************************************/

21

目录:

摘要 .................................................................................................................. 2

一.设计目的 .................................................................................................. 3

二.设计原理及程序分析 .............................................................................. 3

2.1数字滤波器的基本概念 ........................................................................................................................ 3

2.2自适应滤波器原理 ................................................................................................................................ 5

2.3自适应滤波算法 . ................................................................................................................................... 6

2.3.1最小均方算法(LMS )算法 . .................................................................................................... 6

2.4 基于DSP 实现自适应滤波器 . ........................................................................................................... 12

2.4.1自适应滤波算法的DSP 实现 . ............................................................................................... 12

三.设计步骤 ................................................................................................ 15

四.设计心得 ................................................................................................ 15

五.参考文献 ................................................................................................ 15

附件源程序清单: ........................................................................................ 16

摘要

在科学技术高速发展的今天,由于在实际应用中,没有充足的信息来设计固定系数的数字滤波器,或者设计规则会在滤波器正常运行时改变,因此自适应滤波器成为统计信号处理的一个重要组成部分。自适应滤波器在需要处理未知统计环境下运算结果所产生的信号或需要处理非平稳信号时,有非常优异的解决方法,而且其性能通常远优于用常方法设计的固定滤波器。此外,自适应滤波器还有非自适应方法所不可能提供的新的信号处理能力。

本文从高速数字信号处理器的特点、自适应滤波器的原理及主要应用领域入手,介绍了自适应滤波器的基本理论思想,具体阐述了自适应滤波器的基本原理、算法及设计方法。本文中,对两种最基本的自适应算法,即最小均方误差(LMS ) 算法和递归最小二乘(RLS ) 算法进行了详细的介绍和分析,并针对两种算法的优缺点进行了详细的比较。最后用DSP 实现了自适应滤波器。实验结果表明,该自适应滤波器滤波效果优越。

关键词:DSP 自适应滤波器 LMS RLS

一.设计目的

我们是电子信息工程专业,数字信号处理在我们今后的学习与应用中扮演着举足轻重的地位,是我们所学知识的重点,所以,对于自适应信号处理知识需要我们去学习与研究。目前,对自适应滤波算法的研究是当今自适应信号处理中最为活跃的研究课题之一。Windrow 等于1967年提出的自适应滤波系统的参数能自动的调整而达到最优状况,而且在设计时,只需要很少的或根本不需要任何关于信号与噪声的先验统计知识。自适应滤波器本身有一个重要的自适应算法,这个算法可以根据输入、输出及原参量信号按照一定准则修改滤波参量,以使它本身能有效的跟踪外部环境的变化。因此,自适应数字系统具有很强的自学习、自跟踪能力和算法的简单易实现性。自适应滤波技术的核心问题是自适应算法的性能问题,提出的自适应算法主要有最小均方(LMS)算法、递归最小二乘(RLS)算法及相应的改进算法如:归一化(NLMS)算法、变步长(SVSLMS)算法、递归最小二乘方格形(RLSL)算法等。这些算法各有特点,适用于不同的场合。所以,对发展通信业务有着不可或缺的作用的自适应滤波,更需要我们去学习与研究,并应用到实际应用中。

二.设计原理及程序分析

2.1数字滤波器的基本概念

从输入信号中滤出噪声和干扰以提取有用信息的过程称为滤波,相应的装置称为滤波器。如果滤波器的输入和输出均为离散信号,称该滤波器为数字滤波器。当滤波器的输出信号为输入端的线性函数时,该滤波器称为线性滤波器,否则就称为非线性滤波器。一个典型的数字滤波器的框图如图2-1所示。

图2-1 数字滤波器

设输入信号为x(n),输出信号为y(n),该数字滤波器可用以下差分方程来表示:

y (n ) =∑a i x (n -i ) -∑b i y (n -i ) (2-1)

i =0i =1M -1N -1

式中a i ,b i 称为滤波器系数。

当b i =0时,上式变为:

y (n )=∑a i x (n -i ) (2-2)

i =0M -1

这种滤波器称为全零点滤波器。

如果a i =0,b i ≠0时,则称为全极点滤波器或递归滤波器。

由上式,可知数字滤波器的传递函数为:

M -1

H (z )=∑a z i

i =0

M

i =1-1 (2-3) 1+∑b i z -i

其单位冲击响应函数为:

h (n )=z -1(H (z )) (2-4)

y (n )=h (n )⊗x (n )=

i =-∞∑h (i )x (n -i ) (2-5) ∞

如果当n

⎧h (n ), 0≤n ≤N h (n )=⎨ (2-6) 0, e l s e ⎩

则称此滤波器为有限冲激响应FIR(FiniteImpulseResponse)滤波器,否则,称之为无限冲激响应IIR(InfiniteImpulseResponse)滤波器。

如果h(n)满足如下条件:

h (n )=0, n

则称此滤波器是因果的,并且是稳定的。

2.2自适应滤波器原理

图2.2 自适应滤波器结构的一般形式

图2.3 自适应滤波器的系统识别框图

的目的使得误差信号e (k)最小。重复上面过程,滤波器在自己的工作过程中逐渐了解到输

入信号和噪声的统计规律,并以此为根据自动调整滤波器权系数,从而达到最佳的滤波效果。一旦输入的统计规律发生了变化,滤波器能够自动跟踪输入信号变化,自动调整滤波器的权系数,最终达到滤波效果,实现自适应过程。图2-3是使用自适应滤波器的系统识别原理图。

自适应滤波器的结构可以采用FIR 或IIR 滤波器存在稳定性问题,因此一般采用FIR 滤波器作为自适应滤波器的结构。自适应FIR 滤波器结构又可分为3种结构类型:横向型结构(Transversal Structure)、对称横向型结构(Symmetric Transversal Structure)以及格型结构(Lattice Struture)。本文采用自适应滤波器设计中最常用的FIR 横向型结构。

2.3自适应滤波算法

2.3.1最小均方算法(LMS )算法

由Widrow 和Hoff 引入的最小均方(LMS)算法,由于其简单性、运算高效性各种运行条件下良好的性能,而被广泛应用。基于梯度的最小均方(LMS)算法是最基本的算法,其含义相对简单明了。选定均方误差为权矢量二次函数时,性能度量曲线可以形象地看成一个碗形曲面这样自适应处理器的任务便是不断地向最低点逼近,即可以通过计算梯度的方法实现性能度量的最优化。而基于梯度的算法中,最简单的一种就是最小均方算法LMS 算法,LMS 算法使用的准则是使均衡器的期望输出值和实际输出值之间的均方误差(MSE)最小化的准则,依据输入信号在迭代过程中估计梯度矢量,并更新权系数以达到最优的自适应迭代算法。这算法不需要计算相应的相关函数,也不需要进行矩阵运算。自适应滤波器最普通的应用就是横向结构。滤波器的输出信号y(n)是y(n)

y (n )=w (n )*x (n )=∑w i (n )x (n -i ) (2-7) T

i =0N -1

T 表示转置矩阵, n 是时间指针,N 是滤波器次数。这个例子就是有限脉冲响应滤波器的形式,为x(n)和w(n)两个矩阵卷积。

这种自适应算法使用误差信号

e (n )=d (n )-y (n ) (2-8)

为了方便起见,将上述式子表示为向量形式,则上述式子表示为:

y (n )=w T (n )*x (n ) (2-9)

误差序列可写为

e (n )=d (n )-y (n )=d (n )-w T (n )*x (n ) (2-10) 其中d(n)是期望信号,y(n)是滤波器的输出。使用输入向量x(n)和e(n)来更新自适应滤波器的最小化标准的相关系数。

显然,自适应滤波器控制机理是用误差序列e(n)按照某种准则和算法对其系数{wi(n)},i=1,2,…,N 进行调节的,最终使自适应滤波的目标(代价) 函数最小化,达到最佳滤波状态。

本节所用的标准是最小均方误差(MSE)。

e =E e 2(n ) (2-11) E[]表示算子期望。假如公式中的y(n)被公式(3.3)取代,公式(3.5)就可以表

示为

e =E e 2(n )+w T (n )*R *w (n )-2w T (n )*P (2-12) [][]

R =E x (n )*x T (n )是N ⨯N 自相关矩阵,是输入信号的自相关矩阵。

也指出了期望信号d(n)和输入信号向量x(n)的相互关P =E [d (n )*x (n )]是N *1互相关向量,

矢量。

由式(2-12)可见,自适应滤波器的代价函数是延迟线抽头系数的二次函数。当矩阵R 和矢量P 己知时,可以由权系数矢量w 直接求其解。

最优解w 0=[w o *w 1* w N -1*]最小化MSE ,源自解这个公式 T []

δε

δw n =0 (2-13)

将式(2-12)对w 求其偏导数,并令其等于零,假设矩阵R 满秩(非奇异) ,

可得代价函数最小的最佳滤波系数

w 0=R -1*P (2-14) 这个解称为维纳解,即最佳滤波系数值。因为均方误差(MSE)函数是滤波系数w 的二次方程,由此形成一个多维的超抛物面,这好像一个碗状曲面又具有唯一的碗底最小点,通常称之为自适应滤波器的误差性能曲面。当滤波器工作在平稳随机过程的环境下,这个误差

性能曲面就具有固定边缘的恒定形状。自适应滤波系数的起始值{wi(0)},i=1,2,…,N 是任意值,位于误差性能曲面上某一点,经过自适应调节过程,使对应于滤

波系数变化的点移动,朝碗底最小点方向移动,最终到达碗底最小点,实现了最佳维纳滤波。

自适应过程是在梯度矢量的负方向接连的校正滤波系数的,即在误差性能曲面的最陡下降法方向移动和逐步校正滤波系数,最终到达均方误差为最小的碗底最小点,获得最佳滤波或准最优工作状态。广泛使用的LMS 算法是一种选择性法适应采样和采样基础。这个方法可以避免复杂的计算。LMS 算法是最陡下降法,在这个算法中,向量w(n+1)通过改变对最小均方误差性能的负梯度比例自适应滤波算法及应用研究来增强。

对于LMS 算法梯度v(n)通过假设平方误差。2(n)作为公式2-13的MSE 来预测。因此,梯度预测可以单一化表示为:

δ[e 2(n )] ∇(n )==-2e (n )*x (n ) (2-15) δw n 在实际应用中,2u 经常用来代替u 。瞬间梯度预测产生的Widrow 一Hoff LMS算法,w(n)为自适应滤波器在n 时刻的滤波系数或权矢量。按照最陡下降法调节滤波系数,则在n+1时刻的滤波系数或权矢量w(n+l)可以用下列简单递归关系来计算:

w (n +1)=w (n )+2u *e (n )*x (n ) (2-16) u 是自适应步长来控制稳定性和收敛率。这种瞬时估计是无偏的,因为它的期望值E[]等于最陡下降法的梯度矢量。

以任意初始向量w(0)来开始,向量w(n)集中在最佳解决方法w 0,假如选择u

0

λm a x (2-17)

λmax 为矩阵R 的最大特征值,受限制于

λmax

i =0N -1

Tr[.]为指示矩阵的轨迹,r (0)=E x 2(n )是平均输入功率。

对于自适应信号处理应用,最重要的实际考虑是收敛速度,决定滤波器跟踪不稳定型号的能力。总体来说,权向量要获得收敛只有当最缓慢的权集中一点。这个最慢的时间 []

t = (2-19) u λm i n 1

这个指出时间连续相反的以u 的比例收敛,并且依靠输入矩阵的自相关特征值。具有全异的特征值,规定时间是受最慢模式的限制。以梯度预测为基础的自适应导致噪声矩阵的权向量,因此会有性能的损失。这个自适应处理的噪声导致稳态权向量随意的改变为最适宜的权向量。稳态权向量的精度通过超额的最小均方误差来测量。这个LMS 算法超过EMS 的是

n (2-20) excessEMS =u *Tr [R ]*εm i

εmin 是MSE 在稳态的最小值。

公式(2-19)和(2-20)产生LMS 算法基本协定:为了在稳态获得高精度(低超自适应滤波算法及应用研究额MSE) ,需要u 的最小值,但是也会降低收敛率。后面会有进一步关于LMS 算法特征的讨论。

对于N 维更新u*e(n)是常数,误差信号e(n)乘以u 得到u*e(n)。这个常数首先计算,然后乘以x(n)来更新w(n)。自适应LMS 算法如同最陡下降法,利用时间n=0的滤波系数矢量为任意的起始值w(0),然后开始LMS 算法的计算,其步骤如下:

l) 由现在时刻n 的滤波器滤波系数矢量估值w(n),输入信号矢量x(n)及期望信

号d(n),计算误差信号e(n):

e (n )=d (n )-y (n ) (2-21)

2) 利用递归法计算滤波系数矢量的更新估值。

3) 将时间指数n 增加1,回到第一步骤,重复上述计算步骤,一直到达稳定状态为止。由此可见,自适应LMS 算法简单,它既不需要计算输入信号的相关函数,又不要求矩阵之逆。因而得到了广泛的应用。

2.3.2递推最小二乘法(RLS )算法

从2.1节的分析得知,LMS 算法的收敛速度很慢,为了得到较块的收敛速度,有必要设计包含附加参数的更复杂的算法。特别是,如果矩阵R 是N×N 的且特征值为λ1,λ2, ,λN ,则可以使用一种含有N 个参数的算法,其中每个参数对应一个特征值。 在快速收敛算法的推导中,我们将采用最小二乘法。因此,将直接处理接收数据,使二次性能指数最小,而以前是使平方误差的期望值最小。这意味着,用时间平均而不是

统计平均来表示性能指数。

基于时间平均的最小平方误差被定义如下:

J (n )=∑λ

i =1n n -1e *(i , n )e (i , n ) (2-22)

式中,λ是接近1, 但是小于1的加权因子,e*(i,n)是e(i,n)的复共轭,且误差e(i,n)为:

e (i , n )=d (i )-x T (i )w (n ) 0≤i ≤n (2-23)

x (i )=[x (i ), x (i -1), , x (i -N +1)] (2-24) T

式中,x(i)是i 时刻的输入数据向量,w(n)是n 时刻的新的抽头增益向量。因而e(i,n)是用n 时刻的抽头增益向量测试i 时刻的旧数据所得的误差,J(n)是在所有旧数据上用新抽头增益所得的累计平方误差。

要完成RLS 算法就要找到均衡器的抽头增益向量w(n),使得累计平方误差J(n)最小。为了测试新的抽头增益向量,会用到那些先前的数据。而因子λ会在计算时更依赖于新近的数据,也就是说,J(n)会丢掉非稳定环境中的较旧的数据。如果信道是稳定的,那么λ可以设为1。

为了获得J(n)的最小值,可使J(n)的梯度为0, 即

∧∂J (n )=0,通过运算可知: ∂w n R (n )w (n )=p (n ) (2-25) 式中,w (n )是RLS 均衡其的最佳抽头增益向量。

R (n )=∑λn -1x *(i )x T (i )

i =1n ∧ (2-26)

P (n )=∑λn -1d *(n )x (i )i =1n (2-27) 式(2-26)中的方阵R(n)是输入数据向量x(i)的确定相关矩阵,式(2-26)中向量P(n)是输入向量x(i)和期望输出d(i)之间的确定互相关矩阵。要用式(2-25)计算均衡器的抽头增益向量w ,

-1(n )。 R 就需要计算∧

从式(2-26)中R(n)的定义可知,我们可以得到关于R(n-1)的递归公式。

T

()()()(n ) (2-28) R n =λR n -1+x n x

由于式(2-28)中的三项都是N×N 的方阵,我们可以使用方程倒数的引理得到R 式:

-1(n )

递归公

1⎡-1R -1(n -1)x (n )x T (n )R -1(n -1)⎤

R (n )=⎢R (n -1)-⎥ (2-29)

λ⎣λ+μn ⎦

-1

式中

T -1

()()(n -1)x (n ) (2-30) μn =x N R

根据上述递归公式,可知:

w (n )=w (n -1)+g (n )e *(n , n -1) (2-31) 式中

R -1(n )x (n ) g (n )= (2-32)

λ+μn 初始化:

w (0)=g (0)=0, R -1(0)=δI , δ是一个正常数 计算:

对于n=1,2…,计算

T

()(n -1)x (n ) y n =w

e (n )=d (n )-y (n )

R -1(n -1)x (n )g (n )=T -1

n -1x n λ+x n R

1

R -1(n )=R -1(n -1)-g (n )x T (n )R -1(N -1)

λ

[]

*

()()()(n ) w n =w n -1+g n e

λ是一个可以改变均衡器性能的抽头系数。如果信道是非时变的,那么λ可 以设为1。而通常的λ取值为0.8

着RLS 算法的跟踪能力。λ值越小,均衡器的跟踪能力更强。但是,如果λ值太小,均衡器将会不稳定。

2.4 基于DSP 实现自适应滤波器

2.4.1自适应滤波算法的DSP 实现

为了提高LMS 算法的处理速度及减小系统的硬件规模, 在实现滤波器算法时, 采用了TMS320C54xx 作为核心芯片。由于该处理器采用改进型结构, 具有高度并行性, 同时拥有高度集成的指令系统, 简化编程过程, 模块化结构程序设计增强了程序的可移植性。利用TMS320C54xx 实现LMS 自适应算法时, 存储器中数据的存放形式对DSP 的有效运用有着特殊的意义, 合理的存放形式, 可以使算法实现起来更加快速和高效, 为了实现算法中输入样值x(n) 和滤波器系数W(n) 的对应项相乘, 他们在存储器中的存放形式如图2.4 所示。

低地址

高地址

图2.4 TMS320C54xx自适应滤波器存储器组织形式

实验中采用的自适应滤波器采用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,int nError,int nCoeffNumber) 这个函数来实现。其完整代码是

int FIRLMS(int *nx,float *nh,int nError,int nCoeffNumber)

int i,r;

} {

float fWork; r=0;

for ( i=0;i

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

收敛因子fU=0.0005。nError 是上一次的误差值, fWork 是当前的滤波器权系数, 输出值r 。 这里实现自适应算法中y (n ) =∑x (n -1) *w (i ) 的公式。输出值y (n )等于输入值x(n-1)*w(i)

i =0N -1

的积分。½½½

(3)根据LMS 算法的迭代公式更新滤波器参数,有新的采样输入后转到第二步循环执行。 把一信号进行采样。把采样点放在数字中。这里用到了输入信号数组xx[],输出信号数组rr[],误差数组wc[],以及滤波器权系数h[]。通过for 循环语句进行一个一个样点值滤波计算。得到想要的结果。

for ( i=COEFFNUMBER+1;i

用FIRLMS 函数得到了一个滤波后的样点信号值nLastOutput 存放在输出信号数组rr[]中。for 循环一个一个得到滤波过的信号值第INPUTNUMBER=1024个为止。

{ }

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

根据算法和DSP 程序, 在CCS 环境下编译, 连接生成公共目标代码文件, 在线下载到DSP 中运行。为了能观察到相应的波形, 在CCS 环境下选择View \ Grap h\ Time \ Freqency 进入图形观察窗口, 在“Graph Property Dialog”窗口中选定相应类型的值。

将编译产生的可执行文件下载到DSP 芯片中,经过运行得到图4.5输入波形、图4.6滤波后输出信号波形与图2.7自适应误差e (n )波形

图2.5输出信号原始波形

图2.6滤波后输出信号的波形

图2.7 自适应误差e (n )波形

三.设计步骤

1. 查找有关自适应滤波器资料,从而了解自适应滤波器原理以及与其他滤波器区别。 2. 查找与自适应滤波器与DSP 实现资料,从中学习DSP 实验自适应滤波器方法。 3. 学习LMS 算法。

4. 根据LMS 算法编写DSP 程序,调试并下载到DSP 芯片中,在CCS 环境下编译, 连接生成公共目标代码文件, 在线下载到DSP 中运行,并观察相应的波形。 5. 记录所编写代码,撰写课程设计。

四.设计心得

通过此次课程设计,使我了解到自适应滤波器在统计信号处理的中的重要性,了解到在实际应用中,由于没有充足的信息来设计固定系数的数字滤波器,或者设计规则会在滤波器正常运行时改变,自适应滤波器所能发挥的关键作用。并且在设计过程中,我学会到自适应滤波器设计原理以及最小均方(LMS)算法、递归最小二乘(RLS)算法等自适应算法,同时初步认识到DSP 芯片在数字信号处理方面巨大的优势,这对我今后的学习与工作有很深远的影响。

五.参考文献

[1]邹彦等. DSP原理及应用. 北京. 电子工业出版社,2008.

[2]赵洪亮等. TMS320C55xDSP应用系统设计. 北京:北京航空航天大学出版社,2008. [3]张志勇. 精通MA TLAB6.5[M].北京:北京航空航天大学出版社,2003 [4]西蒙赫金. 自适应滤波器原理. 北京:电子工业出版社,2003

[5] 何振亚. 自适应信号处理. 北京:科学出版社,2002

附件源程序清单:

/******************************************************************************

Main()主函数。

******************************************************************************/

///////////////////////////////////////////////// // Example For ICETEK-VC5416-EDU // // CTR Version : V4 // // Filename: FirLms.c // // Project : FirLms.pjt // // Version : 2.00 // // Write by: Daniel Hawk // // Company : Realtimedsp Co.Ltd. // // // // All Rights opened & no Onus 2005.06 // ///////////////////////////////////////////////// #include"math.h"

#define PI 3.1415926 #define COEFFNUMBER 16 #define INPUTNUMBER 1024

int FIRLMS(int *nx,float *nh,int nError,int nCoeffNumber); float h[COEFFNUMBER],fU;

int xx[INPUTNUMBER],rr[INPUTNUMBER],wc[INPUTNUMBER]; main() { int i,nLastOutput;

nLastOutput=0; fU=0.0005;

for ( i=0;i

}

for ( i=COEFFNUMBER+1;i

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

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

} exit(0);

}

int FIRLMS(int *nx,float *nh,int nError,int nCoeffNumber) {

break

}

float fWork; r=0;

for ( i=0;i

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

/******************************************************************************

func .h 头文件

******************************************************************************/

void interrupt tint( void ); void CLK_init( void ); void SDRAM_init( void ); void INTR_init( void ); void TIME_init(void); void TMCR_Reset( void );

void SetDSPPLL(unsigned int uPLL);

/****************************************************************************

scancode.h 头文件

******************************************************************************/

#define SCANCODE_0 0x70 #define SCANCODE_1 0x69 #define SCANCODE_2 0x72 #define SCANCODE_3 0x7A #define SCANCODE_4 0x6B #define SCANCODE_5 0x73 #define SCANCODE_6 0x74 #define SCANCODE_7 0x6C #define SCANCODE_8 0x75 #define SCANCODE_9 0x7D #define SCANCODE_Del 0x49 #define SCANCODE_Enter 0x5A #define SCANCODE_Plus 0x79 #define SCANCODE_Minus 0x7B #define SCANCODE_Mult 0x7C #define SCANCODE_Divid 0x4A #define SCANCODE_Num 0x77

/******************************************************************************

util.h 头文件

******************************************************************************/

* Copyright (C) 2001, Spectrum Digital, Inc. All Rights Reserved. */

#define DSP_CLKIN 20 #define NULLLOOP_CLK 20

typedef struct {

int freq; // DSP operating clock int clkin; // DSP input clock int pllmult; // PLL multiplier int plldiv; // PLL divisor int clksperusec; // DSP clocks per usec int nullloopclk; // DSP clocks per null loop } DSPCLK;

extern DSPCLK dspclk;

// Read and write from an address #define Read(addr) addr

#define Write(addr,data) addr = data

// Set or clear all bits in the mask

#define ClearMask(addr,mask) addr = (addr & ~(mask)) #define SetMask(addr,mask) addr = (addr | (mask))

// Read and write data at addr, only bits in mask are affected

#define ReadMask(addr,mask) (addr & (mask))

#define WriteMask(addr,data,mask) addr = (addr & ~(mask)) | (data)

// Read and write data at addr, shift data so that bit 0 of data is aligned // with lowest set bit in mask. Only bits in mask are modified. Example // with address 0x1000 initial contents = 0x4007:

// WriteField(0x1000, 0x56, 0x0ff0) will set address 0x1000 to 0x4567. #define ReadField(addr,mask) ((addr & (mask)) >> firstbit(mask))

#define WriteField(addr,data,mask) addr = (addr & ~(mask)) | (data

extern int firstbit(unsigned short mask);

/*****************************************************************************/

21


相关内容

  • 回声消除技术
  • 解密回声消除技术之一(理论篇) 一.前言 因为工作的关系,笔者从2004年开始接触回声消除(Echo Cancellation)技术,而后一直在某大型通讯企业从事与回声消除技术相关的工作,对回声消除这个看似神秘.高端和难以理解的技术领域可谓知之甚详. 要了解回声消除技术的来龙去脉,不得不提及作为现代 ...

  • 并联型有源电力滤波器控制方法的研究
  • 第27卷第11期 2009年11月 文章编号:1004-3918(2009)11-1409-02河南科学HENANV01.27No.1lNOV.2009SCIENCE 基于DSP并联型有源电力滤波器的研究 杜超,李增生,郭红霞 (榆林学院,陕西榆林719000) 摘要:分析了与滞环相结合的空间矢量P ...

  • 谐波抑制与无功补偿
  • 分 类 号: 单位代码:10452 毕业论文(设计) 电网谐波抑制和无功补偿技术的研究 姓 名 王小丫 学 号 [1**********]6 年 级 2010 专 业 电气工程及其自动化 系 (院) 电气学院 指导教师 2014年 04月 11日 摘 要 当前,由于电力电子技术的飞速发展和广泛应用, ...

  • 心电图仪设计报告
  • 课程设计报告 小组成员 于立秋 于惠 吕苗洁 方瑶 班 级 研 1404 题 目 胎儿心电图仪的设计 指导老师 刘国忠 目录 1设计背景与目的 . ................................................. 3 2心电基础理论 . .............. ...

  • 基于DSP和CPLD的低压断路器智能控制器的设计
  • 0 引言 智能电网的发展,对低压电器的智能化提出了较高的要求,目前国内使用较多的小型断路器的智能化稳定性不够,在于其体积较小,将信号采集电路.动作执行和智能脱扣器都安装在本体内,开关内的强电场产生的电磁干扰和高温,使得断路器可靠性降低.本文介绍的智能控制器脱离于断路器本体,并且能够连接多个断路器,实 ...

  • 深入分析示波器主要技术指标
  • 深入分析示波器主要技术指标 领会主要技术指标--带宽.采样率及记录长度--的言外之意,深入分析那些影响你设计效率甚至有效性的细微差别和不大引人注意的特性. 多年以来,电子系统的性能随着半导体集成度及功能的稳步提高.仿真模型的改进.体系结构的变化等等而在同步提高.尽管有这些提高,但设备之间的信号传输速 ...

  • 电气专业的一些毕业设计题目
  • 电气专业的一些毕业设计题目 电子类: 1.红外遥控照明灯(电路+程序+论文) 2.基于单片机的多功能智能小车设计论文(电路+程序+论文) 3.基于数字信号处理器(DSP)的异步电机直接转矩控制研究(硕士)(论文+上位机下位机软件+程序) 4.简单温度控制系统(仅论文) 5.漏电保护器(电路+程序+论 ...

  • 通信工程专业毕业设计题目大全
  • 卷积编码和维特比译码的FPGA实现 2 CVSD音频编译码算法研究与FPGA实现 3 DQPSK调制解调技术研究及FPGA仿真实现 4 基于FPGA的高斯白噪声发生器设计与实现 5 无线通信系统选择分集技术研究 6 MIMO系统空时分组编码的性能研究 7 基于量子烟花算法的认知无线电频谱分配技术研究 ...

  • 红外图像实时处理系统设计_毛玉星
  • V ol. 25 N o. 5 2003年9月Infr ar ed T echnolog y Sep. 2003 红外图像实时处理系统设计 毛玉星 1, 2 X , 胡 旭 2 (1. 重庆大学电气工程学院, 重庆400044; 2. 重庆大学通信与测控研究所, 重庆400044) 摘要: 随着非制 ...