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

📄 dpsk_dem.asv

📁 光通信中归零型(占空比可调)差分相位调制信号建模与仿真分析
💻 ASV
字号:
clear
pack
%**************************************************************************
%input7为7位,特定码序列
input7=[1 0 0 1 1 0 1];
%input7=[1 0 0 1 1 0 1 1 0 0 1 1 0 1 1 0 0 1 1 0 1 1 0 0 1 1 0 1 1 0 0 1 1 0 1 1 0 0 1 1 0 1];
%**************************************************************************
%prbs为127位,7级伪随机码序列
% p7=[0 0 0 1 0 0 1];
% prbs7=[ones(1,120) input7];
% for ii=1:120;
%     a=input7;                              %用于保存输入
%     b=input7.*p7;                          %产生下位的输入
%     c=sum(b);
%     d=mod(c,2);
%     prbs7(121-ii)=d;
%     input7=[d a(1) a(2) a(3) a(4) a(5) a(6)];
% end
% a=0;                                       %论证1 0出现概率是相等
% b=0;
% for ii=1:127;
%     if prbs7(ii)==1
%         a=a+1;
%     else
%         b=b+1;
%     end
% end
% a=a/127;
% b=b/127;
%**************************************************************************
%脉冲初始情况的设定,
fs=2e10;                                    %输入电信号时钟,其输出光脉冲时钟为电信号两倍
ts=1/(2*fs);;                               %脉冲时间
p0=1;                                       %设定输入光功率
%**************************************************************************
%注意:光频率取值对解调结果十分重要!f0必须是fs的整数倍,载波才完整;因为f0很大,所以n必须较大,解调结果才能比较精确
%注意:对于f0=1.93e14,n要在1024*8以上才行。
%f0=1.93e14;                                %光波频率
f0=2e11;
n=1024*1;                                       %单个脉冲的取样点
%**************************************************************************
%pulse为单个脉冲的包络函数
%t为产生全部脉冲的离散点,注意值域起始点的选定,占空比不同则起始点不同, 否则脉冲显示不完整        
t=linspace(0.5*ts,1.5*ts,n); 
pulse=p0*(cos((pi/2)*sin(2*pi*fs*t)));                      %占空比为1/3
% t=linspace(0.0*ts,1.0*ts,n);                
% pulse=p0*(sin((pi/2)*sin(2*pi*fs*t)))*exp(i*pi/2);        %占空比为2/3,即CSRZ-DPSK
% t=linspace(0.75*ts,1.75*ts,n);
% pulse=p0*(cos((pi/4)*(sin(2*pi*2*fs*t)-1)))*exp(i*pi/4);  %占空比为1/2,注意此时调制频率为2*fs,不同于以上两种。
%**************************************************************************
%完成整个序列取样点的采集(加载数据信号到相位中)
%input7为特定序列,换成prbs7则为伪随机序列,
%注意:如换为input7,则以下有两处需要替换,并且上面prbs7的产生要注释掉。
m=length(input7);                                %m为序列中脉冲个数
k=m*n;                                          %k为全部取样点的个数,即序列中脉冲个数*单个脉冲的取样点
sequence=zeros(1,k);                            %产生取样点矩阵,sequence为不加载波的序列                              
for ii=1:m;
   if input7(ii)==1;                             %input7为特定序列,换成prbs7则为伪随机序列
       for jj=1:n;
      sequence(((ii-1)*n+jj))=pulse(jj);      %数据为1则相位相同
       end
   else
       for jj=1:n;
      sequence(((ii-1)*n+jj))=-pulse(jj);     %数据为0则相位相反
       end
   end
end
%**************************************************************************
%加上载波信号
wt=linspace(0,(ts*m),k);
sequence_c=sequence.*exp(i*2*pi*f0*wt);         %sequence_c为加载波的序列,exp(i*2*pi*f0*wt)为光载波
%**************************************************************************
%画出时域的图形
%画出单个脉冲的形状
% figure(1);
% plot(t/1e-12,pulse);                        %pulse为不加载波的单个脉冲
% figure(2);
% pulse_c=pulse.*exp(i*2*pi*f0*t);                    %pulse_c为加载波的单个脉冲
% plot(t/1e-12,pulse_c);
% %画出全部伪随机序列脉冲形状
% figure(3);
% plot(wt/1e-12,sequence);                          %输出不加载波的脉冲序列
% figure(4);
% plot(wt/1e-12,sequence_c);                        %输出加载波的脉冲序列

%************************************************************************
%DPSK解调过程。
%将DPSK信号平均分成两路,将其中一路信号延时一个bit周期,然后将这两路信号干涉相加
%y_delay1bit为延时1bit的信号
for ii=1:m;
    for j=1:n;
        if ii==1;
            sequence_delay1bit(j)=0;
        else
            sequence_delay1bit((ii-1)*n+j)=sequence_c((ii-2)*n+j);
        end
    end
end
%out_des为输出的相消端
for ii=1:m;
    for j=1:n;
        if ii==1;
            out_des(j)=0;
        else
            out_des((ii-1)*n+j)=0.5*sequence_c((ii-1)*n+j)-0.5*sequence_c((ii-2)*n+j);%相消端是将一路原始信号减去另一路延时信号
        end
    end
end
%out_con为输出的相长端
for ii=1:m;
    for j=1:n;
        if ii==1;
            out_con(j)=0;
        else
            out_con((ii-1)*n+j)=0.5*sequence_c((ii-1)*n+j)+0.5*sequence_c((ii-2)*n+j);%相长端是将一路原始信号加上另一路延时信号
        end
    end
end
figure(5);
subplot(4,1,1),plot(wt/1e-12,abs(sequence_c).^2);ylabel('original');
subplot(4,1,2),plot(wt/1e-12,abs(sequence_delay1bit).^2);ylabel('delay');
subplot(4,1,3),plot(wt/1e-12,abs(out_con).^2);ylabel('constructive');
subplot(4,1,4),plot(wt/1e-12,abs(out_des).^2);ylabel('distructive');
% subplot(4,1,1),plot(wt/1e-12,sequence_c);ylabel('original');
% subplot(4,1,2),plot(wt/1e-12,sequence_delay1bit);ylabel('delay');
% subplot(4,1,3),plot(wt/1e-12,out_con);ylabel('constructive');
% subplot(4,1,4),plot(wt/1e-12,out_des);ylabel('distructive');








⌨️ 快捷键说明

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