Minor Changes here and there
This commit is contained in:
@@ -9,7 +9,7 @@ Bits = load("projects/MPI_August/bits.mat","Bits");
|
||||
Bits = Bits.Bits;
|
||||
|
||||
|
||||
mubuff = [0.7];
|
||||
mubuff = [0.5];
|
||||
|
||||
for m = 1:numel(mubuff)
|
||||
|
||||
|
||||
35
projects/MPI_August/auswertung/sir_curve.m
Normal file
35
projects/MPI_August/auswertung/sir_curve.m
Normal file
@@ -0,0 +1,35 @@
|
||||
M = wh.parameter.M.values(1);
|
||||
datarate = wh.parameter.datarate.values(1);
|
||||
sir = wh.parameter.sir.values;
|
||||
laser_linewidth = wh.parameter.laser_linewidth.values(1);
|
||||
pn_key = wh.parameter.pn_key.values;
|
||||
rop = wh.parameter.rop.values(1);
|
||||
|
||||
cols = linspecer(4);
|
||||
|
||||
cnt = 0;
|
||||
for pnk = pn_key
|
||||
|
||||
cnt = cnt+1;
|
||||
ber_ffe = wh.getStoValue('ber_ffe',M,datarate,sir,laser_linewidth,pnk,rop);
|
||||
ber_dcavg = wh.getStoValue('ber_dcavg',M,datarate,sir,laser_linewidth,pnk,rop);
|
||||
ber_adapt = wh.getStoValue('ber_adapt',M,datarate,sir,laser_linewidth,pnk,rop);
|
||||
ber_derem = wh.getStoValue('ber_dcrem',M,datarate,sir,laser_linewidth,pnk,rop);
|
||||
|
||||
% Create the initial plot
|
||||
figure(43);
|
||||
hold on; % Retain the plot so new points can be added without complete redraw
|
||||
plot(sir,ber_ffe',"LineWidth",1,"LineStyle","-","Marker",".","MarkerSize",10,"DisplayName","ber ffe",'Color',cols(1,:));
|
||||
plot(sir,ber_dcavg',"LineWidth",1,"LineStyle","-","Marker",".","MarkerSize",10,"DisplayName","ber dcavg",'Color',cols(2,:));
|
||||
plot(sir,ber_adapt',"LineWidth",1,"LineStyle","-","Marker",".","MarkerSize",10,"DisplayName","ber adapt",'Color',cols(3,:));
|
||||
plot(sir,ber_derem',"LineWidth",1,"LineStyle","-","Marker",".","MarkerSize",10,"DisplayName","ber dcrem",'Color',cols(4,:));
|
||||
|
||||
end
|
||||
|
||||
yline(3.8e-3,'DisplayName','HD-FEC');
|
||||
xlabel('Signal to Interference Ratio (dB)');
|
||||
ylabel('Bit Error Rate (BER)');
|
||||
title('Bit Error Rate vs. SIR');
|
||||
set(gca,'yscale','log');
|
||||
grid on;
|
||||
legend
|
||||
@@ -2,17 +2,18 @@
|
||||
%% Parameter to simulate and save
|
||||
params = struct;
|
||||
|
||||
params.M = [8];
|
||||
params.M = [4];
|
||||
params.datarate = [224];
|
||||
params.sir = [30]; %decibel = attenuation of interference path
|
||||
params.sir = [15:45]; %decibel = attenuation of interference path
|
||||
params.laser_linewidth = [1e6];
|
||||
params.pn_key = [1];
|
||||
params.rop = [-12:0];
|
||||
params.rop = [-7];
|
||||
|
||||
name = ['wh_',strrep(num2str(now),'.','')];
|
||||
|
||||
wh = DataStorage(params);
|
||||
|
||||
|
||||
wh.addStorage("ber_ffe");
|
||||
wh.addStorage("ber_dcavg");
|
||||
wh.addStorage("ber_adapt");
|
||||
@@ -37,7 +38,7 @@ for M = wh.parameter.M.values
|
||||
M8199 = M8199A("kover",kover);
|
||||
fdac = M8199.fdac;
|
||||
fsym = round(datarate / log2(M))*1e9;
|
||||
|
||||
rrcalpha = 0.05;
|
||||
Pform = Pulseformer("fsym",fsym,"fdac",4*fsym,"pulse","rrc","pulselength",16,"rrcalpha",rrcalpha);
|
||||
|
||||
% MAIN SIGNAL
|
||||
@@ -88,38 +89,43 @@ for M = wh.parameter.M.values
|
||||
|
||||
j_ = wh.parameter.sir.length;
|
||||
i_ = wh.parameter.rop.length;
|
||||
ber=zeros(j_,i_);
|
||||
|
||||
ber_ffe=zeros(j_,i_);
|
||||
ber_dcavg=zeros(j_,i_);
|
||||
ber_adapt=zeros(j_,i_);
|
||||
ber_dcrem=zeros(j_,i_);
|
||||
|
||||
patten=zeros(j_,i_);
|
||||
|
||||
for j = 1:j_
|
||||
parfor j = 1:j_
|
||||
|
||||
sir = wh.parameter.sir.values(j);
|
||||
|
||||
|
||||
%%%%% Interference Signal Fiber Prop %%%%%%
|
||||
Opt_sig_i = Fiber("fsimu",Opt_sig_i.fs,"fiber_length",link_length/1000,"alpha",0.3,"D",0,"lambda0",1310,"gamma",0,"Dslope",0.07).process(Opt_sig_i);
|
||||
Opt_sig_i_prop = Fiber("fsimu",Opt_sig_i.fs,"fiber_length",link_length/1000,"alpha",0.3,"D",0,"lambda0",1310,"gamma",0,"Dslope",0.07).process(Opt_sig_i);
|
||||
|
||||
Opt_sig_i = Amplifier("amp_mode","ideal_no_noise","gain_mode","output_power","amplification_db",Opt_sig.power-sir).process(Opt_sig_i);
|
||||
Opt_sig_i_prop = Amplifier("amp_mode","ideal_no_noise","gain_mode","output_power","amplification_db",Opt_sig.power-sir).process(Opt_sig_i_prop);
|
||||
|
||||
%%%%% ADD Interference and Main Signal %%%%%%
|
||||
Opt_sig = Opt_sig_i + Opt_sig;
|
||||
Opt_sig_comb = Opt_sig_i_prop + Opt_sig;
|
||||
|
||||
%%%%% Interference Signal Fiber Prop %%%%%%
|
||||
Opt_sig = Fiber("fsimu",Opt_sig.fs,"fiber_length",link_length/1000,"alpha",0.3,"D",0,"lambda0",1310,"gamma",0,"Dslope",0.07).process(Opt_sig);
|
||||
|
||||
Opt_sig_comb = Fiber("fsimu",Opt_sig_comb.fs,"fiber_length",link_length/1000,"alpha",0.3,"D",0,"lambda0",1310,"gamma",0,"Dslope",0.07).process(Opt_sig_comb);
|
||||
|
||||
% % MPI Channel
|
||||
% Opt = channel_model_mpi(Opt_sig,link_length,mpi_path,sir);
|
||||
|
||||
% Receiver ROP curve
|
||||
parfor i = 1:i_
|
||||
for i = 1:i_
|
||||
rop=wh.parameter.rop.values(i);
|
||||
|
||||
% Set ROP
|
||||
Rx_sig = Amplifier("amp_mode","ideal_no_noise","gain_mode","output_power","amplification_db",rop).process(Opt_sig);
|
||||
Rx_sig = Amplifier("amp_mode","ideal_no_noise","gain_mode","output_power","amplification_db",rop).process(Opt_sig_comb);
|
||||
patten(j,i) = Rx_sig.power;
|
||||
|
||||
%%%%%% Square Law %%%%%%
|
||||
Rx_sig = Photodiode("fsimu",fdac*kover,"dark_current",2e-08,"responsivity",1,"temperature",20).process(Rx_sig);
|
||||
Rx_sig = Photodiode("fsimu",fdac*kover,"dark_current",2e-08,"responsivity",1,"temperature",20,"nep",1.8e-11).process(Rx_sig);
|
||||
|
||||
%%%%%% Lowpass PhDiode %%%%%%
|
||||
Rx_sig = Filter('filtdegree',2,"f_cutoff",70e9,"fs",fdac*kover,"filterType",filtertypes.gaussian,"active",true).process(Rx_sig);
|
||||
@@ -153,7 +159,8 @@ for M = wh.parameter.M.values
|
||||
[~,errors_bm,ber_dcavg(j,i),errors] = calc_ber(Rx_bits.signal,Bits.signal,"skip_front",100,"skip_end",150,"returnErrorLocation",1);
|
||||
disp(['BER: ',sprintf('%.1E',ber_dcavg(j,i)),' - - ROP: ',num2str(patten(j,i)),'dBm - - PAM-',num2str(M),' - - ',num2str(fsym*1e-9),' GBd']);
|
||||
|
||||
Eq = FFE_adaptive_decision("epochs_tr",5,"epochs_dd",5,"len_tr",4096*2,"mu_dd",1e-4,"mu_tr",0,"order",25,"sps",2,"decide",1,"buffer_length",85); [EQ_sig] = Eq.process(Scpe_sig,Symbols);
|
||||
Eq = FFE_adaptive_decision("epochs_tr",5,"epochs_dd",5,"len_tr",4096*2,"mu_dd",1e-4,"mu_tr",0,"order",25,"sps",2,"decide",1,"buffer_length",85);
|
||||
[EQ_sig] = Eq.process(Scpe_sig,Symbols);
|
||||
Rx_bits = PAMmapper(M,0).demap(EQ_sig);
|
||||
[~,errors_bm,ber_adapt(j,i),errors] = calc_ber(Rx_bits.signal,Bits.signal,"skip_front",100,"skip_end",150,"returnErrorLocation",1);
|
||||
disp(['BER: ',sprintf('%.1E',ber_adapt(j,i)),' - - ROP: ',num2str(patten(j,i)),'dBm - - PAM-',num2str(M),' - - ',num2str(fsym*1e-9),' GBd']);
|
||||
@@ -181,11 +188,11 @@ for M = wh.parameter.M.values
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
||||
toc
|
||||
disp(['Simulated: ',num2str(cnt/endcnt*100),' %']);
|
||||
save(['C:\Users\Silas\Documents\MATLAB\imdd_simulation\projects\MPI_Juni\',name,'.mat'],"wh");
|
||||
wh.save('C:\Users\Silas\Documents\MATLAB\imdd_simulation\projects\MPI_August\auswertung\')
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -193,42 +200,6 @@ end
|
||||
|
||||
|
||||
|
||||
M = wh.parameter.M.values(1);
|
||||
datarate = wh.parameter.datarate.values(1);
|
||||
sir = wh.parameter.sir.values(1);
|
||||
laser_linewidth = wh.parameter.laser_linewidth.values(1);
|
||||
pn_key = wh.parameter.pn_key.values;
|
||||
rop = wh.parameter.rop.values;
|
||||
|
||||
cols = linspecer(4);
|
||||
|
||||
cnt = 0;
|
||||
for pnk = pn_key
|
||||
|
||||
cnt = cnt+1;
|
||||
ber_ffe = wh.getStoValue('ber_ffe',M,datarate,sir,laser_linewidth,pnk,rop);
|
||||
ber_dcavg = wh.getStoValue('ber_dcavg',M,datarate,sir,laser_linewidth,pnk,rop);
|
||||
ber_adapt = wh.getStoValue('ber_adapt',M,datarate,sir,laser_linewidth,pnk,rop);
|
||||
ber_derem = wh.getStoValue('ber_dcrem',M,datarate,sir,laser_linewidth,pnk,rop);
|
||||
|
||||
% Create the initial plot
|
||||
figure(43);
|
||||
hold on; % Retain the plot so new points can be added without complete redraw
|
||||
plot(rop,ber_ffe',"LineWidth",1,"LineStyle",":","Marker",".","MarkerSize",10,"DisplayName","ber ffe",'Color',cols(1,:));
|
||||
plot(rop,ber_dcavg',"LineWidth",1,"LineStyle",":","Marker",".","MarkerSize",10,"DisplayName","ber dcavg",'Color',cols(2,:));
|
||||
plot(rop,ber_adapt',"LineWidth",1,"LineStyle",":","Marker",".","MarkerSize",10,"DisplayName","ber adapt",'Color',cols(3,:));
|
||||
plot(rop,ber_derem',"LineWidth",1,"LineStyle",":","Marker",".","MarkerSize",10,"DisplayName","ber derem",'Color',cols(4,:));
|
||||
|
||||
end
|
||||
|
||||
yline(3.8e-3,'DisplayName','HD-FEC');
|
||||
xlabel('Signal to Interference Ratio (dB)');
|
||||
ylabel('Bit Error Rate (BER)');
|
||||
title('Bit Error Rate vs. SIR (MPI)');
|
||||
set(gca,'yscale','log');
|
||||
grid on;
|
||||
legend
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user