糖葫芦 发表于 2005-12-30 00:13

[求助]:如何用MATLAB实现一个二阶锁相环?参数任意

求高人指点,如何用MATLAB实现一个二阶锁相环?参数任意,就是想找几个例子看看,多谢了!

suffer 发表于 2006-1-1 11:02

回复:(糖葫芦)[求助]:如何用MATLAB实现一个二阶锁...

仿真锁相环工作到一定时间后达到锁定状态的过程 <BR><BR>
<P>    本程序仿真了锁相环工作到一定时间后达到锁定状态的过程,程序采用的是一阶RC低通滤波器即二阶一型环,环路方程为:<SUB><IMG src="http://course.cuc.edu.cn/course/shen/htm/005/101.files/image008.gif"></SUB>,输入信号设为<SUB><IMG src="http://course.cuc.edu.cn/course/shen/htm/005/101.files/image016.gif"></SUB>,简单考虑,这里采用初始相位为0。程序默认输入信号频率f<SUB>in</SUB>=800kHz,压控振荡器固有振荡频率f<SUB>oo</SUB>=1000kHz。</P>
<P>源代码:</P>
<P>function=My_pll(fin,foo,Ad,T,Ao,th0,dt);</P>
<P>global A fi fo</P>
<P>if nargin&lt;1;fin=640;foo=800;Ad=1;Ao=2*pi*fo;T=80/foo;th0=;th0=;dt=1/(4*foo);end;</P>
<P>%--------------------------------------------------------------------------</P>
<P>fo=foo;fi=fin;A=Ao*Ad;</P>
<P>dT=1/(10*fi);=ode45('solver',0:dT:T,th0);</P>
<P>t1=0:dt:T-dt;</P>
<P>th1=spline(t,th(:,1),t1);th2=spline(t,th(:,2),t1);</P>
<P>f=th2/(2*pi)+fo;</P>
<P>%--------------------------------------------------------------------------</P>
<P>mstr=['锁相环路动态仿真--绿色:瞬时频差Δw(t)||红色:相位差 φе(t)||黄色:零参考线。'];</P>
<P>figure('Units','normal','pos',,'color','k');%,'color','k'</P>
<P>set(gcf,'NumberTitle','off','Name',mstr);</P>
<P>dtt=f-fi;</P>
<P>t2=0:dt:t1(end/2);</P>
<P>y=sin(0*t2);</P>
<P>dth=pi/2*fi*t1+th1;</P>
<P>for i=1:160</P>
<P>subplot(211);</P>
<P>plot(t1(1:i),dtt(1:i),'g',t1(i),dtt(i),'ro',t2,y,'y:');</P>
<P>axis off;legend('瞬时频差' ,);</P>
<P>subplot(212); </P>
<P>plot(t1(1:i),dth(1:i),'r',t1(i),dth(i),'go',t2,y,'y:'); legend('相位差' ,);</P>
<P>axis off;</P>
<P>pause(0.000001);</P>
<P>uicontrol('pos',,'string','关闭','fontsize',12, ...</P>
<P>   'callback','close(gcbf)'); </P>
<P>end</P>
<P>pause(0.001);</P>
<P>m=40;n=length(t1);n2=n-m-250;</P>
<P>T=m*dt;dt=0.1*dt;fs=1/dt;</P>
<P>tt1=0:dt:T; tt2=t1(n2)+tt1-20*dt;</P>
<P>vc=th2/Ao;</P>
<P>v2=spline(t1(n2:n),vc(n2:n),tt2);</P>
<P>y2=vco(v2,fo,fs);</P>
<P>y12=sin(2*pi*fi*tt2);</P>
<P>nstr=['环路的捕获过程动态演示---绿:vo(t) 红:vi(t) fi='];</P>
<P>nstr=;</P>
<P>H2=figure('Name',nstr,'Num','off','Pos',,'color','k');</P>
<P>for i=1:210</P>
<P>plot(tt2(1:i),y2(1:i),'g',tt2(1:i),y12(1:i),'-.r',tt2(i),y2(i),'ro',tt2(i),y12(i),'go');</P>
<P>set(gca,'units','pix','pos',);legend('输出信号' ,'输入信号',);</P>
<P>axis off;pause(0.0000001);</P>
<P>uicontrol('pos',,'string','关闭','fontsize',12, ...</P>
<P>   'callback','close(gcbf)');</P>
<P>End</P>

糖葫芦 发表于 2006-1-1 12:06

多谢!看起来挺麻烦的,我再好好想想,再次感谢

wangxiaoya2001 发表于 2006-8-6 01:04

请问suffer:如何设置kv、kd,环路滤波器的参数设置一定,是不是在vco振荡频率+-lf带宽内的频率都能锁定呢?
从lf的带宽出发如何得到二阶lf的系数呢?即:如何设置lf的系数呢?谢谢
页: [1]
查看完整版本: [求助]:如何用MATLAB实现一个二阶锁相环?参数任意