BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / communications / #26409同步于 2016/3/23
Communications机器人发帖

小白问个锁相环的基础问题求大神

Vayne
2016/3/23镜像同步0 回复
%costas.m程序 %作用: costas环仿真 %作者: Duyong %编写日期:2014.11.30 clc; clear all; fs=32e6; %采样频率 fc=6e6; %载波频率 df=2000; %初始频偏 fi=fc+df; %输入信号载波频率 num=0.5e6; %数据长度 SNR=30; %输入数据信噪比(dB) ts=1/fs; %本地VCO的增益,也相当于最大捕获频偏 %(参见张厥盛等.锁相技术.西安电子科技大学出版社,1998: P11) K0=10e3; %环路滤波器系数 %(参见杜勇.数字调制解调技术的MATLAB与FPGA实现.电子工业出版社,2014:P361) c1=2^(-5); c2=2^(-11); %环路输入信号为单载波信号,信噪比为SNR(dB) din=sin(2*pi*fi*(0:num-1)*ts+pi); ******************************** datain=awgn(din,SNR); %设计IIR低通滤波器 N=3; %滤波器阶数 R=60; %阻带衰减(dB) Wn=9e6; %截止频率 [lpf_b,lpf_a]=cheby2(N,R,Wn*2/fs); %估计滤波器的增益(求取零点系数绝对值之和) %%%%%%%%%2015.7.18修改 %glpf=sum(abs(lpf_b)) glpf=lpf_b(1)/lpf_a(1); %%%%%%%%%%% %本地载波输出信号初值 o_sin=sin(2*pi*fc*(0:num-1)*ts); o_cos=cos(2*pi*fc*(0:num-1)*ts); %乘法运算输出信号初值 mult_i=zeros(1,num); mult_q=zeros(1,num); %鉴相器输出信号初值 pd=zeros(1,num); %本地载波频率初值 fo=ones(1,num)*fc; %开始costas载波同步环路处理 %对costas环路使用到的变量初始化 len=0; %低通滤波器输出数据长度 dfreq=0; %环路滤波器输出 temp=0; %环路滤波器中间变量 df=0; %每次需要更新的VCO输入电压 thera=0; %本地VCO输出信号的相位 n=2; %本地VCO频率更新的次数 lvco=20; %本地VCO频率更新的周期 m=0; %每个VCO频率更新周期内的计数值 for i=(lvco+1):(num); %乘法运算 mult_i(i)=datain(i).*o_sin(i); mult_q(i)=datain(i).*o_cos(i); %低通滤波 lpf_i=filter(lpf_b,lpf_a,mult_i(i-N-2:i)); lpf_q=filter(lpf_b,lpf_a,mult_q(i-N-2:i)); %鉴相乘法运算 len=length(lpf_i); %如果采用同相正交支路相乘运算获取鉴相值 %为使滤波器增益为1,需对滤波后的数据进行增益处理 %pd(i)=1/glpf*lpf_i(len)*lpf_q(len); %如果采用反正切运算求取鉴相值 %则不需要进行增益处理 pd(i)=atan(lpf_q(len)/lpf_i(len)); %环路滤波器 dfreq = c1*pd(i)+temp; temp = temp+c2*pd(i); %每lvco个采样点更新一次频率 if(mod(i,lvco)==0) df=dfreq; %计算上次更新时的本地载波相位 thera(n)=2*pi*lvco*ts*fo(i-1)+thera(n-1); n=n+1; end %更新本地载波频率及输出信号 fo(i)=fc+K0*df; m=mod(i,lvco); %要确保本地VCO输出相位连续的载波信号 o_sin(i+1)=sin(2*pi*fo(i)*m*ts+thera(n-1)); o_cos(i+1)=cos(2*pi*fo(i)*m*ts+thera(n-1)); end %绘制输入信号载波及本地VCO输入信号频率 t=(0:num-1)*ts*1000; %时间轴(ms) tfi=fi*ones(1,num); %输入信号频率 plot(t,tfi/1e6,'-.',t,fo/1e6,'-'); legend('输入信号载波频率','本地VCO信号频率'); xlabel('时间(ms)'); ylabel('频率(MHz)'); grid on; 程序看看反馈部分就行了。 我想知道除频偏外输入信号和vco输出的相位差对反馈有什么影响? 我现在理解的是假设没有固定相位差,如果Wi >W0,会有对应的正的相位,这样就知道要增大W0, 如果加了输入信号和vco输出的固有相位差,鉴相输出在 -Pi,PI都有可能,这样就不知道要增大还是减小vco频率了。 但是改了程序的初始相位差后(***标记处),环路也能锁定,这个如何理解呢
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。