下载
加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 MATLAB数字信号处理与应用

MATLAB数字信号处理与应用.doc

MATLAB数字信号处理与应用

卦鯰謀秂ss
2018-06-28 0人阅读 举报 0 0 暂无简介

简介:本文档为《MATLAB数字信号处理与应用doc》,可适用于IT/计算机领域

MATLAB数字信号处理与应用本书主要介绍基于MATLABRa的信号分析与处理的原理和应用。全书共分为章:第章对MATLABRa的特点与MATALB的基本使用进行了介绍第章,第章分别讲述了MATLAB中信号处理工具、MATLAB离散时间系统与Z变换、数字滤波器及其设计、平稳随机信号分析、非平稳信号分析与处理以及自适应信号分析与处理并且每一章节都较详细地分析了包括雷达信号、图像信号和语音信号等信号处理综合应用实例。本书可作为高等学校数字信号处理等课程的教材或参考书对于从事信号处理及相关领域的第一章经典数字滤波器及其设计引言数字滤波器(DigitalFilter,DF)在信号的过滤、检测和参数估计等方面起着重要的作用。信号往往夹杂着噪声及无用信号成分必须将这些干扰成分滤除。数字滤波器对信号进行筛选可通过特定频段的信号。一般来说噪声信号往往是高频信号而经典滤波器正是假定有用信号与噪声信号具有不同的频段所以利用经典滤波器可以去除噪声。但如果有用信号和无用信号或有用信号和噪声的频谱相互重叠那么经典滤波器则不能实现理想的滤波性能。现代滤波器的作用是从含有噪声的信号中估计出信号的某些特征或信号本身一旦信号被估计出那么估计出来的信号与原信号相比会有更高的信噪比。这类滤波器主要有维纳滤波器、卡尔曼滤波器、线性预测滤波器以及自适应滤波器等。经典数字滤波器原理数字滤波是数字信号分析中最重要的组成部分之一与模拟滤波相比它具有精度和稳定性高、系统函数容易改变、灵活性强、便于大规模集成和可实现多维滤波等优点。在信号的过滤、检测和参数的估计等方面经典数字滤波器是使用最广泛的一种线性系统。数字滤波器的作用是利用离散时间系统的特性对输入信号波形(或频谱)进行加工处理或者说利用数字方法按预定的要求对信号进行变换。数字滤波器的概念若滤波器的输入、输出都是离散时间信号那么该滤波器的单位冲激响应h(n)也必然是离散的这种滤波器称为数字滤波器。当用硬件实现一个DF时所需的元件是乘法器、延时器和相加器而用MATLAB软件实现时它仅仅需要线性卷积程序就可以实现。众所周知模拟滤波器(AnalogFilterAF)只能用硬件来实现其元件有电阻R电感L电容C及运算放大器等。因此DF的实现要比AF容易得多并且更容易获得较理想的滤波性能。数字滤波器的作用是对输入信号进行滤波就如同信号通过系统一样。对于线性时不变系统其时域DFTDCT和DHT等方法。设S是一酉变换矩阵即()其中为一大于的常数用酉矩阵S对输入信号向量x(n)进行酉变换可以得到()式中表示变换后的信号向量酉变换后的均衡器抽头权向量C(n–)变为()则预测误差可表示为()一般地进行酉变换前输入信号之间有相关性变换后相关性被基本消除所以变换域算法相当于一种解相关算法。从滤波的角度来讲原来的M阶滤波器通过变换成为新的信道滤波器。总结上述算法步骤:初始化n=步骤:给定一酉变换矩阵更新各参量:()()()【例】在MATLAB中使用LMS算法实现自适应均衡器通过改变收敛因子和滤波器阶数就可以仿真均衡器的收敛速度和精度其程序代码如下:例程基于LMS算法的自适应均衡器仿真参数isi=,,,ISI信道参数order=滤波器阶数snr=AWGN信道信噪比len=训练序列长度u=调整步长M=(order)N=lenlength(isi)e=zeros(,N)error=eout=zeros(,N)FIR滤波器输出fori=:x=sign(rand(,len))采用PN码作为训练序列noise=randn(,N)^(snr)AWGNy=conv(isi,x)noisewk=zeros(,order)forn=order:NMLMS算法y=y(nM::nM)d=wk*y'e(n)=x(n)dwk=wku*e(n)*ye(n)=*log(abs(e(n)))enderror=erroreenderror=error(order:NM)误差值t=:length(error)plot(t,error)title('误差收敛曲线')ylabel('误差dB')xlabel('n')【程序运行结果】图自适应均衡器收敛曲线【例】使用下面的参数设计信道均衡器其中使用两个独立的随机数发生器一个用x(n)来表示用来测试信道另一个用v(n)来表示用来模拟接收器中的加性白噪声的影响。序列x(n)是x(n)=的伯努利序列随机变量x(n)具有零均值和单位方差。第二个序列v(n)具有零均值其方差由信噪比决定。均衡器有个抽头。例程自适应信道均衡器自适应均衡器的仿真程序:W=Nexp=N=Nmc=M=抽头系数lambda=遗忘因子varv=噪声方差h=zeros(,)h的初始化er=zeros(N,Nmc)er的初始化h()=*(cos(*pi*()W))h()=*(cos(*pi*()W))h()=*(cos(*pi*()W))学习曲线hc=h()h()h()'n=t=(:N)'fori=:Nmcy=sign(rand(N,))输入信号v=sqrt(varv)*randn(N,)噪声信号x=filter(hc,,y)v信号混合x=zeros(M,)xx矩阵yd=zeros(NM,)延迟信号初始化e=ydyd(nM:NM)=y(:Nn)lambda=P=(^)*eye(M,M)c=zeros(M,)g=cglambda=gforn=M:MNxn=flipud(x(nM:n))glambda=P*xnalphal=lambdaconj(glambda')*xng=glambdalambdaa(n)=conj(g')*xnP=(Pg*conj(glambda'))lambdaP=(PP')e(n)=yd(n)conj(c')*xnc=cg*conj(e(n))endendeplot=e(M:MN)^subplot(,,),plot(t,abs(eplot))ylabel('|e(n)|^')xlabel('n')subplot(,,),plot(t,a(M:MN))ylabel('alpha(n)')xlabel('n')【程序运行结果】图自适应均衡器收敛曲线其仿真结果说明如下:从第一子图可以看出|e(n)|^随迭代次数n的增加他的收敛也就越快。同时第二子图的α(n)在迭代过程中收敛趋于稳定的同时它也达到平稳状态。它的值在的范围出现小的波动。自适应信号陷波器在通信系统和电子系统中经常会受到诸如Hz工作频率等单频或窄带干扰的影响。这种干扰的存在严重影响了信号接收或检测的可靠性和正确性需要采用自适应信号陷波器消除此干扰。当自适应噪声抵消系统的参考输入为单一频率正弦信号时则系统可以构成自适应信号陷波器。现在我们假定接收信号中包含纯净信号分量s(n)和单一频率ω的正弦干扰则自适应陷波器的频率特性如图所示。图自适应陷波器的频率特性受单频正弦干扰的有用信号可表示为()式中C表示正弦干扰的幅度为干扰的频率。如图所示为自适应陷波器的原理框图原始输入端为接收到的受单频干扰的有用信号d(n)参考输入端为一单频正弦信号记为其相位与干扰正弦信号的相位不同但频率是一样的。两个权系数和由自适应线性组合器调整输出。图自适应陷波器输入端加有相位差为的信号x(n)和x(n)它们分别表示为()()线性组合器的输出为()通过自适应调整使权矢量达到最佳值和此时输出为()式中和分别是干扰的振幅和相位的最佳估计。d(n)与y(n)相减后便可得到有用信号的最佳近似值即()自适应陷波器有两个优点一是频率特性可以具有很窄的阻带与理想特性很接近而且阻带宽度很容易进行控制二是当干扰频率有变动时阻带位置能够跟踪干扰频率的变化。【例】使用普通理想低通滤波器设计针对Hz工频干扰的陷波滤波器。使用窗函数法设计具有线性相位的FIR滤波器实现本例首先选择一个适当的理想低通滤波器然后用窗函数截取其无限长的脉冲响应这里我们使用Kaiser窗得到FIR滤波器。在信号处理工具箱中Kaiser窗由函数w=kaiser(L,beta)实现其中L为窗口长度beta控制旁瓣高度w为Kaiser窗函数的系数。根据阻带衰减要求设L为beta为。MATLAB程序实现如下:例程自适应陷波滤波器Hz工频干扰陷波器clearallclcHz陷波器由一个低通滤波器加上一个高通滤波器组成而高通滤波器由一个全通滤波器减去一个低通滤波器构成M=滤波器阶数L=窗口长度beta=衰减系数Fs=wc=(Fs)*piwc为高通滤波器截止频率对应Hzwc=(Fs)*piwc为低通滤波器截止频率对应Hzh=ideallp(pi,M)ideallp(wc,M)ideallp(wc,M)h为陷波器冲击响应w=kaiser(L,beta)y=h*rot(w)y为Hz陷波器冲击响应序列其中具有线性相位的FIR低通滤波器由如下函数实现:理想低通滤波器截止角频率wc阶数Mfunctionhd=ideallp(wc,M)alpha=(M)n=:Mm=nalphaepseps为很小的数避免被除hd=sin(woc*m)(pi*m)用Sinc函数产生冲击响应在工作空间生成的矢量y为满足要求的Hz陷波器冲击响应序列它的值可以作为线性相位HzFIR陷波器的滤波器系数。在MATLAB命令行输入fdatool打开滤波器设计与分析工具将y作为滤波器系数导入(ImportFilterfromWorkspace)就可以查看设计滤波器的幅频响应、相频响应或冲击响应等如图所示。图Hz陷波器幅频、相频响应从图中可以看出陷波器幅频响应在Hz产生衰减通频带内幅度没有衰减在信号频带范围内陷波器具有线性相位特性。【例】利用如图所示的自适应陷波器对引入单频干扰的原始正弦信号进行恢复。MATLAB仿真程序如下:例程自适应陷波滤波器自适应陷波器仿真clearallclcN=总采样长度t=:Ns=sin(*pi*t)原始正弦信号A=干扰信号的幅值fai=pi干扰信号的相移n=A*cos(*pi*tfai)干扰信号x=sn引入正弦单频干扰的原始输入x=cos(*pi*t)参考输入x=sin(*pi*t)参考输入w=w=权矢量初值e=zeros(,N)y=u=fori=:NLMS算法y=w*x(i)w*x(i)e(i)=x(i)yw=wu*e(i)*x(i)w=wu*e(i)*x(i)endsubplot(,,)plot(t,s)title('原始正弦信号')subplot(,,)plot(t,x)title('加入单频干扰的原始信号')subplot(,,)plot(t,e)title('自适应陷波器输出')axis()subplot(,,)plot(t,se)title('信号误差')【程序运行结果】:图自适应陷波器仿真图中原始输入信号为一正弦信号。自适应滤波器的输入端与干扰单频信号频率相同但相位不同的正弦信号通过LMS算法自适应调整线性组合器的权系数自适应陷波器可较好的输出原始输入正弦信号。在信号误差的变化中当迭代次数增加时误差逐步趋于零满足设计要求。卡尔曼滤波器由于维纳滤波器难以用于实时处理满足不了世纪年代航天航空技术发展的要求于是人们开始探索新的理论和技术途径。世纪年代新出现的卡尔曼滤波理论用信号与噪声的状态空间模型取代了相关函数用时域的微分方程来表示滤波问题得到了递推估计算法适用于计算机实时处理它突破了维纳滤波的平稳过程的限制也没有无限时间的要求这一对维纳滤波理论的重大突破很快地被用于空间技术、自动控制和信号处理等领域。卡尔曼滤波由滤波方程和预测方程两部分组成。滤波基本方程设信号状态方程和量测方程分别为()()式中为信号的状态向量为量测向量和分别为状态噪声和量测噪声且为互不相关的高斯白噪声向量序列其协方差分别为和和分别为状态转移矩阵、输入矩阵和观测矩阵。卡尔曼滤波基本方程为()()()()()其中残差(新息)定义为()协方差矩阵为()一步预测基本方程卡尔曼一步预测基本方程为()()()式中为一步预测增益阵。【例】利用卡尔曼滤波器跟踪机动目标。例程基于卡尔曼滤波器的机动目标跟踪MakeapointmoveintheDplaneState=(xyxdotydot)Weonlyobserve(xy)X(t)=Φ(t)X(t)noise(Q)Y(t)=HX(t)noise(R)ss=statesizeos=observationsizeF=H=Q=*eye(ss)R=*eye(os)initx='targetinitialparametersinitV=*eye(ss)seed=rand('state',seed)randn('state',seed)T=x,y=samplelds(F,H,Q,R,initx,T)generatetargetdatakalmanfilterxfilt,Vfilt,VVfilt,loglik=kalmanfilter(y,F,H,Q,R,initx,initV)onesteppredictxsmooth,Vsmooth=kalmansmoother(y,F,H,Q,R,initx,initV)calculatetheerrorbetweenthefiltereddataandtherealdatadfilt=x(,:)xfilt(,:)msefilt=sqrt(sum(sum(dfilt^)))dsmooth=x(,:)xsmooth(,:)msesmooth=sqrt(sum(sum(dsmooth^)))figure()clfsubplot(,,)Holdonplot(x(,:),x(,:),'ks')plot(y(,:),y(,:),'g*')plot(xfilt(,:),xfilt(,:),'rx:')fort=:T,plotgaussd(xfilt(:,t),Vfilt(:,:,t))endholdofflegend('true','observed','filtered',)xlabel('x')ylabel('y')xinchesset(gcf,'units','inches')set(gcf,'PaperPosition',)print(gcf,'depsc','homeeecsmurphykpublichtmlBayesFiguresaimafilteredeps')print(gcf,'djpeg','r','homeeecsmurphykpublichtmlBayesFiguresaimafilteredjpg')figure()subplot(,,)holdonplot(x(,:),x(,:),'ks')plot(y(,:),y(,:),'g*')plot(xsmooth(,:),xsmooth(,:),'rx:')fort=:T,plotgaussd(xsmooth(:,t),Vsmooth(:,:,t))endholdofflegend('true','observed','smoothed',)xlabel('x')ylabel('y')xinchesset(gcf,'units','inches')set(gcf,'PaperPosition',)print(gcf,'djpeg','r','homeeecsmurphykpublichtmlBayesFiguresaimasmoothedjpg')print(gcf,'depsc','homeeecsmurphykpublichtmlBayesFiguresaimasmoothedeps')图卡尔曼滤波器跟踪机动目标仿真图中“”表示机动目标的真实轨迹“,”表示目标观测轨迹“…”表示经卡尔曼滤波后的目标轨迹圆表示跟踪波门。可以看出卡尔曼滤波器能较为准确地跟踪机动目标。函数kalmanfilter和kalmanupdate分别是实现卡尔曼滤波方程滤波和状态更新的代码。functionx,V,VV,loglik=kalmanfilter(y,A,C,Q,R,initx,initV,varargin)Kalmanfilterx,V,VV,loglik=kalmanfilter(y,A,C,Q,R,initx,initV,)INPUTS:y(:,t)theobservationattimetAthesystemmatrixCtheobservationmatrixQthesystemcovarianceRtheobservationcovarianceinitxtheinitialstate(column)vectorinitVtheinitialstatecovarianceOPTIONALINPUTS(stringvaluepairsdefaultinbrackets)'model'model(t)=mmeansuseparamsfrommodelmattimetones(,T)Inthiscase,alltheabovematricestakeanadditionalfinaldimension,ie,A(:,:,m),C(:,:,m),Q(:,:,m),R(:,:,m)However,initxandinitVareindependentofmodel()'u'u(:,t)thecontrolsignalattimet'B'B(:,:,m)theinputregressionmatrixformodelmOUTPUTS(whereXisthehiddenstatebeingestimated)x(:,t)=EX(:,t)|y(:,:t)V(:,:,t)=CovX(:,t)|y(:,:t)VV(:,:,t)=CovX(:,t),X(:,t)|y(:,:t)t>=loglik=sum{t=}^TlogP(y(:,t))Ifaninputsignalisspecified,wealsoconditiononit:eg,x(:,t)=EX(:,t)|y(:,:t),u(:,:t)Ifamodelsequenceisspecified,wealsoconditiononit:eg,x(:,t)=EX(:,t)|y(:,:t),u(:,:t),m(:t)osT=size(y)ss=size(A,)sizeofstatespacesetdefaultparamsmodel=ones(,T)u=B=ndx=args=vararginnargs=length(args)fori=::nargsswitchargs{i}case'model',model=args{i}case'u',u=args{i}case'B',B=args{i}case'ndx',ndx=args{i}otherwise,error('unrecognizedargument'args{i})endendx=zeros(ss,T)V=zeros(ss,ss,T)VV=zeros(ss,ss,T)loglik=fort=:Tm=model(t)ift==prevx=initx(:,m)prevV=initV(:,:,m)prevx=initxprevV=initVinitial=elseprevx=x(:,t)prevV=V(:,:,t)initial=endifisempty(u)x(:,t),V(:,:,t),LL,VV(:,:,t)=kalmanupdate(A(:,:,m),C(:,:,m),Q(:,:,m),R(:,:,m),y(:,t),prevx,prevV,'initial',initial)elseifisempty(ndx)x(:,t),V(:,:,t),LL,VV(:,:,t)=kalmanupdate(A(:,:,m),C(:,:,m),Q(:,:,m),R(:,:,m),y(:,t),prevx,prevV,'initial',initial,'u',u(:,t),'B',B(:,:,m))elsei=ndx{t}copyoverallelementsonlysomewillgetupdatedx(:,t)=prevxprevP=inv(prevV)prevPsmall=prevP(i,i)prevVsmall=inv(prevPsmall)x(i,t),smallV,LL,VV(i,i,t)=kalmanupdate(A(i,i,m),C(:,i,m),Q(i,i,m),R(:,:,m),y(:,t),prevx(i),prevVsmall,'initial',initial,'u',u(:,t),'B',B(i,:,m))smallP=inv(smallV)prevP(i,i)=smallPV(:,:,t)=inv(prevP)endendloglik=loglikLLendfunctionxnew,Vnew,loglik,VVnew=kalmanupdate(A,C,Q,R,y,x,V,varargin)KALMANUPDATEDoaonestepupdateoftheKalmanfilterxnew,Vnew,loglik=kalmanupdate(A,C,Q,R,y,x,V,)INPUTS:AthesystemmatrixCtheobservationmatrixQthesystemcovarianceRtheobservationcovariancey(:)theobservationattimetx(:)EX|y(:,:t)priormeanV(:,:)CovX|y(:,:t)priorcovarianceOPTIONALINPUTS(stringvaluepairsdefaultinbrackets)'initial'meansxandVaretakenasinitialconditions(soAandQareignored)'u'u(:)thecontrolsignalattimet'B'theinputregressionmatrixOUTPUTS(whereXisthehiddenstatebeingestimated)xnew(:)=EX|y(:,:t)Vnew(:,:)=VarX(t)|y(:,:t)VVnew(:,:)=CovX(t),X(t)|y(:,:t)loglik=logP(y(:,t)|y(:,:t))loglikelihoodofinnovatiosetdefaultparamsu=B=initial=args=vararginfori=::length(args)switchargs{i}case'u',u=args{i}case'B',B=args{i}case'initial',initial=args{i}otherwise,error('unrecognizedargument'args{i})endendxpred(:)=EXt|y(:,:t)Vpred(:,:)=CovXt|y(:,:t)ifinitialifisempty(u)xpred=xelsexpred=xB*uendVpred=Velseifisempty(u)xpred=A*xelsexpred=A*xB*uendVpred=A*V*A'Qende=yC*xprederror(innovation)n=length(e)ss=length(A)S=C*Vpred*C'RSinv=inv(S)ss=length(V)loglik=gaussianprob(e,zeros(,length(e)),S,)K=Vpred*C'*SinvKalmangainmatrixIfthereisnoobservationvector,setK=zeros(ss)xnew=xpredK*eVnew=(eye(ss)K*C)*VpredVVnew=(eye(ss)K*C)*A*V自适应滤波在通信系统中的应用在本节中我们将集中讨论波形表示、编码(特别是语音编码)和数字通信有关的几种应用。脉冲编码调制(PCM)PCM(PulseCodeModulation)的概念是年由AHReeves在国际电报公司(ITT)的巴黎实验室提出的年Bell实验室研制了第一台PCM数字电话终端使PCM编码不仅成为经典的语音编码技术而且也是PSTN系统中广泛采用的模拟语音信号的数字传输技术。PCM是为了用数字方式传输或存储信号对模拟信号进行量化的一种方法。PCM被广泛应用于电话通信中的语音传送和利用无线电传输的遥测系统中我们将主要讨论PCM在语音信处理方面的应用。图PCM系统框图图是PCM系统原理图PSTN系统中的语音信号频率范围为,Hz图中的LPF是为了保证输入语音信号频率在规定的范围内以防止混叠。采样保持是AD转换的基本单元其中采样频率为kHz。量化器为非均匀量化采用A律折线或律折线压缩特性。编码是将量化器输出的结果映射为若干位二进制数字值同时还要进行必要的信道码变换然后经过信道在信道中传输可能引入噪声干扰。接收端是发送端的逆过程先进行译码即进行DA转换后将数字信息变换为时间离散的模拟信号DA变换的过程中将发送端使用的A律或律折线压缩进行扩展最后经过恢复滤波器LPF恢复原模拟语音信号。根据ITUT的建议采样A律和μ律折线近似曲线进行非均匀量化压缩后用位二进制数的=码字进行编码。其中是最高有效位表示电平的极性表示()正电压表示负电压表示段落码律和律折线近似曲线自然折成=Aμ段用位二进制数恰好可以表示这段取间后位表示段内码为了简化内码采用均匀量化均匀分成层按以上规则产生的码字为自然二进制码在送入信道前段还需要进行码变换将其转换为折叠二进制码以降低信道误码对通信质量的影响。【例】若输入A率PCM编码器的正弦信号为采样序列为将其进行PCM编码给出编码器的输出码组序列。例程PCM编码首先A律折线量化的MATLAB程序实现如下:functiony=pcmA(x)A律折线压缩特性x=xmax(x)x归一化z=sign(x)语音信号是双极性信号负方向对称x=abs(x)fori=:length(x)if(x(i)>=)(x(i)<)第一、二段斜率均为视为一条线段y(i)=*x(i)elseif(x(i)>=)(x(i)<)y(i)=*x(i)elseif(x(i)>=)(x(i)<)y(i)=*x(i)elseif(x(i)>=)(x(i)<)y(i)=*x(i)elseif(x(i)>=)(x(i)<)y(i)=x(i)elseif(x(i)>=)(x(i)<)y(i)=*x(i)elseif(x(i)>=)(x(i)<=)y(i)=*x(i)endendy=z*y在命令行调用pcmA函数即可实现本例的不均匀量化即:>>n=::>>y=sin(*pi*n)y=>>z=pcmA(y)z=接下来位二进制编码的MATLAB程序实现如下:functionf=pcmcode(y)位二进制PCM编码f=zeros(length(y),)z=sign(y)y=y*y=fix(y)y=abs(y)fori=:length(y)ify(i)==y(i)=endendfori=:length(y)forj=::f(i,j)=fix(y(i)(^j))y(i)=mod(y(i),(^j))endendfori=:length(y)ifz(i)==f(i,)=elsef(i,)=endend在命令行调用pcmcode函数可实现本例的位二进制编码即:>>n=::>>y=sin(*pi*n)>>z=pcmA(y)>>f=pcmcode(z)f=语音线性预测编码(LPC)在使用数字系统来存储和传输模拟信号时需要首先对模拟信号进行采样和量化把模拟信号转化成数字信号。在采样的过程中按照采样定理的要求应使信号的采样频率大于信号中最高频率分量的倍。在量化中则要求按照特定条件下可以接受的质量标准以尽可能少的比特数来表示信号。在采样和量化之后通过编码器将码字赋值给每个符号。一般情况下量化电平与响应的码字是均匀分布的但是也有一些特殊应用场合其量化电平不均匀分布。假定量化器的范围为。其中Δ是量化步长B是比特数。量化器的这个范围应该覆盖整个信号差值称为量化误差表示为的动态范围。量化前的信号样本与量化后的信号样本之间的x(n)()其取值范围为。如果用信噪比来表示可以得到()上式表示在量化过程中每增加一位二进制数信噪比将增加dB。一般来说在确定的量化等级条件下量化信号的信噪比与信号的动态范围成反比即减小信号的动态范围可以使量化信号的信噪比得到提高。另外量化误差信号e(n)总是比原始信号x(n)x(n)在量化等级不或量化信号来得更小因此如果采用来代替进行传输变的条件下可以提高信噪比或者在信噪比不变的情况下需要较少的量化等级即较少的比特数。线性预测编码(LinearPredictionCoding,LPC)是通信系统中普遍采用的一种线性编码方式。在图中左半部分为编码器右半部分为译码器。在发送端将离散时间信号送入系统进行编码经过与预测输出求差后得到差信号x(n)将其送入量化器得到量化后的误差信号对进行编码得到编码信号并进行传输。在接收端将接收的编码信号送入解码器进行解码得到经与求和运算得到输出信号。显然是对的估计。图线性预测编码系统原理框图由图可得出()和()这样()其中()表示差信号的量化误差。由式()和式()可以得到()这表明原始输入信号的量化误差与差信号d(n)的量化误差相等而不依赖于预测器的性质。如果传输信道的特性是理想的则应有c'(n)=c(n)由译码器重新产生的信号应满足x'(n)=x(n)。如果预测是准确的则d(n)的动态范围应小于x(n)的动态范围。这样在相同比特数下量化误差就会比较小或者从另一个角度来说在同样的量化误差下所使用的比特数会较少。LPC系统的性能依赖于预测的准确性。线性预测器实际上是依据若干个过去(或将来的)数据样本的线性组合来预测或估计当前样本值即()测误式中为线性预测系数其值由输入相邻样本的相关性决定以使预差最小为准则。由于输入信号x(n)的统计特性往往是未知的而且还可能是时变的因此很难设计出满足各种条件的固定参数的最优预测器。所以采用自适应线性预测器来替代图的固定参数预测器才能通过自适应预测器的不断调整和学习适应各种不同特性的信号并跟踪信号统计特性的变化得到较小的误差。对于AR模型的参数估计在MATLAB中可以用函数lpc实现对该系统全极点模型系数进行估计调用格式为a,g=lpc(x,n)其中x是要建模的信号n为模型的阶数在返回值中a为全极点IIR滤波器系数g为滤波器增益。如果不指定n则lpc使用默认值n=length(x)。【例】试用一个阶前向预测器来估计数据级数并与原始信号进行比较。例程语音线性预测编码在本例中将需要使用信号处理工具箱函数lpc、filter和xcorr其调用格式如下:y=filter(b,a,X)对矢量X的数据进行滤波滤波器由传递函数描述矢量b为传递函数分子系数矢量a为传递函数分母系数c,lags=xcorr(x,'option')计算矢量x的自相关序列其中coeff选项表示序列自相关延迟归一化为lags返回自相关估计c的范围阶前向预测器的MATLAB程序实现如下:randn('state',)返回随机数产生器的初始状态noise=randn(,)x=filter(,,noise)调用filter函数实现一维数字滤波x=x(:)a=lpc(x,)调用lpc函数estx=filter(a(:end),,x)e=xestxacs,lags=xcorr(e,'coeff')调用xcorr函数实现相关运算subplot(,,)plot(:,x(:),:,estx(:),'')title('OriginalSignalvsLPCEstimate')xlabel('SampleNumber')ylabel('Ampltitude')gridonlegend('OriginalSignal','LPCEstimate')subplot(,,)plot(lags,acs)title('AutocorrelationofthePredictionError')xlabel('Lags')ylabel('NormalizedValue')gridon【程序运行结果】图阶前向预测器对于时域IIR滤波器的设计用指定数量的极点和零点为信号序列建模在MATLAB信号处理工具箱中提供了函数prony函数调用格式为:b,a=prony(h,n,m)参数n和m分别表示滤波器的分子阶数和分母阶数h是时域的脉冲响应序列。如果h的长度小于n和m的最大值h将用零填补。调用后返回滤波器系数矢量a和b长度分别为n和m。【例】建立一个阶巴特沃思原始滤波器并从单位脉冲响应恢复出巴特沃思滤波器的系数。在命令行中调用prony函数恢复滤波器系数如下:>>b,a=butter(,)b=a=>>h=filter(b,a,zeros(,))>>bb,aa=prony(h,,)bb=aa=以上结果表明用函数prony依据单位脉冲响应所建立的新滤波器和原始滤波器系数吻合。此外MATLAB信号处理工具箱中可以使用stmcb来计算一个线性模型其调用格式为:b,a=stmcb(h,nb,na)stmcb函数按照脉冲响应h估计系统传递函数分子矢量b和分母矢量anb和na说明系统零极点个数。【例】建立一个阶的巴特沃思滤波器利用stmcb函数对该滤波器进行预测。首先建立一个阶的巴特沃思滤波器其幅频相频特性如图所示。>>b,a=butter(,)h=filter(b,a,zeros(,))freqz(b,a,)图阶巴特沃思滤波器然后利用stmcb函数进行预测预测滤波器的频率响应特性如图所示。>>bb,aa=stmcb(h,,)freqz(bb,aa,)stmcb函数也可以对给定输出和输入序列的系统进行估计识别。如某系统输入序列为x=通过系统滤波后输出为y利用stmcb函数可对该系统进行识别:>>x=>>y=filter(,,x)>>b,a=stmcb(y,x,,)图stmcb预测的滤波器特性b=a=可见理想情况下stmcb正确识别了已知输入和输出的系统得到的系统传递函数与filter函数中预设的参数一致。数字传输系统计算机输出的二进制序列或者经PCM编码的数字信号往往包含丰富的低频分量甚至直流分量因此称为数字基带信号。在一些具有低通特性的有线信道中特别是传输距离不太远的情况下数字基带信号可以直接传输称之为数字基带传输。而大多数信道如各种无线信道和光信道则是带通型的数字基带信号必须经过载波调制把频谱搬移到高载频处才能在信道中传输这种传输称为数字载波传输。数字基带传输基带传输系统的基本结构如图所示。它主要由信道信号形成器、信道、接收滤波器和抽样判决器组成为了保证系统的可靠工作还应有同步系统。信道信号形成器通过码型变换和波形变换使传输的基带信号与信道匹配减小码间干扰并利于同步提取与抽样判决。抽样判决器是在传输特性不理想及有噪声背景下在规定时刻(由位定时脉冲控制)对接收滤波器的输出波形进行抽样判决恢复基带信号。图数字基带传输系统数字基带信号的码型包括:单极性非归零码、单极性归零码、双极性归零码、数字双相码等不同形式码型具有不同的频谱结构应合理选择适合信道传输特性的。【例】使用双极性归零码表示二进制信息序列。分析:双极性归零码具有三个电平(、、)使用前半时间后半时间表示信息前半时间后半时间表示信息。每一个码元都有跳变沿包含接收定时信息同时对随机信号进行处理信息和出现概率相同所以码元直流分量小。例程双极性归零码双极性归零码的MATLAB程序实现如下:functiony=drz(x)x为二进制序列y为编码输出grid=t=:grid:length(x)时间序列fori=:length(x)编码过程ifx(i)==orj=:gridy(grid*(*i)j)=y(grid*(*i)j)=endelseforj=:gridy(grid*(*i)j)=y(grid*(*i)j)=endendendy=y,x(i)添加最后一位plot(t,y)axis(length(x))title('双极性归零码')编码输出如图所示。图双极性归零码采用不同码型的基带信号其抵抗码间干扰与噪声的性能也不同。对于二元码(如单极性非归零码和双极性非归零码)在采样时刻幅度只有两个电平(如幅度A和)接收端设定判决门限d规定接收信号r大于d判定信号幅度为A接收信号r小于d判定信号幅度为。单极性非归零码的平均信号功率为高斯噪声功率为误比特率为:()在双极性非归零码的平均信号功率为误比特率为。其中函数QMATLAB中可由erfc函数实现。【例】在AWGN信道中求单极性非归零码和双极性非归零码的误比特率。误码率曲线的MATLAB程序实现如下:例程AWGN信道的误码率SNR=::信噪比序列SNRindB=*log(SNR)single=erfc(sqrt(SNR))sqrt()单极性误比特率序列double=erfc(sqrt(SNR))sqrt()双极性误比特率序列semilogy(SNRindB,single)holdonsemilogy(SNRindB,double,'')axis()xlabel('SNRindB')ylabel('BERindB')title('基带传输误码率曲线')legend('单极性非归零码','双极性非归零码')误码率曲线图形表示为:图基带传输误码率曲线数字载波传输信道只有具有低通形式的传输特性才能够传输数字基带信号。实际信道中大多数具有带通传输特性因此要求用基带信号对载波进行调制产生各种已调数字信号。可以用数字基带信号改变正弦型载波的幅度、频率或相位即三种基本的数字调制方式(幅度键控ASK、频移键控PSK和相移键控PSK)也可以同时改变几个参数得到更高效的数字调制方式如正交振幅调制(QAM)。这里以PSK调制方式为例对数字调制与解调原理及MATLAB实现进行讨论。在M元载波相位调制中基带信号调制在载波的相位上相位范围通常在已调信号的载波相位为:。如BPSK调制两个载波相位是和πQPSK调制的四个载波相位可以是、π、π和π。对于M进制的相位调制一组M个载波调相信号的表达式为:()其中为脉冲成型函数为信号振幅。A【例】QPSK调制与解调的实现。分析:格雷码映射的π相位QPSK调制星座图如下:图QPSK星座比特编码映射关系其中b先传输决定了I的值b决定Q的值。在MATLAB中QPSK调制关系实现如下:例程QPSK调制与解调functionmodsymbols=qpsk(moduinput)inputbits=moduinputfulllen=length(inputbits)table=exp(j**pi*pi*pi*pi)生成QPSK星座图table=table()inmodu=reshape(inputbits,,fulllen)把输入序列分成两路modsymbols=table(*inmodu)实现输入比特流的QPSK映射利用距离矢量判决解调QPSK的过程也可以由MATLAB程序说明如下:functionoutputbits=deqpsk(inputsymbols)input=inputsymbolsd=zeros(,length(input))d是信道传输值与各星座点的距离m=zeros(,length(input))temp=jjjjsqrt()对应fori=:length(input)forn=:d(n,i)=(abs(input(i)*sqrt()temp(n)))^求出传输值与星座图所有点的“距离”endmindistance,constellationpoint=min(d(:,i))m(i)=constellationpointendA=debi(:,'leftmsb')对应于A=fori=:length(input)out(i,:)=A(m(i),:)最小值对应的星座点序号的二进制end表示即为解调结果outputbits=reshape(out',,length(input)*)在命令行验证qpsk与deqpsk函数的正确性如下:>>a=>>b=qpsk(a)b=ColumnsthroughiiiiiiiColumni>>c=deqpsk(b)c=扩展频谱通信系统扩展频谱(SpreadSpectrum)通信系统是指待传输信息的频谱用某个特定的扩频函数扩展后成为宽频带信号送入信道中传输再利用相应手段将其压缩从而获得传输信息的通信系统。扩频函数常用的是伪随机码(PN)序列。扩频通信技术具有优异的抗干扰性能第三代陆地移动通信系统正是以扩频CDMA技术为主要的多址方式。一般的扩频通信系统模型如图所示。图扩频系统基本框图扩展频谱通信系统按工作方式分为直接序列扩展频谱系统(DSSS)、跳频扩频系统(FHSS)、跳时扩频系统(THSS)和混合方式。以直扩方式(DSSS)为例信源编码输出的二进制码流与一个高速二进制伪随机码(PN)相乘所得的复合信号就扩展了传输信息的带宽然后由复合信号对载波调制并送入信道传输接收端用一个和发射端同步的PN码进行相关处理并经数据检测恢复发送信号。由于窄带噪声和多径干扰与本地PN码不相关因此在相关处理中被削弱。扩频技术用高速PN码扩展待传输信息的目的可由香农(Shannon)信道容量公式描述:()即在高斯信道中当传输系统的信噪比下降时可用增加系统传输带宽W的方法保持信道容量C不变对于给定的信噪比可用增大传输带宽来获得较低的信息差错率。扩频信号常用于在因干扰而恶化的通信信道上来传送数字信号。信道干扰有人为干扰或来自信道其他用户的干扰(如蜂窝式电话或其他无线用户)。在通信以外的应用中扩展频谱信号用于获得雷达和导航中时延和速度的精确度量等。在多路通信系统中多个用户公用一个通信通道因此出现了来自其他用户的干扰。在任何给定时间这些用户中的一个子集可以通过公共信道同时发送信息到相应的接收机。为了使信道中传送的信号能相互区别需要将不同的伪随机模板叠加在每个发送信号中所以只要知道伪随机模板特定的接收机就能够恢复专门发给它的数据。这种通信技术(允许多个用户同时使用一个公用信道传送数据的技术)称为码分多址(CDMA)。下面以直扩(DSSS)系统中使用的PN码的产生和对窄带干扰的抑制效果为例对扩频系统进行简单分析。【例】构造一个产生m序列的线性移位寄存器。分析:伪随机(PN)序列的自相关特性与白噪声的自相关特性类似常用的m序列就是最大长度m器产移位寄存器序列其序列长度为可由带线性反馈的阶线性移位寄存生m序列具有双值自相关函数特性即自相关函数满足:构造一个产生m序列的线性移位寄存器首先要确定本原多项式然后根据本原多项式构造出m序列移位寄存器逻辑图。如线性移位寄存器阶数n=则m序列长度p=可以由m序列的不可约多项式表中查出两个本原多项式其逻辑图如图和所示:图图在MATLAB中产生m序列的程序如下:例程m序列的线性移位寄存器functionseq=mseq(connections)connections为移位寄存器连接关系connections=m=length(connections)L=^m移位寄存器长度registers=zeros(,m)寄存器初始值seq()=registers(m)序列第一位fori=:Ltemp=forj=:mtemp=tempconnections(j)*registers(j)endnewregcont()=mod(temp,)fork=:mnewregcont(k)=registers(k)endregisters=newregcont当前寄存器内容seq(i)=registers(m)序列下一位end按照图和产生的m序列为:图m序列的产生【例】在扩频系统中分析直扩信号对正弦干扰的抑制。分析:由随机数发生器产生二进制(对应)信息数据每个信息比特重复次对应于每个信息比特所包含的伪码码片数。包含每一个比特次重复的序列与另一个随机数发生器产生的PN序列相乘。然后在该序列上叠加方差为的高斯白噪声和形式为的正弦干扰其中且正弦干扰信号的振幅满足条件。在解调器进行与PN序列的互相关运算并且将组成各信息比特的个样本进行求和(积分运算)。加法器的输出送到判决器将信号和门限值进行比较确定传送的数据为还是计数器用来记录判决器的错判数目。MATLAB程序代码如下:例程分析直扩信号对正弦干扰的抑制直扩信号对正弦干扰的抑制Lc=每比特码片数目A=第一个正弦干扰信号的幅度A=第二个正弦干扰信号的幅度A=第三个正弦干扰信号的幅度A=第四个无干扰w=以弧度表示的正弦干扰信号频率SNRindB=::fori=:length(SNRindB)计算误码率errprb(i)=ssPe(SNRindB(i),Lc,A,w)errprb(i)=ssPe(SNRindB(i),Lc,A,w)errprb(i)=ssPe(SNRindB(i),Lc,A,w)endSNRindB=::fori=:length(SNRindB)计算无干扰情况下误码率errprb(i)=ssPe(SNRindB(i),Lc,A,w)endfigure()绘图输出semilogy(SNRindB,errprb,'bo',SNRindB,errprb,'gx',SNRindB,errprb,'r',SNRindB,errprb,'k*')gridontitle('扩频系统不同幅度正弦干扰下误码率曲线')xlabel('SNRindB')ylabel('BERindB')legend('幅值为的正弦干扰','幅值为的正弦干扰','幅值为的正弦干扰','无正弦干扰')其中误码率计算函数如下:functionp=ssPe(snrindB,Lc,A,w)snr=^(snrindB)sgma=噪声的标准方差设为固定值Eb=*sgma^*snr达到设定信噪比所需的信号幅度Echip=EbLc每码片能量N=传送的比特数numoferr=数据产生噪声干扰译码差错计算fori=:N产生下一个数据比特temp=randiftemp<data=elsedata=endforj=:Lc将其重复Lc次repeateddata(j)=dataendforj=:Lc产生比特传输用的PN序列temp=randiftemp<pnseq(j)=elsepnseq(j)=endendtranssig=sqrt(Echip)*repeateddata*pnseq发送信号noise=sgma*randn(,Lc)方差为sgma^的高斯白噪声n=(i)*Lc:i*Lcinterference=A*sin(w*n)干扰recsig=transsignoiseinterference接收信号temp=recsig*pnseqdecisionvariable=sum(temp)从接收信号中产生判决变量ifdecisionvariable<进行判决dicision=elsedicision=endifdicision~=data若存在传输错误计数器累加numoferr=numoferrendendp=numoferrN计算误码率仿真结果如下:图直扩信号对正弦干扰的抑制上图所示结果为Lc=时在个不同振幅的正弦干扰下的误码率。在误码率运算中加性噪声的方差是固定的。总共进行次运算运算中信号能量按照信噪比要求取值。小结自适应滤波在无需先验知识的条件下通过自学习适应或跟踪外部环境的非平稳随机变化并最终逼近维纳滤波和卡尔曼滤波的最佳滤波性能因此自适应滤波及其应用非常广泛。本章首先介绍维纳滤波。维纳滤波要求输入随机过程是广义平稳的且输入过程的统计特性是已知的。然而由于输入过程的统计特性常常是未知的、变化的客观条件限制维纳滤波的应用。然后详细讨论了LMS滤波器的标准形式它是线性自适应滤波的重要基础具有算法简单、运算量小、易于实现等优点。然而LMS的主要缺点是收敛速度较慢而且收敛速度与输入信号的统计特性有关。之后介绍卡尔曼滤波及其在目标跟踪中的应用。卡尔曼滤波理论用信号与噪声的状态空间模型取代了相关函数用时域的微分方程来表示滤波问题得到了递推估计算法适用于计算机实时处理。最后讨论了自适应滤波在信号处理和通信系统中的综合应用包括系统辨识、干扰对消、窄带频率增强、自适应均衡和扩频通信编码等方面的应用

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/168

MATLAB数字信号处理与应用

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利