一、课程设计的内容了解锁相环的工作原理及其应用,在Windows 操作系统下,以Matlab为操作平台,对一个简单的二阶环进行仿真要对代码进行分析和说明,并对选择参数不同所产生的仿真结果进行比较和分析.二、课程设计的要求与数据在指导老师的指导下,学生独立完成二阶环的仿真要求要有原仿真代码,并附有对代码的说明要有二阶环的仿真结果和分析论文内容要求深刻、充实要有完整的测试结果和给出各种参数指标,要进行计算机演示程序和给出运行结果三、课程设计应完成的工作1、认真阅读课程设计讲义,知道课程设计的内容2、认真查看课本,熟悉锁相环的原理、了解其应用3、收集有关课程设计的资料,进一步了解锁相环在实际中的应用4、熟悉Matlab仿真软件的使用5、在Matlab的环境下,对二阶环进行仿真,并对仿真结果进行分析撰写课程设计报告,并作出总结四、课程设计进程安排五、应收集的资料及主要参考文献 锁相技术 张厥盛 郑继禹 万心平等编著 西安电子科技大学出版社 精通Matlab 6.5 张志涌, 北京航空航天大学出版社,2005年MATLAB程序设计与实例应用 张铮, 中国铁道出版社,2006发出任务书日期:2007年12月24日 指导教师签名: 计划完成日期: 2008年1月10日 基层教学单位责任人签章:主管院长签章:摘要锁相环具有载波跟踪特性、调制跟踪特性和低门限特性等优良特性,已经在无线电技术的技术各个领域得到了广泛的应用。
20世纪50年代后期随着空间技术的发展,锁相环用于对宇宙飞行目标的跟踪、遥测和遥控60年代初随着数字通信系统的发展,锁相环应用愈广,例如为相干解调提取参考载波、建立位同步等具有门限扩展能力的调频信号锁相鉴频器也是在60年代初发展起来的在电子仪器方面,锁相环在频率合成器和相位计等仪器中起了重要作用. MATLAB仿真软件已成为适合多学科、多种工作平台的功能强大、界面友好、方便快捷、语言自然并且开放性强的大型优秀应用软件,已经也已成为国内外高等院校高等数学、数值分析、数字信号处理、自动控制理论以及工程应用等课程的基本教学工具对锁相环仿真的实现,使用Matlab来实现是方便快捷的关键字: 锁相环 , Matlab,仿真 目录课程设计任务书………………………………………………………………………2摘要……………………………………………………………………………………4…………………………………………………………………61.1锁相环的基本组成………………………………………………………………61.2锁相环的工作原理………………………………………………………………6鉴相器…………………………………………………………………………6 低通滤波器……………………………………………………………………6 压控振荡器……………………………………………………………………72.信号流程图…………………………………………………………………………73.二阶环仿真源程序代码及仿真结果………………………………………………83.1 程序代码…………………………………………………………………………83.2仿真结果………………………………………………………………………124.课程设计总结……………………………………………………………………155.参考文献………………………………………………………………………..151.锁相环的理论分析1.1锁相环的基本组成锁相环路是一种反馈控制电路,简称锁相环(PLL,Phase-Locked Loop)。
锁相环的特点是:利用外部输入的参考信号控制环路内部振荡信号的频率和相位因锁相环可以实现输出信号频率对输入信号频率的自动跟踪,所以锁相环通常用于闭环跟踪电路锁相环在工作的过程中,当输出信号的频率与输入信号的频率相等时,输出电压与输入电压保持固定的相位差值,即输出电压与输入电压的相位被锁住,这就是锁相环名称的由来锁相环通常由鉴相器(PD,Phase Detector)、环路滤波器(LF,Loop Filter)和压控振荡器(VCO,Voltage Controlled Oscillator)三部分组成,锁相环组成的原理框图如图示:锁相环中的鉴相器又称为相位比较器,它的作用是检测输入信号和输出信号的相位差,并将检测出的相位差信号转换成uD(t)电压信号输出,该信号经低通滤波器滤波后形成压控振荡器的控制电压uC(t),对振荡器输出信号的频率实施控制1.2锁相环的工作原理鉴相器锁相环中的鉴相器(PD)通常由模拟乘法器组成,利用模拟乘法器组成的鉴相器电路如图示:鉴相器的工作原理是:设外界输入的信号电压和压控振荡器输出的信号电压分别为: 式中的ω0为压控振荡器在输入控制电压为零或为直流电压时的振荡角频率,称为电路的固有振荡角频率。
则模拟乘法器的输出电压uD为: 低通滤波器低通滤波器(LF)的将上式中的和频分量滤掉,剩下的差频分量作为压控振荡器的输入控制电压uC(t)即uC(t)为: 式中的ωi为输入信号的瞬时振荡角频率,θi(t)和θO(t)分别为输入信号和输出信号的瞬时位相,根据相量的关系可得瞬时频率和瞬时位相的关系为: 即 则,瞬时相位差θd为 对两边求微分,可得频差的关系式为 上式等于零,说明锁相环进入相位锁定的状态,此时输出和输入信号的频率和相位保持恒定不变的状态,uc(t)为恒定值当上式不等于零时,说明锁相环的相位还未锁定,输入信号和输出信号的频率不等,uc(t)随时间而变 压控振荡器压控振荡器(VCO)的压控特性如图示该特性说明压控振荡器的振荡频率ωu以ω0为中心,随输入信号电压uc(t)线性地变化,变化的关系如下: 上式说明当uc(t)随时间而变时,压控振荡器(VCO)的振荡频率ωu也随时间而变,锁相环进入“频率牵引”,自动跟踪捕捉输入信号的频率,使锁相环进入锁定的状态,并保持ω0=ωi的状态不变。
2.信号流程图锁相环的原理框图如下:其工作过程如下:(1)压控振荡器的输出Uo经过采集并分频;(2)输出和基准信号同时输入鉴相器;(3)鉴相器通过比较上述两个信号的频率差,然后输出一个直流脉冲电压Ud;(4)Ud进入到滤波器里面,滤除高频成分后得到信息Ue;(5)Ue进入到压控震荡器VCO里面,控制频率随输入电压线性地变化;(6)这样经过一个很短的时间,VCO的输出就会稳定于某一期望值3.二阶环仿真源程序代码及仿真结果3.1 程序代码:% File: cw2b=0; w2c=0; % initialize integratorsyd=0; y=0; % initialize differential equationtfinal = 50; % simulation timefs = 100; % sampling frequencydelt = 1/fs; % sampling periodnpts = 1+fs*tfinal; % number of samples simulatedydv = zeros(1,npts); % vector of dy/dt samplesyv = zeros(1,npts); % vector of y(t) samples%% beginning of simulation loopfor i=1:npts t = (i-1)*delt; % time if t<20 ydd = 4*exp(-t/2)-3*yd*abs(y)-9*y; % de for t<20 else ydd = 4*exp(-t/2)-3*yd-9*y; % de for t>=20 end w1b=ydd+w2b; % first integrator - step 1 w2b=ydd+w1b; % first integrator - step 2 yd=w1b/(2*fs); % first integrator output w1c=yd+w2c; % second integrator - step 1 w2c=yd+w1c; % second integrator - step 2 y=w1c/(2*fs); % second integrator output ydv(1,i) = yd; % build dy/dt vector yv(1,i) = y; % build y(t) vector end % end of simulation loopplot(yv,ydv) % plot phase plane xlabel('y(t)') % label x axisylabel('dy/dt') % label y zxis% End of script file.%kk = 0;while kk == 0k = menu('Phase Lock Loop Postprocessor',... 'Input Frequency and VCO Frequency',... 'Input Phase and VCO Phase',... 'Frequency Error','Phase Error','Phase Plane Plot',... 'Phase Plane and Time Domain Plots','Exit Program'); if k == 1 plot(t,fin,'k',t,fvco,'k') title('Input Frequency and VCO Freqeuncy') xlabel('Time - Seconds');ylabel('Frequency - Hertz');pause elseif k ==2 pvco=phin-phierror;plot(t,phin,t,pvco) title('Input Phase and VCO Phase') xlabel('Time - Seconds');ylabel('Phase - Radians');pause elseif k == 3 plot(t,freqerror);title('Frequency Error') xlabel('Time - Seconds');ylabel('Frequency Error - Hertz');pause elseif k == 4 plot(t,phierror);title('Phase Error') xlabel('Time - Seconds');ylabel('Phase Error - Radians');pause elseif k == 5 ppplot elseif k == 6 subplot(211);phierrn = phierror/pi; plot(phierrn,freqerror,'k');grid; title('Phase Plane Plot');xlabel('Phase Error /Pi'); ylabel('Frequency Error - Hertz');subplot(212) plot(t,fin,'k',t,fvco,'k');grid title('Input Frequency and VCO Freqeuncy') xlabel('Time - Seconds');ylabel('Frequency - Hertz');subplot(111) elseif k == 7 kk = 1; end end % End of script file.%clear all % be safedisp(' ') % insert blank line fdel = input('Enter the size of the frequency step in Hertz > ');fn = input('Enter the loop natural frequency in Hertz > ');lambda = input('Enter lambda, the relative pole offset > ');disp(' ')disp('Accept default values:')disp(' zeta = 1/sqrt(2) = 0.707,')disp(' fs = 200*fn, and')disp(' tstop = 1')dtype = input('Enter y for yes or n for no > ','s');if dtype == 'y' zeta = 1/sqrt(2); fs = 200*fn; tstop = 1;else zeta = input('Enter zeta, the loop damping factor > ');fs = input('Enter the sampling frequency in Hertz > ');tstop = input('Enter tstop, the simulation runtime > ');end %npts = fs*tstop+1; % number of simulation pointst = (0:(npts-1))/fs; % default time vectornsettle = fix(npts/10); % set nsettle time as 0.1*nptstsettle = nsettle/fs; % set tsettle% The next two lines establish the loop input frequency and phase % deviations.fin = [zeros(1,nsettle),fdel*ones(1,npts-nsettle)];phin = [zeros(1,nsettle),2*pi*fdel*t(1:(npts-nsettle))];disp(' ') % insert blank line% end of script file pllpre.m w2b=0; w2c=0; s5=0; phivco=0; %initializetwopi=2*pi; % define 2*pitwofs=2*fs; % define 2*fsG=2*pi*fn*(zeta+sqrt(zeta*zeta-lambda)); % set loop gaina=2*pi*fn/(zeta+sqrt(zeta*zeta-lambda)); % set filter parametera1=a*(1-lambda); a2 = a*lambda; % define constantsphierror = zeros(1,npts); % initialize vectorfvco=zeros(1,npts); % initialize vector% beginning of simulation loopfor i=1:npts s1=phin(i) - phivco; % phase error s2=sin(s1); % sinusoidal phase detector s3=G*s2; s4=a1*s3; s4a=s4-a2*s5; % loop filter integrator input w1b=s4a+w2b; % filter integrator (step 1) w2b=s4a+w1b; % filter integrator (step 2) s5=w1b/twofs; % generate fiter output s6=s3+s5; % VCO integrator input w1c=s6+w2c; % VCO integrator (step 1) w2c=s6+w1c; % VCO integrator (step 2) phivco=w1c/twofs; % generate VCO output phierror(i)=s1; % build phase error vector fvco(i)=s6/twopi; % build VCO input vectorend% end of simulation loopfreqerror=fin-fvco; % build frequency error vector% End of script file.function [] = pplane(x,y,nsettle)% Plots the phase plane with phase in the range (-pi,pi)ln = length(x);maxfreq = max(y);minfreq = min(y);close % Old figure discardedaxis([-1 1 1.1*minfreq 1.1*maxfreq]); % Establish scalehold on % Collect info for new figj = nsettle;while j < ln i = 1; while x(j) < pi & j < ln a(i) = x(j)/pi; b(i) = y(j); j = j+1; i = i+1; end plot(a,b,'k') a = []; b = []; x = x - 2*pi;endhold offtitle('Phase-Plane Plot')xlabel('Phase Error / Pi')ylabel('Frequency Error in Hertz')grid % End of script file.% ppplot.m is the script file for plotting phase plane plots. If the % phase plane is constrained to (-pi,pi) ppplot.m calls pplane.m.kz = 0;while kz == 0 k = menu('Phase Plane Options',... 'Extended Phase Plane',... 'Phase Plane mod(2pi)',... 'Exit Phase Plane Menu'); if k == 1 phierrn = phierrn/pi; plot(phierrn,freqerror,'k') title('Phase Plane Plot') xlabel('Phase Error /Pi') ylabel('Frequency Error - Hertz') grid pause elseif k == 2 pplane(phierrn,freqerror,nsettle+1) pause elseif k == 3 kz = 1; end end % End of script file.3.2仿真结果: G=30时的仿真图形: Accept the tentative values:the first loop frequency is 5Enter y for yes or n for no > yEnter the loop gain >30 输入环路增益为30Enter the sampling frequency in Hertz > 1200 Enter tstop, the simulation runtime > 5 仿真时间为5秒 相平面图 输入频率和VCO频率图 输入相位和VCO相位图 频率差图 相位差图 G=40时的仿真图形: Accept the tentative values:the first loop frequency is 5Enter y for yes or n for no > yEnter the loop gain >40 输入环路增益为40Enter the sampling frequency in Hertz > 1200 Enter tstop, the simulation runtime > 5 仿真时间为5秒相平面图 输入频率和VCO频率图 相位差图 频率差图 输入频率和VCO频率图 输入相位和VCO相位图 4.课程设计总结二阶锁相环的设计与仿真,在Matlab的操作环境下实现。
该设计涉及到对锁相环的原理、参数选择及应用等各方面的知识,还要求我们对Matlab仿真环境的熟悉和操作能力锁相环具有载波跟踪特性、调制跟踪特性和低门限特性等优良特性,已经成为电子技术领域中一种相当有效的技术手段,获得了了越来越广泛的应用在电子技术发展飞速的今天,掌握锁相环的原理及其应用,不管是在学习上还是在以后的工作上,都会产生巨大的作用学校在强调提高学生的理论水平的时候,也加强了对学生实际动手能力的要求,把学生对理论与实际相结合的操作能力作为了对学生的一项重要考核由于我们在以前已经有做过Matlab的相关仿真实验和设计,对Matlab的操作环境还是比较熟悉的而我们在设计的过程中碰到的主要困难是,在给定的锁相环条件下,如何选择合适的参数,以至于在Matlab仿真的条件下,可以得到理想中的结果锁相技术是这学期开的课,学习的时间不长,对锁相环的了解页仅是基于概念的表面理解要完成该课程设计,我们就必须深入地理解锁相环的组成、原理及其应用因此要做的准备工作还是不少在一个多星期的摸索中,设计完成得不是很好尽管如此,我还是从中学到了很多东西通过这个设计,我进一步了解了锁相的相关技术及其应用,也进一步加深了对Matlab仿真的了解,在一定程度上提高了自己的逻辑思维能力和解决问题的能力,有助与加深自己对所学知识的了解和使用,增强了自己的动手能力,为我今后的学习和工作积累了一定的动手实践经验,让我从中受益匪浅。
5.参考文献[1]锁相技术. 张厥盛 万心平等,西安带电子科技大学出版社,2006 年[2]精通Matlab 6.5 张志涌, 北京航空航天大学出版社,2005年[3] MATLAB程序设计与实例应用 张铮, 中国铁道出版社,2006。