⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 carrier_syn.m

📁 这是关于扩频通信中载波同步的程序,希望对大家能有用.
💻 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')

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -