www.pudn.com > carrier.rar > carrier_syn.m


clear; 
Rb=5000000/31;%信息数据速率 
lc=31;%扩频码的周期。扩频增益13dB 
Rc=Rb*lc;%码元速率 
 
L=1;%每个码元里sin信号的周期个数 
fc=Rc*L; %载波频率 
 
Q=8;%每个码元中采样个数 
fs=Rc*Q;%采样频率 
ts=1/fs;%每个取样点的时间间隔 
 
data_number=20;%信息数据的个数 
sample_number=data_number*lc*Q;%采样得到的总的数据个数 
t=0:ts:(sample_number-1)*ts; 
 
fo=fc;%经过带通采样后的中心频率 
interference_band_init=fo-100000;%第一个干扰的起始位置 
interference_band_final=fo+100000;%第一个干扰的终止位置 
%%取均匀分布的随机数据100个,即信息数据 
temp=rand(1,data_number); 
for i=1:data_number 
    if (temp(i)<0.5) 
        data1(i)=-1; 
        data((i-1)*lc+1:i*lc)=-1; 
    else 
        data1(i)=1; 
        data((i-1)*lc+1:i*lc)=1; 
    end 
end 
%%生成周期为31位的m序列 
register_current_value=[-1,-1,-1,-1,1];%5级移位寄存器 
feed_position=[1,4];%反馈抽头为1和4 
L=length(register_current_value); 
for i=1:data_number*lc   
    feed_value=0; 
    for j=1:length(feed_position) 
        feed_value=feed_value+register_current_value(feed_position(j));%计算反馈值 
    end 
    if feed_value==0 
        register_new_value(L)=-1; 
    else 
        register_new_value(L)=1; 
    end 
    register_new_value(1:L-1)=register_current_value(2:L); 
    register_current_value=register_new_value; 
    pn(i)=register_current_value(1); 
end 
% figure 
% stem(pn) 
%%信息数据和PN码相乘 
sig=data.*1; 
%%已调信号trans_sig 
for i=1:data_number*lc 
    resig((i-1)*Q+1:i*Q)=sig(i); 
end    
a=1;%载波的幅度值 
input_sig=a*resig.*cos(2*pi*(fc)*t);%调制 
 
figure; 
plot(input_sig); 
 
%%载波同步的初始值 
Wn=0.5*fc/fs;%截止频率 
ic=0.707; 
k=ic*fc; 
step=5;%滤波器阶数 
[B,A1]= butter(step,Wn,'low');%巴特沃思低通滤波器 
A=A1(2:step+1);%a0为1,故后面不需要相乘 
data_i_A=zeros(1,length(A)); 
data_i_B=zeros(1,length(B)); 
data_q_A=zeros(1,length(A)); 
data_q_B=zeros(1,length(B)); 
x_i=0; 
x_q=0; 
x_new=0; 
y=0; 
angle_value=0;%压控振荡器输出的初始相位 
%%载波同步的恢复 
%科斯塔斯环 
for i=1:length(input_sig) 
    output_sig(i)=sin(2*pi*(fc-2000)*t(i)+angle_value); 
    %分成两路,一路乘以压控振荡器输出的sin,另一路乘以压控振荡器输出的cos 
    e_i=input_sig(i)*cos(2*pi*(fc-2000)*t(i)+angle_value);%同相分量 
    e_q=input_sig(i)*sin(2*pi*(fc-2000)*t(i)+angle_value);%正交分量 
     
    nnn1(i)=e_i; 
    nnn2(i)=e_q; 
    %以下是经过低通滤波器,滤除高频分量 
    data_i_B(1:length(B)-1)=data_i_B(2:length(B));%调整系数 
    data_i_A(1:length(A)-1)=data_i_A(2:length(A)); 
    data_i_B(length(B))=e_i; 
    data_i_A(length(A))=x_i; 
    x_i=sum(data_i_B(length(B):-1:1).*B)-sum(data_i_A(length(A):-1:1).*A);%差分方程,实现低通滤波 
     
    nn1(i)=x_i; 
     
    data_q_B(1:length(B)-1)=data_q_B(2:length(B));%调整系数 
    data_q_A(1:length(A)-1)=data_q_A(2:length(A)); 
    data_q_B(length(B))=e_q; 
    data_q_A(length(A))=x_q; 
    x_q=sum(data_q_B(length(B):-1:1).*B)-sum(data_q_A(length(A):-1:1).*A);%差分方程,实现低通滤波 
        
    nn2(i)=x_q; 
    %到此,完成滤波 
     
    x_old=x_new; 
    x_new=x_i*x_q;%两路信号相乘,完成鉴相,得到相位差的正弦值x_new 
     
    y=ts/2*(x_new+x_old)+y;%通过环路滤波器,得到控制信号y 
    %压控振荡器 
    angle_value=y*k; 
    jieguo(i)=angle_value+pi/2; 
end 
 
figure 
plot(jieguo) 
figure 
plot(input_sig) 
figure 
plot(output_sig) 
figure 
plot(1:length(t),input_sig,'r',1:length(t),output_sig,'b',1:length(t),jieguo,'g')