声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3635|回复: 3

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

[复制链接]
发表于 2005-12-30 00:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
求高人指点,如何用MATLAB实现一个二阶锁相环?参数任意,就是想找几个例子看看,多谢了![em04]
回复
分享到:

使用道具 举报

发表于 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[tt1,t1,fs,fo]=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=[0 0];th0=[0 0];dt=1/(4*foo);end;</P>
<P>%--------------------------------------------------------------------------</P>
<P>fo=foo;fi=fin;A=Ao*Ad;</P>
<P>dT=1/(10*fi);[t,th]=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',[0.09 .12 .8 .8],'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('瞬时频差' ,[520 435 20 10]);</P>
<P>subplot(212); </P>
<P>plot(t1(1:i),dth(1:i),'r',t1(i),dth(i),'go',t2,y,'y:'); legend('相  位  差' ,[520 420 20 10]);</P>
<P>axis off;</P>
<P>pause(0.000001);</P>
<P>uicontrol('pos',[20 20 60 20],'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=[nstr num2str(fi) '(kHz),fo=' num2str(fo) '(kHz)'];</P>
<P>H2=figure('Name',nstr,'Num','off','Pos',[92 78 815 610],'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',[22 150 800 350]);legend('输出信号' ,'输入信号',[520 440 20 10]);</P>
<P>axis off;pause(0.0000001);</P>
<P>uicontrol('pos',[20 20 60 20],'string','关闭','fontsize',12, ...</P>
<P>   'callback','close(gcbf)');  </P>
<P>End</P>
 楼主| 发表于 2006-1-1 12:06 | 显示全部楼层
多谢!看起来挺麻烦的,我再好好想想,再次感谢
发表于 2006-8-6 01:04 | 显示全部楼层
请问suffer:如何设置kv、kd,环路滤波器的参数设置一定,是不是在vco振荡频率+-lf带宽内的频率都能锁定呢?
从lf的带宽出发如何得到二阶lf的系数呢?即:如何设置lf的系数呢?谢谢
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-28 02:29 , Processed in 0.090097 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表