您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 锁相环仿真(基于MATLAB)
锁相环仿真1.锁相环的理论分析1.1锁相环的基本组成锁相环路是一种反馈控制电路,简称锁相环(PLL,Phase-LockedLoop)。锁相环的特点是:利用外部输入的参考信号控制环路内部振荡信号的频率和相位。因锁相环可以实现输出信号频率对输入信号频率的自动跟踪,所以锁相环通常用于闭环跟踪电路。锁相环在工作的过程中,当输出信号的频率与输入信号的频率相等时,输出电压与输入电压保持固定的相位差值,即输出电压与输入电压的相位被锁住,这就是锁相环名称的由来。锁相环通常由鉴相器(PD,PhaseDetector)、环路滤波器(LF,LoopFilter)和压控振荡器(VCO,VoltageControlledOscillator)三部分组成,锁相环组成的原理框图如图示:锁相环中的鉴相器又称为相位比较器,它的作用是检测输入信号和输出信号的相位差,并将检测出的相位差信号转换成uD(t)电压信号输出,该信号经低通滤波器滤波后形成压控振荡器的控制电压uC(t),对振荡器输出信号的频率实施控制。1.2锁相环的工作原理1.2.1鉴相器锁相环中的鉴相器(PD)通常由模拟乘法器组成,利用模拟乘法器组成的鉴相器电路如图示:鉴相器的工作原理是:设外界输入的信号电压和压控振荡器输出的信号电压分别为:式中的ω0为压控振荡器在输入控制电压为零或为直流电压时的振荡角频率,称为电路的固有振荡角频率。则模拟乘法器的输出电压uD为:11.2.2低通滤波器低通滤波器(LF)的将上式中的和频分量滤掉,剩下的差频分量作为压控振荡器的输入控制电压uC(t)。即uC(t)为:式中的ωi为输入信号的瞬时振荡角频率,θi(t)和θO(t)分别为输入信号和输出信号的瞬时位相,根据相量的关系可得瞬时频率和瞬时位相的关系为:即则,瞬时相位差θd为对两边求微分,可得频差的关系式为上式等于零,说明锁相环进入相位锁定的状态,此时输出和输入信号的频率和相位保持恒定不变的状态,uc(t)为恒定值。当上式不等于零时,说明锁相环的相位还未锁定,输入信号和输出信号的频率不等,uc(t)随时间而变。1.2.3压控振荡器压控振荡器(VCO)的压控特性如图示该特性说明压控振荡器的振荡频率ωu以ω0为中心,随输入信号电压uc(t)线性地变化,变化的关系如下:2上式说明当uc(t)随时间而变时,压控振荡器(VCO)的振荡频率ωu也随时间而变,锁相环进入“频率牵引”,自动跟踪捕捉输入信号的频率,使锁相环进入锁定的状态,并保持ω0=ωi的状态不变。2.信号流程图锁相环的原理框图如下:其工作过程如下:(1)压控振荡器的输出Uo经过采集并分频;(2)输出和基准信号同时输入鉴相器;(3)鉴相器通过比较上述两个信号的频率差,然后输出一个直流脉冲电压Ud;(4)Ud进入到滤波器里面,滤除高频成分后得到信息Ue;(5)Ue进入到压控震荡器VCO里面,控制频率随输入电压线性地变化;(6)这样经过一个很短的时间,VCO的输出就会稳定于某一期望值。3.二阶环仿真源程序代码及仿真结果3.1程序代码:%File:c6_nltvde.mw2b=0;w2c=0;%initializeintegratorsyd=0;y=0;%initializedifferentialequationtfinal=50;%simulationtimefs=100;%samplingfrequencydelt=1/fs;%samplingperiodnpts=1+fs*tfinal;%numberofsamplessimulatedydv=zeros(1,npts);%vectorofdy/dtsamplesyv=zeros(1,npts);%vectorofy(t)samples%%beginningofsimulationloopfori=1:nptst=(i-1)*delt;%timeift20ydd=4*exp(-t/2)-3*yd*abs(y)-9*y;%defort20elseydd=4*exp(-t/2)-3*yd-9*y;%defort=20endw1b=ydd+w2b;%firstintegrator-step1w2b=ydd+w1b;%firstintegrator-step2yd=w1b/(2*fs);%firstintegratoroutput3w1c=yd+w2c;%secondintegrator-step1w2c=yd+w1c;%secondintegrator-step2y=w1c/(2*fs);%secondintegratoroutputydv(1,i)=yd;%builddy/dtvectoryv(1,i)=y;%buildy(t)vectorend%endofsimulationloopplot(yv,ydv)%plotphaseplanexlabel('y(t)')%labelxaxisylabel('dy/dt')%labelyzxis%Endofscriptfile.%File:pllpost.m%kk=0;whilekk==0k=menu('PhaseLockLoopPostprocessor',...'InputFrequencyandVCOFrequency',...'InputPhaseandVCOPhase',...'FrequencyError','PhaseError','PhasePlanePlot',...'PhasePlaneandTimeDomainPlots','ExitProgram');ifk==1plot(t,fin,'k',t,fvco,'k')title('InputFrequencyandVCOFreqeuncy')xlabel('Time-Seconds');ylabel('Frequency-Hertz');pauseelseifk==2pvco=phin-phierror;plot(t,phin,t,pvco)title('InputPhaseandVCOPhase')xlabel('Time-Seconds');ylabel('Phase-Radians');pauseelseifk==3plot(t,freqerror);title('FrequencyError')xlabel('Time-Seconds');ylabel('FrequencyError-Hertz');pauseelseifk==4plot(t,phierror);title('PhaseError')xlabel('Time-Seconds');ylabel('PhaseError-Radians');pauseelseifk==5ppplotelseifk==6subplot(211);phierrn=phierror/pi;plot(phierrn,freqerror,'k');grid;title('PhasePlanePlot');xlabel('PhaseError/Pi');ylabel('FrequencyError-Hertz');subplot(212)plot(t,fin,'k',t,fvco,'k');gridtitle('InputFrequencyandVCOFreqeuncy')xlabel('Time-Seconds');ylabel('Frequency-Hertz');subplot(111)elseifk==74kk=1;endend%Endofscriptfile.%File:pllpre.m%clearall%besafedisp('')%insertblanklinefdel=input('EnterthesizeofthefrequencystepinHertz');fn=input('EntertheloopnaturalfrequencyinHertz');lambda=input('Enterlambda,therelativepoleoffset');disp('')disp('Acceptdefaultvalues:')disp('zeta=1/sqrt(2)=0.707,')disp('fs=200*fn,and')disp('tstop=1')dtype=input('Enteryforyesornforno','s');ifdtype=='y'zeta=1/sqrt(2);fs=200*fn;tstop=1;elsezeta=input('Enterzeta,theloopdampingfactor');fs=input('EnterthesamplingfrequencyinHertz');tstop=input('Entertstop,thesimulationruntime');end%npts=fs*tstop+1;%numberofsimulationpointst=(0:(npts-1))/fs;%defaulttimevectornsettle=fix(npts/10);%setnsettletimeas0.1*nptstsettle=nsettle/fs;%settsettle%Thenexttwolinesestablishtheloopinputfrequencyandphase%deviations.fin=[zeros(1,nsettle),fdel*ones(1,npts-nsettle)];phin=[zeros(1,nsettle),2*pi*fdel*t(1:(npts-nsettle))];disp('')%insertblankline%endofscriptfilepllpre.m%File:pll2sin.mw2b=0;w2c=0;s5=0;phivco=0;%initializetwopi=2*pi;%define2*pitwofs=2*fs;%define2*fsG=2*pi*fn*(zeta+sqrt(zeta*zeta-lambda));%setloopgaina=2*pi*fn/(zeta+sqrt(zeta*zeta-lambda));%setfilterparametera1=a*(1-lambda);a2=a*lambda;%defineconstantsphierror=zeros(1,npts);%initializevectorfvco=zeros(1,npts);%initializevector%beginningofsimulationloop5fori=1:nptss1=phin(i)-phivco;%phaseerrors2=sin(s1);%sinusoidalphasedetectors3=G*s2;s4=a1*s3;s4a=s4-a2*s5;%loopfilterintegratorinputw1b=s4a+w2b;%filterintegrator(step1)w2b=s4a+w1b;%filterintegrator(step2)s5=w1b/twofs;%generatefiteroutputs6=s3+s5;%VCOintegratorinputw1c=s6+w2c;%VCOintegrator(step1)w2c=s6+w1c;%VCOintegrator(step2)phivco=w1c/twofs;%generateVCOoutputphierror(i)=s1;%buildphaseerrorvectorfvco(i)=s6/twopi;%buildVCOinputvectorend%endofsimulationloopfreqerror=fin-fvco;%buildfrequencyerrorvector%Endofscriptfile.function[]=pplane(x,y,nsettle)%Plotsthephaseplanewithphaseintherange(-pi,pi)ln=length(x
本文标题:锁相环仿真(基于MATLAB)
链接地址:https://www.777doc.com/doc-4817773 .html