📄 shiyan_u0.m
字号:
clear;
clc;
close all;
SNRdB=12;
%P_input_average=1e-6; %单位(mW)
%%%**************canshu1************************
nsp=1;%理想放大器
hv=6.626*10^(-34)*1.94*10^(14);%h*f,为光子能量,f为波长是1550纳米的频率
N0=nsp*hv;%噪声功率谱密度
%Eb=SNR*N0;%SNR=Eb/N0;
Eb=N0*10^(SNRdB/10);
detaPHI=0;%phase error
Rb=10^10;%1G Hzh
N=2^5;%2DPSK设N=2^5,4DPSK设N=2^10
T=1/Rb;%0.000001s
%Long=58;%Km
%c=3.0000e+005;%km/s
%wavelength=1.5500e-006;%nm
%D=16;%ps/nm.Km
%b2=2.0400e-023;%s^2/Km,b2=20.4ps^2/Km
Bo=1.2*Rb;%适用于RZ-2-DPSK,经过调试,1.4:0.2:2.2这些值中1.4为最佳;
Be=0.5*Rb;%同上
Miu=1.4;
Tao=2;
T0=Miu*(1/Bo+1/Be);
L=floor(Tao*N*Bo*T);
M=floor(Tao*Bo*T0);
%*************************************************************************
M1=2;%for RZ-2-DPSK 定义50%归零码时用到
%*****************************************************************************************************************************
b2=2.0400e-023;%s^2/Km,b2=20.4ps^2/Km
Long=58;%Km
detaPHI1=0;detaPHI2=0;
%*****************************************************************************************************************************
%%*********PMD相关参数*******
Dp=0.1; %ps/sqrt(Km),PMD参数。
detaTao=0;%Dp*sqrt(Long); %差分群时延DGD。
eta=0.5; %使两个PSP对称,尚须参考
%***************************
%传输信号参数定义
Bitrate=10*1e9; %信号传输速率定义
Samplerate=32; %每比特周期采样率定义
code_order=5; %伪随机二进制码阶数定义
Period=1/Bitrate;
Bitlength=2^code_order; % 2^code_order-1
V=Bitrate; %信号传输速率(10Gbit/s或者40Gbit/s)
T=Period; %比特周期(10Gbit/s系统为100ps;40Gbit/s系统为25ps)
N=Bitlength; %码长(127)
R=Samplerate; %每比特周期采样率(32)
%T_delta=T/R; %取样时间间隔
%F_sample=linspace(-R*V/2,+R*V/2-V/N,N*R); %取样频率分量序列(2*pi*F_sample才为角频率序列)
%*******************************************************************************************************************************
%*******************************************************************************************************************************
%激光器和调制器参数设置
%P_max=P_input_average; %激光器发射的峰值功率(mW)
%P_ext=30; %调制器消光比(dB)
%P_min=P_max*10^(-P_ext/10); %调制器0码输出光功率
%DPSK,幅值固定
%Eb=P_input_average;
A_dpsk=sqrt(Eb/T);
%chirp=0; %调制器啁啾系数
%laser_width=10e6; %激光器线宽(MHz)
T_delta=2*T/R; %在2*T上采样R个点
%********************************************************************************************************************************
%********************************************************************************************************************************
%% 光信号部分 %光发射机模型(包括编码、采样、滤波和调制)
%************************************************************************
%%%产生debrujin序列%%%
fbconnection=[1 0 0 0 0 1];
KK1=de_sequence(fbconnection); %得到的KK1为原信号的PRBS序列
%%%*******************************************%4-DPSK的差分码变换过程
a1=zeros(1,length(KK1)/2);
b1=zeros(1,length(KK1)/2);
for ii=1:(length(KK1)/2)
a1(ii)=KK1(2*ii-1);
b1(ii)=KK1(2*ii); %第一步先将原码分成上下两路
end
c1=zeros(1,length(KK1)/2);
d1=zeros(1,length(KK1)/2);
c10=0;d10=0; %作为参考码元
c1(1)=~a1(1)&~b1(1)&c10 | ~a1(1)&b1(1)&d10 | a1(1)&b1(1)&~c10 | a1(1)&~b1(1)&~d10;
d1(1)=~a1(1)&~b1(1)&d10 | ~a1(1)&b1(1)&~c10 | a1(1)&b1(1)&~d10 | a1(1)&~b1(1)&c10;
for ii=2:(length(KK1)/2)
c1(ii)=~a1(ii)&~b1(ii)&c1(ii-1) | ~a1(ii)&b1(ii)&d1(ii-1) | a1(ii)&b1(ii)&~c1(ii-1) | a1(ii)&~b1(ii)&~d1(ii-1);
d1(ii)=~a1(ii)&~b1(ii)&d1(ii-1) | ~a1(ii)&b1(ii)&~c1(ii-1) | a1(ii)&b1(ii)&~d1(ii-1) | a1(ii)&~b1(ii)&c1(ii-1);
end %第二步根据逻辑关系求出4-DPSK差分编码
%*********************************************%对上下两路信号分别周期采样
%%%%%%%RZ 码的采样%%%
jj=0;
for n=1:length(c1)
for T_Sample=0:T_delta:(2*T-T_delta)
t=(n-1)*2*T+T_Sample;
jj=jj+1;
pt=cos(0.5*pi*( cos( pi*t/(M1*T) ) )^2);%%%%M1=2for 4-DPSK,
UU1(jj)=c1(n)*pt;
UU2(jj)=d1(n)*pt;
end
end
% figure(1)
% plot(UU)
% hold on
% title('伪随机码序列输出')
%Bessel滤波用以产生NRZ码
%U_fft=fft(UU);
%[b,a]=besself(10,2*pi*V*4); %10阶Bessel函数,截止频率=(Bitrate*4)GHz
%w=0:2*pi/(N*T):((2*pi*R/T)-2*pi/(N*T));
%h=freqs(b,a,w);
%for kk=(N*R/2+1):N*R
% h(kk)=conj(h(N*R+2-kk));
%end
%U=ifft(abs(h).*U_fft);
% U=abs(U);
%%%%%%%调试
U1=UU1;U2=UU2;
%%%%%%%%
%激光器发射功率、线宽、啁啾和调制器的消光比
%激光器输出:A(t)=sqrt(P(t))*exp(j*fai(t))
%光源的相位噪声fai(t)包括两个部分:1.光源线宽造成的,对应于频率起伏;2.光源调制造成的(光功率变化)
jj=0;
for nn=1:length(c1) %对于所有码
for tt=1:R %对于一个周期
jj=jj+1;
fai(jj)=3*pi/4+( U1(jj)*2+U2(jj) )*pi/4;
A(jj)=A_dpsk*exp(i*fai(jj)); %%%对相对码的绝对相移调制即是DPSK调制
end
end
% figure(2)
% plot(angle(A))
% title('激光器输出信号的瞬态相位')
%
% figure(3)
% plot(abs(fftshift(fft(A))).^2)
% title('激光器输出功率谱')
% figure(4);
%t = (1:N*R)/(N*T);
%B=A.*conj(A);
%plot(t,B)
%title('Optical Pulse Train')
%eyediagram(A, 2*R, 2, R/2);
% figure(1);
% eyescat(A,V/2,R*V,R/2); %调制器输出波形眼图
%title('光发射机输出信号眼图')
%*******************************************************************************************************************************
%光纤放大器(EDFA)和光接收机相关参数定义
G=1;%23.5; %光纤放大器固定增益(dB)
%c=2.9979*1e8;
%lamda = 1550*1e-9; % 波长 m
%q=1.6e-19; %电子电荷电量
%hp=6.63e-34; %Plank常数
%Vs=c/lamda; %光频率 1e14 Hz
%Bo=1.2*V; %光滤波器带宽
%Re=1; %光探测器的响应度
%ST=400e-24; %% 热噪声频谱密度
%I_dark=1e-9; %% dark current (1nA)
%Band_rate=0.9; %% ratio of receiver bandwidth with signal rate;
%Be=Band_rate*V; %% electrical filter bandwidth, receiver bandwidth:(NRZ: 0.75B; RZ: 0.5B)
% SNRdB=20;
% N0=Eb/(10.^(SNRdB/10));
%N0 = 10.^(NF/10) * hp * Vs * (10.^(G/10) - 1) ; %/ (10.^(G/10));
%mu = 1.4;
%T0 = mu*(1/Bo + 1/Be);
%M = 2.^( ceil( log2( T0/T_delta )));
%M=6;
%T0 = M*T_delta;
%mu = T0/(1/Bo + 1/Be);
%%%%%%%%%%%%%%%%%%%%%%%%%DPSK
H1=zeros(0,N*R);
H2=zeros(0,N*R);
for l=-N*R/2:(N*R/2-1)
f=l/(N*2*T);
H1f=(exp(-i*4*pi*f*T)+exp(-i*pi/4)*exp(i*detaPHI1))/2;
H2f=(exp(-i*4*pi*f*T)-exp(-i*pi/4)*exp(i*detaPHI1))/2;
%Hf=exp(-i*2*pi^2*b2*Long*f.^2);
Hf=exp(i*2*pi*f*(-0.5*detaTao)-i*2*pi^2*b2*Long*f.^2);%%% Hf+
Hof=G*exp(-(f/(0.65*Bo)).^4);
H1(l+N*R/2+1)=Hf*Hof*H1f;
H2(l+N*R/2+1)=Hf*Hof*H2f;
end
Aw=fft(A);
H1=fftshift(H1);
Aw1=Aw.*H1;H1=ifftshift(H1);
A1=ifft(Aw1);
H2=fftshift(H2);
Aw2=Aw.*H2;H2=ifftshift(H2);
A2=ifft(Aw2);
IA=A1.*conj(A1)-A2.*conj(A2);%%%光探测器输出的差分电流
Aw=fft(IA);
[b,a]=besself(5,2*pi*Be);
w=((-N*R/2):(N*R/2-1))*2*pi/(2*N*T);
Hes=freqs(b,a,w);
Hes=fftshift(Hes);
vtr_d_k=ifft(abs(Hes).*Aw);%%%完成对电流信号的电滤波
%%求矩阵mtx_v%%%
term=zeros(1,N*R);%%中间变量,用于暂时存储一个数组
for ii=1:2*M
f=(ii-M-1)/T0;
Hof=G*exp(-(f/(0.65*Bo)).^4);
H1f=Hof*(exp(-i*4*pi*f*T)+exp(-i*pi/4)*exp(i*detaPHI1))/2;
H2f=Hof*(exp(-i*4*pi*f*T)-exp(-i*pi/4)*exp(i*detaPHI1))/2;
term=Aw1*conj(H1f)-Aw2*conj(H2f);
w=(-N*R/2:(N*R/2-1))*2*pi/(2*N*T)-(ii-M-1)*2*pi/T0;
%w=([0:N*R/2-1 -N*R/2:-1])*2*pi/(N*T)-(ii-M-1)*2*pi/T0;
Hens=freqs(b,a,w);
mtx_v(ii,:)=ifft(term.*Hens);
end
%%求矩阵mtx_A%%
[mtx_A]=MXA_up(M,T0,T,detaPHI1,Be,Bo,G);
%%%%%%求vtr_z and vtr_b%%%
[vtr_U1,vtr_eig]=eig(mtx_A);
[vtr_U,value]=MXU(vtr_U1,vtr_eig,mtx_A,M);
vtr_lammda=real(value);
mtx_b=vtr_U'*mtx_v;
sigma=sqrt(N0/T0/2);
%w_t=normrnd(0,sigma,1,2*M)+i*normrnd(0,sigma,1,2*M);
for ii=1:N*R
w_t=normrnd(0,sigma,1,2*M)+i*normrnd(0,sigma,1,2*M);
vtr_b=mtx_b(:,ii);
vtr_z=vtr_U'*(w_t.');
n_k(ii)=sum( vtr_lammda.*abs(vtr_z+vtr_b./vtr_lammda).^2);
nu_k(ii)=sum( vtr_b.*conj(vtr_b)./vtr_lammda);
end
y_k=real(vtr_d_k+n_k-nu_k); %%%考虑PMD,求出y_k的正交分量
eyediagram(y_k,2*R,2,R/2);
figure(1);
eyediagram(vtr_d_k,2*R);
figure(2);
Ana_Res=zeros(1,6);
Ana_Res= SampleValueAnalyzer(y_k, N, R, a1);
OptTk=Ana_Res(1);%%%最佳判决时刻
Decth=Ana_Res(2);%%%最佳门限,直接设为0
dth=0;
xi_k=real( dth-vtr_d_k+nu_k);
%eyediagram(xi_k,R*2,2,R/2);
%figure(4)
%%%%%%%saddle point method 计算误码率
BER=zeros(1,N);
for ii=1:N
ii
jj=(ii-1)*R+16;
xi=xi_k(jj);
vtr_b=mtx_b(:,jj);
vtr_alpha=(vtr_b.*conj(vtr_b))./vtr_lammda;
vtr_beta=2*vtr_lammda*sigma^2;
BER(ii)=SaddlePointAppro(vtr_alpha,vtr_beta,xi,1-a1(ii));
end
% [m,n] = size(ber);
% Minber = sum(ber')/n; %% find the minimum ber and save it in file
% Minber = Minber';
% totalber = [ KK;ber];
% save BER\TotalBER.dat totalber -ascii
% save BER\Minber.dat Minber -ascii
% %*****************************************************************************
% %数据存储
% fid1=fopen('Fiber_BER.dat','a');
%'a'表示创建一个新文件或删除已存在的文件内容,并进行数据读写操作。
% fprintf(fid1,'%e %e\n',P_pin_av_preamplifier,BER);
% status=fclose('all');
% %************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -