📄 mydpll.m
字号:
%数字锁相环,跟踪输入方波信号的频率和相位
%by fyoung
samp=zeros(1,10000); %输入信号
samp=rand(1,10000); %初始为随机信号
DCO_cnt=1; %生成参考频率的计数器
DCO_Prd=100; %分频:1/100
DCO_Prd_2=50;
syn_out=zeros(1,10000); %存储本地参考信号
DCO_out=0; %当前本地参考信号
diff_save=zeros(1,10000); %存储异或门输出信号
cnt_g=0; %计数器g1的计数
for i=1:10000 %模拟输入信号
if(samp(i)>0.5) samp(i)=1;
else
samp(i)=0;
end
end
for i=0:3
samp(2*i*1000+1:(2*i+1)*1000-20)=1;
samp((2*i+1)*1000+10:(2*i+2)*1000)=0;
end
samp(2500:2520)=0;
for i=1:14
samp(7000+2*i*100+1:7000+(2*i+1)*100-10)=1;
samp(7000+(2*i+1)*100+10:7000+(2*i+2)*100)=0;
end
for i=2:10000 %以下为锁相环程序
if DCO_cnt2<DCO_Prd_2 %分频输出,为1/100的分频器
DCO_out=1;
else
DCO_out=0;
end
if (bitxor(DCO_out,samp(i))==1) %异或操作
DCO_Opr_Flag=1;
else
DCO_Opr_Flag=0;
end
if DCO_Opr_Flag==1 %f1:频率高
DCO_cnt2=DCO_cnt2+1;
elseif DCO_Opr_Flag==0
cnt_f=cnt_f+1;
if(cnt_f>100) %g1:频率只有f1的1/100
cnt_f=0;
DCO_cnt2=DCO_cnt2+1;
end
end
if(DCO_cnt2>=DCO_Prd) DCO_cnt2=0;end
syn_out(i)=DCO_out;
diff_save(i)=DCO_Opr_Flag;
end
figure,plot(samp);hold on;plot(syn_out-1.1,'g');plot(diff_save+1.1,'r')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -