Merge branch 'main' of cau-git.rz.uni-kiel.de:nt/mitarbeiter/silas/imdd_simulation
This commit is contained in:
@@ -26,7 +26,9 @@ classdef Duobinary
|
|||||||
M = numel(u);
|
M = numel(u);
|
||||||
|
|
||||||
%make unipolar
|
%make unipolar
|
||||||
if M == 4
|
if M == 2
|
||||||
|
data = data;
|
||||||
|
elseif M == 4
|
||||||
data = data .* sqrt(5);
|
data = data .* sqrt(5);
|
||||||
elseif M == 6
|
elseif M == 6
|
||||||
data = data .* sqrt(10);
|
data = data .* sqrt(10);
|
||||||
@@ -59,7 +61,9 @@ classdef Duobinary
|
|||||||
bk = bk .* 2;
|
bk = bk .* 2;
|
||||||
bk = bk + b;
|
bk = bk + b;
|
||||||
|
|
||||||
if M == 4
|
if M == 2
|
||||||
|
bk = bk;
|
||||||
|
elseif M == 4
|
||||||
bk = bk ./ sqrt(5);
|
bk = bk ./ sqrt(5);
|
||||||
elseif M == 6
|
elseif M == 6
|
||||||
bk = bk ./ sqrt(10);
|
bk = bk ./ sqrt(10);
|
||||||
@@ -100,7 +104,9 @@ classdef Duobinary
|
|||||||
end
|
end
|
||||||
|
|
||||||
%make unipolar
|
%make unipolar
|
||||||
if options.M == 4
|
if options.M == 2
|
||||||
|
data = data;
|
||||||
|
elseif options.M == 4
|
||||||
data = data .* sqrt(5);
|
data = data .* sqrt(5);
|
||||||
elseif options.M == 6
|
elseif options.M == 6
|
||||||
data = data .* sqrt(10);
|
data = data .* sqrt(10);
|
||||||
@@ -140,7 +146,9 @@ classdef Duobinary
|
|||||||
mean_power = sum((unique_points .^ 2) .* probabilities);
|
mean_power = sum((unique_points .^ 2) .* probabilities);
|
||||||
scaling_factor = sqrt(mean_power);
|
scaling_factor = sqrt(mean_power);
|
||||||
|
|
||||||
if options.M == 4
|
if options.M == 2
|
||||||
|
data = data ./ sqrt(0.5);
|
||||||
|
elseif options.M == 4
|
||||||
data = data ./ sqrt(2.5); % 7-level constellation weighted with probability after DB code i.e. mean([-3 3 -2 -2 2 2 -1 -1 -1 1 1 1 0 0 0 0].^2) = 2.5 --> sqrt(2.5) == rms(constellation)
|
data = data ./ sqrt(2.5); % 7-level constellation weighted with probability after DB code i.e. mean([-3 3 -2 -2 2 2 -1 -1 -1 1 1 1 0 0 0 0].^2) = 2.5 --> sqrt(2.5) == rms(constellation)
|
||||||
elseif options.M == 6
|
elseif options.M == 6
|
||||||
data = data ./ sqrt(5.8);
|
data = data ./ sqrt(5.8);
|
||||||
@@ -186,7 +194,9 @@ classdef Duobinary
|
|||||||
end
|
end
|
||||||
|
|
||||||
%make unipolar
|
%make unipolar
|
||||||
if I == 7 || I == 6
|
if I == 3
|
||||||
|
data = data .* 0.5;
|
||||||
|
elseif I == 7 || I == 6
|
||||||
data = data .* sqrt(2.5);
|
data = data .* sqrt(2.5);
|
||||||
elseif I == 11
|
elseif I == 11
|
||||||
data = data .* sqrt(5.8);
|
data = data .* sqrt(5.8);
|
||||||
@@ -206,7 +216,9 @@ classdef Duobinary
|
|||||||
data = data .* 2;
|
data = data .* 2;
|
||||||
data = data - round(mean(data));
|
data = data - round(mean(data));
|
||||||
|
|
||||||
if M == 4
|
if M == 2
|
||||||
|
data = data;
|
||||||
|
elseif M == 4
|
||||||
data = data ./ sqrt(5);
|
data = data ./ sqrt(5);
|
||||||
elseif M == 6
|
elseif M == 6
|
||||||
data = data ./ sqrt(10);
|
data = data ./ sqrt(10);
|
||||||
|
|||||||
@@ -67,22 +67,29 @@ classdef Postfilter < handle
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function showFilter(obj,noiseclass_in,options)
|
function showFilter(obj,options)
|
||||||
|
|
||||||
arguments
|
arguments
|
||||||
obj
|
obj
|
||||||
noiseclass_in
|
options.noiseclass_in =[]
|
||||||
options.fignum = 121
|
options.fignum = 121
|
||||||
options.color = []
|
options.color = []
|
||||||
end
|
end
|
||||||
|
|
||||||
% noiseclass_in.spectrum('displayname','Noise PSD shifted to 0dBm','fignum',options.fignum,'normalizeTo0dB',1);
|
% noiseclass_in.spectrum('displayname','Noise PSD shifted to 0dBm','fignum',options.fignum,'normalizeTo0dB',1);
|
||||||
|
if ~isempty(options.noiseclass_in)
|
||||||
|
len = length(options.noiseclass_in);
|
||||||
|
fs = options.noiseclass_in.fs;
|
||||||
|
else
|
||||||
|
len = 1024;
|
||||||
|
fs = 1;
|
||||||
|
end
|
||||||
|
|
||||||
figure(options.fignum)
|
figure(options.fignum)
|
||||||
[h,w] = freqz(1,obj.coefficients,length(noiseclass_in),"whole",noiseclass_in.fs);
|
[h,w] = freqz(1,obj.coefficients,len,"whole",fs);
|
||||||
h = h/max(abs(h));
|
h = h/max(abs(h));
|
||||||
hold on
|
hold on
|
||||||
w_ = (w - noiseclass_in.fs/2);
|
w_ = (w - fs/2);
|
||||||
|
|
||||||
if isempty(options.color)
|
if isempty(options.color)
|
||||||
plot(w_.*1e-9,20*log10(fftshift(abs(h))),'DisplayName',['Burg Coeffs: ', num2str(round(obj.coefficients,2)), ' '],'LineWidth',2);
|
plot(w_.*1e-9,20*log10(fftshift(abs(h))),'DisplayName',['Burg Coeffs: ', num2str(round(obj.coefficients,2)), ' '],'LineWidth',2);
|
||||||
|
|||||||
@@ -59,9 +59,20 @@ classdef TransmissionPerformance
|
|||||||
1.03e-2, 9.29e-3, 8.33e-3, 7.54e-3, 7.04e-3, 4.70e-3];
|
1.03e-2, 9.29e-3, 8.33e-3, 7.54e-3, 7.04e-3, 4.70e-3];
|
||||||
|
|
||||||
%% LUT for KP4-FEC and Inner Code https://grouper.ieee.org/groups/802/3/dj/public/23_03/patra_3dj_01b_2303.pdf
|
%% LUT for KP4-FEC and Inner Code https://grouper.ieee.org/groups/802/3/dj/public/23_03/patra_3dj_01b_2303.pdf
|
||||||
|
|
||||||
CODE_RATE_KP4_AND_INNER = [0.885799];
|
CODE_RATE_KP4_AND_INNER = [0.885799];
|
||||||
BERTHRESHOLDS_KP4_AND_INNER = 4.85e-3;
|
BERTHRESHOLDS_KP4_AND_INNER = 4.85e-3;
|
||||||
|
|
||||||
|
% https://www.ieee802.org/3/bs/public/14_11/parthasarathy_3bs_01a_1114.pdf
|
||||||
|
CODE_RATE_KP4 = [1/(1+0.052)];%Reed-Solomon RS(544, 514) == KP4
|
||||||
|
BERTHRESHOLDS_KP4 = 2.2e-4;
|
||||||
|
|
||||||
|
CODE_RATE_HDFEC = [1/(1+0.067)]; %Beyond 300 Gbps Short-Reach Links Using TFLN MZMs With 500 mVpp and Linear Equalization
|
||||||
|
BERTHRESHOLDS_HDFEC = 3.8e-3;
|
||||||
|
|
||||||
|
CODE_RATE_O_FEC = [1/(1+0.15)]; %Stefano im Meeting
|
||||||
|
BERTHRESHOLDS_O_FEC = 2e-2;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
70
Datatypes/clr.m
Normal file
70
Datatypes/clr.m
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
classdef clr
|
||||||
|
properties (Constant)
|
||||||
|
% Set1 colormap
|
||||||
|
Set1 = struct( ...
|
||||||
|
'red', [0.8941, 0.1020, 0.1098], ...
|
||||||
|
'blue', [0.2157, 0.4941, 0.7216], ...
|
||||||
|
'green', [0.3020, 0.6863, 0.2902], ...
|
||||||
|
'purple', [0.5961, 0.3059, 0.6392], ...
|
||||||
|
'orange', [1.0000, 0.4980, 0.0000], ...
|
||||||
|
'yellow', [1.0000, 1.0000, 0.2000], ...
|
||||||
|
'brown', [0.6510, 0.3373, 0.1569], ...
|
||||||
|
'pink', [0.9686, 0.5059, 0.7490], ...
|
||||||
|
'gray', [0.6000, 0.6000, 0.6000]);
|
||||||
|
|
||||||
|
% Paired colormap
|
||||||
|
Paired = struct( ...
|
||||||
|
'lightblue', [0.6510, 0.8078, 0.8902], ...
|
||||||
|
'blue', [0.1216, 0.4706, 0.7059], ...
|
||||||
|
'lightgreen', [0.6980, 0.8745, 0.5412], ...
|
||||||
|
'green', [0.2000, 0.6275, 0.1725], ...
|
||||||
|
'lightred', [0.9843, 0.6039, 0.6000], ...
|
||||||
|
'red', [0.8902, 0.1020, 0.1098], ...
|
||||||
|
'lightorange',[0.9922, 0.7490, 0.4353], ...
|
||||||
|
'orange', [1.0000, 0.4980, 0.0000], ...
|
||||||
|
'lightpurple',[0.7922, 0.6980, 0.8392], ...
|
||||||
|
'purple', [0.4157, 0.2392, 0.6039], ...
|
||||||
|
'lightyellow',[1.0000, 1.0000, 0.6000], ...
|
||||||
|
'brown', [0.6941, 0.3490, 0.1569]);
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
methods (Static)
|
||||||
|
function showRGB(colorArray, names)
|
||||||
|
% Visualize colors in a horizontal bar chart
|
||||||
|
if nargin < 2
|
||||||
|
names = repmat({''}, size(colorArray, 1), 1);
|
||||||
|
end
|
||||||
|
|
||||||
|
figure;
|
||||||
|
hold on;
|
||||||
|
for i = 1:size(colorArray, 1)
|
||||||
|
fill([0 1 1 0], [i-1 i-1 i i], colorArray(i, :), 'EdgeColor', 'k');
|
||||||
|
text(1.1, i-0.5, names{i}, 'FontSize', 12, 'Interpreter', 'none');
|
||||||
|
end
|
||||||
|
ylim([0, size(colorArray, 1)]);
|
||||||
|
xlim([0, 1.5]);
|
||||||
|
axis off;
|
||||||
|
title('Color Preview');
|
||||||
|
hold off;
|
||||||
|
end
|
||||||
|
|
||||||
|
function showSet(colorStruct)
|
||||||
|
% Show colors from a structure in a bar plot
|
||||||
|
names = fieldnames(colorStruct);
|
||||||
|
colors = cell2mat(struct2cell(colorStruct)');
|
||||||
|
|
||||||
|
figure;
|
||||||
|
hold on;
|
||||||
|
for i = 1:size(colors, 1)
|
||||||
|
fill([0 1 1 0], [i-1 i-1 i i], colors(i, :), 'EdgeColor', 'k');
|
||||||
|
text(1.1, i-0.5, names{i}, 'FontSize', 12, 'Interpreter', 'none');
|
||||||
|
end
|
||||||
|
ylim([0, size(colors, 1)]);
|
||||||
|
xlim([0, 1.5]);
|
||||||
|
axis off;
|
||||||
|
title('Color Preview');
|
||||||
|
hold off;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
classdef pulseform < int32
|
classdef pulseform < int32
|
||||||
|
|
||||||
enumeration
|
enumeration
|
||||||
rc (1) %raised cosine (use this at Tx without matched filter)
|
rc (2) %raised cosine (use this at Tx without matched filter)
|
||||||
rrc (2) %root raised cosine (usually with matched filter)
|
rrc (1) %root raised cosine (usually with matched filter)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
@@ -9,7 +9,9 @@ function beautifyBERplot()
|
|||||||
for i = 1:length(lines)
|
for i = 1:length(lines)
|
||||||
lines(i).LineWidth = 1.3; % Thicker line width
|
lines(i).LineWidth = 1.3; % Thicker line width
|
||||||
%lines(i).LineStyle = '-'; % Solid lines for simplicity
|
%lines(i).LineStyle = '-'; % Solid lines for simplicity
|
||||||
|
if string(lines(i).Marker) == "none"
|
||||||
lines(i).Marker = markers{mod(i-1, num_markers) + 1}; % Assign markers cyclically
|
lines(i).Marker = markers{mod(i-1, num_markers) + 1}; % Assign markers cyclically
|
||||||
|
end
|
||||||
lines(i).MarkerSize = 4; % Marker size
|
lines(i).MarkerSize = 4; % Marker size
|
||||||
lines(i).MarkerFaceColor = 'auto'; % Use line color for marker face
|
lines(i).MarkerFaceColor = 'auto'; % Use line color for marker face
|
||||||
end
|
end
|
||||||
|
|||||||
22
Functions/showTransferFunction.m
Normal file
22
Functions/showTransferFunction.m
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
|
||||||
|
function showTransferFunction(coeffs,options)
|
||||||
|
|
||||||
|
arguments
|
||||||
|
coeffs
|
||||||
|
options.fignum = 765
|
||||||
|
options.DisplayName = ''
|
||||||
|
options.color = [1 1 0.1]
|
||||||
|
end
|
||||||
|
% Define the filter taps
|
||||||
|
|
||||||
|
[H, w] = freqz(coeffs, 1, 1024, 1);
|
||||||
|
|
||||||
|
figure(options.fignum);
|
||||||
|
hold on
|
||||||
|
plot(w, 10*log10(abs(H)), 'LineWidth', 2,'DisplayName',options.DisplayName,'Color',options.color); %todo
|
||||||
|
xlabel('Normalized Frequency');
|
||||||
|
ylabel('Amplitude in dB');
|
||||||
|
grid on;
|
||||||
|
ylim([-20,10])
|
||||||
|
|
||||||
|
end
|
||||||
68
projects/IMDD_base_system/analyze_burg.m
Normal file
68
projects/IMDD_base_system/analyze_burg.m
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
% basePath = 'C:\Users\Silas\Documents\MATLAB\Datensätze\sioe_labor\';
|
||||||
|
% db = DBHandler("pathToDB",[basePath,'silas_labor.db']);
|
||||||
|
if 0
|
||||||
|
|
||||||
|
uloops = struct;
|
||||||
|
uloops.precomp = [0];
|
||||||
|
uloops.db_precode = [0];
|
||||||
|
uloops.bitrate = [330,390,450].*1e9; %[300,330,360,390,420,450,480]
|
||||||
|
uloops.laser_wavelength = [1310];
|
||||||
|
uloops.M = [4];
|
||||||
|
uloops.link_length = [2]; % 1,2,3,5,6,8,10
|
||||||
|
%uloops.alpha = [0:0.1:1];
|
||||||
|
|
||||||
|
wh = DataStorage(uloops);
|
||||||
|
wh.addStorage("ber");
|
||||||
|
|
||||||
|
wh = submit_simulations(wh,"parallel",1,"simulation_mode",0);
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
col = cbrewer2('spectral',6);%
|
||||||
|
col=linspecer(5);
|
||||||
|
|
||||||
|
cnt = 1;
|
||||||
|
for br = uloops.bitrate
|
||||||
|
a = wh_burg.getStoValue('ber',uloops.precomp, uloops.db_precode, br , uloops.laser_wavelength, uloops.M, uloops.link_length);
|
||||||
|
ber_mlse = cellfun(@(x) x.vnle_pf_package{1,1}.ber_mlse, a);
|
||||||
|
alpha = cellfun(@(x) x.vnle_pf_package{1,1}.pf.coefficients, a,'UniformOutput', false);
|
||||||
|
figure(23)
|
||||||
|
hold on
|
||||||
|
scatter(alpha{1}(2),ber_mlse,100,'MarkerEdgeColor',col(cnt,:),'Marker','x','LineWidth',2,'HandleVisibility','off');
|
||||||
|
cnt = cnt+1;
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
cnt = 1;
|
||||||
|
alpha = [];
|
||||||
|
|
||||||
|
for br = uloops.bitrate
|
||||||
|
|
||||||
|
a = wh_alphas.getStoValue('ber',uloops.precomp, uloops.db_precode, br , uloops.laser_wavelength, uloops.M, uloops.link_length, [0:0.1:1]);
|
||||||
|
ber_mlse = cellfun(@(x) x.vnle_pf_package{1,1}.ber_mlse, a);
|
||||||
|
|
||||||
|
x_ax = [0:0.1:1];
|
||||||
|
|
||||||
|
figure(23)
|
||||||
|
hold on
|
||||||
|
% title(sprintf('%d km | %d nm | PAM %d',uloops.link_length,wavelength,uloops.M));
|
||||||
|
plot(x_ax,ber_mlse,'DisplayName',sprintf(' %d GBps PAM 4',br.*1e-9),'LineStyle','-','HandleVisibility','on','Color',col(cnt,:));
|
||||||
|
|
||||||
|
xticks(x_ax);
|
||||||
|
set(gca, 'YScale', 'log');
|
||||||
|
ylim([1e-5 0.4]);
|
||||||
|
xlim([min(x_ax), max(x_ax) ]);
|
||||||
|
yline([3.8e-3, 2e-2],'HandleVisibility','off');
|
||||||
|
legend
|
||||||
|
beautifyBERplot();
|
||||||
|
xlabel('Channel $\alpha$');
|
||||||
|
ylabel('BER');
|
||||||
|
|
||||||
|
cnt = cnt+1;
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
57
projects/IMDD_base_system/analyze_equalizer_taps.m
Normal file
57
projects/IMDD_base_system/analyze_equalizer_taps.m
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
% basePath = 'C:\Users\Silas\Documents\MATLAB\Datensätze\sioe_labor\';
|
||||||
|
% db = DBHandler("pathToDB",[basePath,'silas_labor.db']);
|
||||||
|
if 0
|
||||||
|
|
||||||
|
uloops = struct;
|
||||||
|
uloops.precomp = [0];
|
||||||
|
uloops.db_precode = [0];
|
||||||
|
uloops.bitrate = [390].*1e9; %[300,330,360,390,420,450,480]
|
||||||
|
uloops.laser_wavelength = [1310];
|
||||||
|
uloops.M = [4];
|
||||||
|
uloops.link_length = [2]; % 1,2,3,5,6,8,10
|
||||||
|
uloops.vnle_order1 = [5,10:10:100];
|
||||||
|
uloops.vnle_order2 = [0];
|
||||||
|
uloops.vnle_order3 = [0];
|
||||||
|
|
||||||
|
wh = DataStorage(uloops);
|
||||||
|
wh.addStorage("ber");
|
||||||
|
|
||||||
|
wh = submit_simulations(wh,"parallel",1,"simulation_mode",0);
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
col = cbrewer2('spectral',6);%
|
||||||
|
col=linspecer(5);
|
||||||
|
cnt = 1;
|
||||||
|
for n3 = uloops.vnle_order3
|
||||||
|
|
||||||
|
a = wh.getStoValue('ber',uloops.precomp, uloops.db_precode, uloops.bitrate , uloops.laser_wavelength, uloops.M, uloops.link_length,...
|
||||||
|
uloops.vnle_order1,...
|
||||||
|
uloops.vnle_order2,...
|
||||||
|
n3);
|
||||||
|
|
||||||
|
ber_vnle = cellfun(@(x) x.vnle_pf_package{1,1}.ber_vnle, a);
|
||||||
|
ber_mlse = cellfun(@(x) x.vnle_pf_package{1,1}.ber_mlse, a);
|
||||||
|
ber_db = cellfun(@(x) x.dbtgt_package{1,1}.ber, a);
|
||||||
|
log_bers = log10(ber_vnle + 1e-12);
|
||||||
|
|
||||||
|
figure(20)
|
||||||
|
hold on
|
||||||
|
title(sprintf('%d km | %d nm | PAM %d',uloops.link_length,wavelength,uloops.M));
|
||||||
|
% plot(uloops.vnle_order1,ber_vnle,'DisplayName',sprintf('Tx precomp. + VNLE'),'LineStyle','-','HandleVisibility','on','Color',col(cnt,:));
|
||||||
|
plot(uloops.vnle_order1,ber_mlse,'DisplayName',sprintf('VNLE + Postfilter + ;MLSE'),'LineStyle','-','HandleVisibility','on','Color',col(cnt,:));
|
||||||
|
plot(uloops.vnle_order1,ber_db,'DisplayName',sprintf('DB tgt. VNLE + MLSE'),'LineStyle','-','HandleVisibility','on','Color',col(cnt+2,:));
|
||||||
|
xticks(uloops.vnle_order1([1:1:end]));
|
||||||
|
set(gca, 'YScale', 'log');
|
||||||
|
ylim([5e-5 0.4]);
|
||||||
|
xlim([min(uloops.vnle_order1), max(uloops.vnle_order1) ]);
|
||||||
|
yline([3.8e-3, 2e-2],'HandleVisibility','off');
|
||||||
|
legend
|
||||||
|
beautifyBERplot();
|
||||||
|
xlabel('Number of 1st order coeff.');
|
||||||
|
ylabel('BER');
|
||||||
|
|
||||||
|
cnt = cnt+1;
|
||||||
|
end
|
||||||
|
|
||||||
50
projects/IMDD_base_system/analyze_lambda.m
Normal file
50
projects/IMDD_base_system/analyze_lambda.m
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
if 0
|
||||||
|
uloops = struct;
|
||||||
|
uloops.precomp = [0];
|
||||||
|
uloops.db_precode = [0,1];
|
||||||
|
uloops.bitrate = [420].*1e9; %[300,330,360,390,420,450,480]
|
||||||
|
% uloops.laser_wavelength = [1293,1297.5,1302,1306.5,1310,1313.4,1318,1322.7,1327.4];
|
||||||
|
uloops.laser_wavelength = [1293, 1302,1310,1318,1327.4];
|
||||||
|
uloops.M = [4,6,8];
|
||||||
|
uloops.link_length = [5]; % 1,2,3,5,6,8,10
|
||||||
|
wh = DataStorage(uloops);
|
||||||
|
wh.addStorage("ber");
|
||||||
|
|
||||||
|
wh = submit_simulations(wh,"parallel",1,"simulation_mode",0);
|
||||||
|
end
|
||||||
|
|
||||||
|
col = cbrewer2('Set2',6);%
|
||||||
|
col=linspecer(5);
|
||||||
|
cnt = 1;
|
||||||
|
|
||||||
|
m = 8;
|
||||||
|
|
||||||
|
% a = wh.getStoValue('ber',1, 0, uloops.bitrate , uloops.laser_wavelength, m, uloops.link_length);
|
||||||
|
% ber_vnle = cellfun(@(x) x.vnle_pf_package{1,1}.ber_vnle, a);
|
||||||
|
|
||||||
|
a = wh.getStoValue('ber',0, 0, uloops.bitrate , uloops.laser_wavelength, m, uloops.link_length);
|
||||||
|
ber_mlse = cellfun(@(x) x.vnle_pf_package{1,1}.ber_mlse, a);
|
||||||
|
|
||||||
|
a = wh.getStoValue('ber',0, 1, uloops.bitrate , uloops.laser_wavelength, m, uloops.link_length);
|
||||||
|
ber_db = cellfun(@(x) x.dbtgt_package{1,1}.ber, a);
|
||||||
|
|
||||||
|
x_ax = uloops.laser_wavelength;
|
||||||
|
|
||||||
|
figure(21)
|
||||||
|
hold on
|
||||||
|
% title(sprintf('%d km | %d GBd | PAM %d',uloops.link_length,uloops.bitrate/log2(m).*1e-9,m));
|
||||||
|
% plot(x_ax,ber_vnle,'DisplayName',sprintf('Tx precomp. + VNLE'),'LineStyle','-','HandleVisibility','on','Color',col(cnt+1,:));
|
||||||
|
plot(x_ax,ber_mlse,'DisplayName',sprintf('VNLE + Postfilter + MLSE'),'LineStyle','-','HandleVisibility','on','Color',colorsets.DeepRed.RGB);
|
||||||
|
% plot(x_ax,ber_db,'DisplayName',sprintf('DB tgt. VNLE + MLSE'),'LineStyle','-','HandleVisibility','on','Color',col(cnt,:));
|
||||||
|
xticks(x_ax([1:1:end]));
|
||||||
|
set(gca, 'YScale', 'log');
|
||||||
|
ylim([5e-5 0.4]);
|
||||||
|
xlim([min(x_ax)-3, max(x_ax)+3 ]);
|
||||||
|
yline([3.8e-3, 2e-2],'HandleVisibility','off');
|
||||||
|
legend
|
||||||
|
beautifyBERplot();
|
||||||
|
xlabel('Number of 1st order coeff.');
|
||||||
|
ylabel('BER');
|
||||||
|
|
||||||
|
cnt = cnt+1;
|
||||||
|
|
||||||
70
projects/IMDD_base_system/analyze_postfilter_taps.m
Normal file
70
projects/IMDD_base_system/analyze_postfilter_taps.m
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
% basePath = 'C:\Users\Silas\Documents\MATLAB\Datensätze\sioe_labor\';
|
||||||
|
% db = DBHandler("pathToDB",[basePath,'silas_labor.db']);
|
||||||
|
if 0
|
||||||
|
|
||||||
|
uloops = struct;
|
||||||
|
uloops.precomp = [0];
|
||||||
|
uloops.db_precode = [0];
|
||||||
|
uloops.bitrate = [300,330,360,390,420,450,480].*1e9; %[300,330,360,390,420,450,480]
|
||||||
|
uloops.laser_wavelength = [1310];
|
||||||
|
uloops.M = [4];
|
||||||
|
uloops.link_length = [2]; % 1,2,3,5,6,8,10
|
||||||
|
uloops.vnle_order1 = [50];
|
||||||
|
uloops.vnle_order2 = [7];
|
||||||
|
uloops.vnle_order3 = [7];
|
||||||
|
uloops.pf_ncoeffs = [1,2,3];
|
||||||
|
|
||||||
|
wh = DataStorage(uloops);
|
||||||
|
wh.addStorage("ber");
|
||||||
|
|
||||||
|
wh = submit_simulations(wh,"parallel",1,"simulation_mode",0);
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
col = cbrewer2('spectral',6);%
|
||||||
|
col=linspecer(5);
|
||||||
|
cnt = 1;
|
||||||
|
alpha = [];
|
||||||
|
for n = uloops.pf_ncoeffs
|
||||||
|
|
||||||
|
a = wh.getStoValue('ber',uloops.precomp, uloops.db_precode, uloops.bitrate , uloops.laser_wavelength, uloops.M, uloops.link_length,...
|
||||||
|
uloops.vnle_order1,...
|
||||||
|
uloops.vnle_order2,...
|
||||||
|
uloops.vnle_order3,...
|
||||||
|
n);
|
||||||
|
|
||||||
|
ber_vnle = cellfun(@(x) x.vnle_pf_package{1,1}.ber_vnle, a);
|
||||||
|
ber_mlse = cellfun(@(x) x.vnle_pf_package{1,1}.ber_mlse, a);
|
||||||
|
|
||||||
|
% PF = cellfun(@(x) x.vnle_pf_package{1,1}.pf.coefficients, a,'UniformOutput',false);
|
||||||
|
%
|
||||||
|
% showTransferFunction(PF{3}.coefficients,"fignum",12,"color",clr.Set1.red,"DisplayName",['360 GBd']);
|
||||||
|
%
|
||||||
|
% showTransferFunction(PF{4}.coefficients,"fignum",12,"color",clr.Set1.blue,"DisplayName",['390 GBd']);
|
||||||
|
%
|
||||||
|
% showTransferFunction(PF{5}.coefficients,"fignum",12,'color',clr.Set1.green,"DisplayName",['420 GBd']);
|
||||||
|
% ber_db = cellfun(@(x) x.dbtgt_package{1,1}.ber, a);
|
||||||
|
|
||||||
|
x_ax = uloops.bitrate.*1e-9;
|
||||||
|
|
||||||
|
figure(23)
|
||||||
|
hold on
|
||||||
|
title(sprintf('%d km | %d nm | PAM %d',uloops.link_length,wavelength,uloops.M));
|
||||||
|
if n==1
|
||||||
|
plot(x_ax,ber_vnle,'DisplayName',sprintf('Tx precomp. + VNLE'),'LineStyle','-','HandleVisibility','on','Color',col(cnt+4,:));
|
||||||
|
end
|
||||||
|
plot(x_ax,ber_mlse,'DisplayName',sprintf('VNLE + Postfilter + ;MLSE'),'LineStyle','-','HandleVisibility','on','Color',col(cnt,:));
|
||||||
|
% plot(x_ax,ber_db,'DisplayName',sprintf('DB tgt. VNLE + MLSE'),'LineStyle','-','HandleVisibility','on','Color',col(cnt+2,:));
|
||||||
|
xticks(x_ax([1:1:end]));
|
||||||
|
set(gca, 'YScale', 'log');
|
||||||
|
ylim([1e-5 0.4]);
|
||||||
|
xlim([min(x_ax(2:end)), max(x_ax) ]);
|
||||||
|
yline([3.8e-3, 2e-2],'HandleVisibility','off');
|
||||||
|
legend
|
||||||
|
beautifyBERplot();
|
||||||
|
xlabel('Gross Bitrate in Gbps');
|
||||||
|
ylabel('BER');
|
||||||
|
|
||||||
|
cnt = cnt+1;
|
||||||
|
end
|
||||||
|
|
||||||
@@ -1,143 +1,314 @@
|
|||||||
|
|
||||||
% basePath = 'C:\Users\Silas\Documents\MATLAB\Datensätze\sioe_labor\';
|
% basePath = 'C:\Users\Silas\Documents\MATLAB\Datensätze\sioe_labor\';
|
||||||
% db = DBHandler("pathToDB",[basePath,'silas_labor.db']);
|
% db = DBHandler("pathToDB",[basePath,'silas_labor.db']);
|
||||||
if 1
|
if 0
|
||||||
uloops = struct;
|
uloops = struct;
|
||||||
|
uloops.precomp = [1];
|
||||||
|
uloops.db_precode = [0];
|
||||||
|
uloops.bitrate = [300,330,360,390,420,450,480].*1e9; %[300,330,360,390,420,450,480]
|
||||||
|
% uloops.laser_wavelength = [1293,1297.5,1302,1306.5,1310,1313.4,1318,1322.7,1327.4];
|
||||||
uloops.precomp = [0];
|
uloops.precomp = [0];
|
||||||
uloops.db_precode = [0];
|
uloops.db_precode = [0];
|
||||||
uloops.bitrate = [330].*1e9; %[300,330,360,390,420,450,480]
|
uloops.bitrate = [330].*1e9; %[300,330,360,390,420,450,480]
|
||||||
uloops.laser_wavelength = [1310];
|
uloops.laser_wavelength = [1310];
|
||||||
|
uloops.M = [4,6,8];
|
||||||
uloops.M = [4];
|
uloops.M = [4];
|
||||||
uloops.link_length = [2]; % 1,2,3,5,6,8,10
|
uloops.link_length = [2]; % 1,2,3,5,6,8,10
|
||||||
wh = DataStorage(uloops);
|
wh = DataStorage(uloops);
|
||||||
wh.addStorage("ber");
|
wh.addStorage("ber");
|
||||||
|
|
||||||
|
wh = submit_simulations(wh,"parallel",0,"simulation_mode",0);
|
||||||
|
|
||||||
wh = submit_simulations(wh,"parallel",0,"simulation_mode",1);
|
wh = submit_simulations(wh,"parallel",0,"simulation_mode",1);
|
||||||
end
|
end
|
||||||
|
|
||||||
wh_ana = wh;
|
wh_ana = wh_master;
|
||||||
|
|
||||||
ber_mlse = {};
|
cols = cbrewer2('Paired',8);
|
||||||
ber_vnle = {};
|
|
||||||
inf_rate_vnle ={};
|
|
||||||
|
|
||||||
ber_dbtgt ={};
|
figure()
|
||||||
|
|
||||||
|
for precomp = [0,1]
|
||||||
|
wavelength=uloops.laser_wavelength;
|
||||||
|
for m = [6]
|
||||||
|
|
||||||
|
baudrate = wh_ana.parameter.bitrate.values;
|
||||||
|
|
||||||
ber_dbenc ={};
|
|
||||||
alpha = {};
|
|
||||||
ber_dfe = {};
|
|
||||||
ngmi = [];
|
|
||||||
|
|
||||||
wavelength=uloops.laser_wavelength;
|
|
||||||
for m = [4,6,8]
|
|
||||||
%1302
|
|
||||||
%VNLE
|
%VNLE
|
||||||
precomp = 1;
|
precode = 1;
|
||||||
precode = 0;
|
a = wh_ana.getStoValue('ber',precomp, precode, baudrate , wavelength, m, uloops.link_length);
|
||||||
a = wh_ana.getStoValue('ber',precomp, precode, uloops.bitrate , wavelength, m, uloops.link_length);
|
ber_vnle_pc = cellfun(@(x) x.vnle_pf_package{1,1}.ber_vnle, a);
|
||||||
ber_vnle = cellfun(@(x) x.vnle_pf_package{1,1}.ber_vnle, a);
|
|
||||||
|
|
||||||
%MLSE
|
%MLSE
|
||||||
% precomp = 0;
|
ber_mlse_pc = cellfun(@(x) x.vnle_pf_package{1,1}.ber_mlse, a);
|
||||||
% precode = 1;
|
%DB
|
||||||
a = wh_ana.getStoValue('ber',precomp, precode, uloops.bitrate , wavelength, m, uloops.link_length);
|
ber_dbtgt_pc = cellfun(@(x) x.dbtgt_package{1,1}.ber, a);
|
||||||
ber_mlse = cellfun(@(x) x.vnle_pf_package{1,1}.ber_mlse, a);
|
|
||||||
|
precode = 0;
|
||||||
|
a = wh_ana.getStoValue('ber',precomp, precode, baudrate , wavelength, m, uloops.link_length);
|
||||||
|
ber_vnle = cellfun(@(x) x.vnle_pf_package{1,1}.ber_vnle, a);
|
||||||
|
%MLSE
|
||||||
|
ber_mlse = cellfun(@(x) x.vnle_pf_package{1,1}.ber_mlse, a);
|
||||||
%DB
|
%DB
|
||||||
% precomp = 0;
|
|
||||||
% precode = 1;
|
|
||||||
a = wh_ana.getStoValue('ber',precomp, precode, uloops.bitrate , wavelength, m, uloops.link_length);
|
|
||||||
ber_dbtgt = cellfun(@(x) x.dbtgt_package{1,1}.ber, a);
|
ber_dbtgt = cellfun(@(x) x.dbtgt_package{1,1}.ber, a);
|
||||||
|
|
||||||
figure(m+20)
|
if precomp
|
||||||
|
legndname1 = ['Pre-Emphasis'];
|
||||||
|
else
|
||||||
|
legndname1 = ['No Pre-Emphasis'];
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
baudrate = floor( uloops.bitrate.*1e-9 ./log2(m) ) .* 2.5 .* 1e9;
|
||||||
|
|
||||||
|
subplot(1,3,1)
|
||||||
hold on
|
hold on
|
||||||
title(sprintf('%d km | %d nm | PAM %d',uloops.link_length,wavelength,m));
|
title(sprintf('%d km | %d nm | PAM %d',uloops.link_length,wavelength,m));
|
||||||
|
title(sprintf('PAM %d',m));
|
||||||
plot(uloops.bitrate,ber_vnle,'DisplayName',sprintf('VNLE'),'Color',cols(3,:),'LineStyle','-','HandleVisibility','on');
|
plot(baudrate.*1e-9,ber_vnle,'DisplayName',['Pre-Emphasis: ', num2str(precomp), '| Diff.-Code: 0'],'Color',cols(1+precomp,:),'LineStyle','-','HandleVisibility','on');
|
||||||
|
plot(baudrate.*1e-9,ber_vnle_pc,'DisplayName',['Pre-Emphasis: ', num2str(precomp), '| Diff.-Code: 1'],'Color',cols(1+precomp,:),'LineStyle','-.','HandleVisibility','on');
|
||||||
plot(uloops.bitrate,ber_dbtgt,'DisplayName',sprintf('DB tgt. + MLSE',uloops.link_length,uloops.M),'Color',cols(1,:),'LineStyle','-','HandleVisibility','on');
|
xticks(baudrate.*1e-9);
|
||||||
|
|
||||||
plot(uloops.bitrate,ber_mlse,'DisplayName',sprintf('VNLE + 1 tap post-filter + MLSE',uloops.link_length,uloops.M),'Color',cols(4,:),'LineStyle','-','HandleVisibility','on');
|
|
||||||
|
|
||||||
set(gca, 'YScale', 'log');
|
set(gca, 'YScale', 'log');
|
||||||
ylim([5e-5 0.3]);
|
ylim([5e-5 0.4]);
|
||||||
% xlim([min(uloops.bitrate.*1e-9), max(uloops.bitrate.*1e-9) ]);
|
xlim([min(baudrate(2).*1e-9), max(baudrate.*1e-9) ]);
|
||||||
yline([3.8e-3, 2e-2],'HandleVisibility','off');
|
yline([3.8e-3, 2e-2],'HandleVisibility','off');
|
||||||
legend
|
legend
|
||||||
beautifyBERplot()
|
beautifyBERplot()
|
||||||
xlabel('Bit Rate in Gbps');
|
xlabel('Bit Rate in Gbps');
|
||||||
ylabel('BER');
|
ylabel('BER');
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
cols = linspecer(7);%cbrewer2('Set2',10);
|
|
||||||
|
|
||||||
|
subplot(1,3,2)
|
||||||
for w = uloops.laser_wavelength
|
|
||||||
|
|
||||||
figure(w)
|
|
||||||
figcnt = 0;
|
|
||||||
|
|
||||||
for precode = uloops.db_precode
|
|
||||||
|
|
||||||
for precomp = uloops.precomp
|
|
||||||
|
|
||||||
for m = uloops.M
|
|
||||||
|
|
||||||
a = wh_ana.getStoValue('ber',precomp, precode, uloops.bitrate , w, m, uloops.link_length);
|
|
||||||
ber_dbtgt = cellfun(@(x) x.dbtgt_package{1,1}.ber, a);
|
|
||||||
|
|
||||||
ber_vnle = cellfun(@(x) x.vnle_pf_package{1,1}.ber_vnle, a);
|
|
||||||
|
|
||||||
ber_mlse = cellfun(@(x) x.vnle_pf_package{1,1}.ber_mlse, a);
|
|
||||||
|
|
||||||
figcnt = figcnt+1;
|
|
||||||
subplot(4,3,figcnt);
|
|
||||||
hold on
|
hold on
|
||||||
title(sprintf('precomp = %d | precode = %d | %d km | %d nm | PAM %d',precomp,precode,uloops.link_length,w,m));
|
% title(sprintf('%d km | %d nm | PAM %d',uloops.link_length,wavelength,m));
|
||||||
|
title(sprintf('PAM %d',m));
|
||||||
plot(uloops.bitrate,ber_dbtgt,'DisplayName',sprintf('DB tgt. + MLSE',uloops.link_length,uloops.M),'Color',cols(1,:),'LineStyle','-','HandleVisibility','on');
|
plot(baudrate.*1e-9,ber_dbtgt,'DisplayName',['Pre-Emphasis: ', num2str(precomp), '| Diff.-Code: 0'],'Color',cols(5+precomp,:),'LineStyle','-','HandleVisibility','on');
|
||||||
|
plot(baudrate.*1e-9,ber_dbtgt_pc,'DisplayName',['Pre-Emphasis: ', num2str(precomp), '| Diff.-Code: 1'],'Color',cols(5+precomp,:),'LineStyle','-.','HandleVisibility','on');
|
||||||
plot(uloops.bitrate,ber_vnle,'DisplayName',sprintf('VNLE'),'Color',cols(3,:),'LineStyle','-','HandleVisibility','on');
|
xticks(baudrate.*1e-9);
|
||||||
|
|
||||||
plot(uloops.bitrate,ber_mlse,'DisplayName',sprintf('VNLE + 1 tap post-filter + MLSE',uloops.link_length,uloops.M),'Color',cols(4,:),'LineStyle','-','HandleVisibility','on');
|
|
||||||
|
|
||||||
% plot(uloops.bitrate,cellfun(@min, ber_dfe),'DisplayName',sprintf('VNLE + DFE',uloops.link_length,uloops.M),'Color',cols(2,:),'LineStyle','--');
|
|
||||||
|
|
||||||
% plot(uloops.bitrate,cellfun(@min, ber_dbenc),'DisplayName',sprintf('DB Encoded',uloops.link_length,uloops.M),'Color',cols(5,:),'LineStyle','-');
|
|
||||||
|
|
||||||
set(gca, 'YScale', 'log');
|
set(gca, 'YScale', 'log');
|
||||||
ylim([5e-5 0.5]);
|
ylim([5e-5 0.4]);
|
||||||
% xlim([min(uloops.bitrate.*1e-9), max(uloops.bitrate.*1e-9) ]);
|
xlim([min(baudrate(2).*1e-9), max(baudrate.*1e-9) ]);
|
||||||
yline([3.8e-3, 2e-2],'HandleVisibility','off');
|
yline([3.8e-3, 2e-2],'HandleVisibility','off');
|
||||||
legend
|
legend
|
||||||
beautifyBERplot()
|
beautifyBERplot()
|
||||||
xlabel('Bit Rate in Gbps');
|
xlabel('Bit Rate in Gbps');
|
||||||
ylabel('Channel Wavelength (nm)');
|
ylabel('BER');
|
||||||
|
|
||||||
end
|
|
||||||
end
|
subplot(1,3,3)
|
||||||
|
hold on
|
||||||
|
% title(sprintf('%d km | %d nm | PAM %d',uloops.link_length,wavelength,m));
|
||||||
|
title(sprintf('PAM %d',m));
|
||||||
|
plot(baudrate.*1e-9,ber_mlse,'DisplayName',['Pre-Emphasis: ', num2str(precomp), '| Diff.-Code: 0'],'Color',cols(3+precomp,:),'LineStyle','-','HandleVisibility','on');
|
||||||
|
plot(baudrate.*1e-9,ber_mlse_pc,'DisplayName',['Pre-Emphasis: ', num2str(precomp), '| Diff.-Code: 1'],'Color',cols(3+precomp,:),'LineStyle','-.','HandleVisibility','on');
|
||||||
|
xticks(baudrate.*1e-9);
|
||||||
|
set(gca, 'YScale', 'log');
|
||||||
|
ylim([5e-5 0.4]);
|
||||||
|
xlim([min(baudrate(2).*1e-9), max(baudrate.*1e-9) ]);
|
||||||
|
yline([3.8e-3, 2e-2],'HandleVisibility','off');
|
||||||
|
legend
|
||||||
|
beautifyBERplot()
|
||||||
|
xlabel('Bit Rate in Gbps');
|
||||||
|
ylabel('BER');
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
%
|
||||||
|
%
|
||||||
|
% cols = linspecer(7);%cbrewer2('Set2',10);
|
||||||
|
%
|
||||||
|
%
|
||||||
|
% for w = uloops.laser_wavelength
|
||||||
|
%
|
||||||
|
% figure(w)
|
||||||
|
% figcnt = 0;
|
||||||
|
%
|
||||||
|
% for precode = uloops.db_precode
|
||||||
|
%
|
||||||
|
% for precomp = uloops.precomp
|
||||||
|
%
|
||||||
|
% for m = uloops.M
|
||||||
|
%
|
||||||
|
% a = wh_ana.getStoValue('ber',precomp, precode, uloops.bitrate , w, m, uloops.link_length);
|
||||||
|
% ber_dbtgt = cellfun(@(x) x.dbtgt_package{1,1}.ber, a);
|
||||||
|
%
|
||||||
|
% ber_vnle = cellfun(@(x) x.vnle_pf_package{1,1}.ber_vnle, a);
|
||||||
|
%
|
||||||
|
% ber_mlse = cellfun(@(x) x.vnle_pf_package{1,1}.ber_mlse, a);
|
||||||
|
%
|
||||||
|
% figcnt = figcnt+1;
|
||||||
|
% subplot(4,3,figcnt);
|
||||||
|
% hold on
|
||||||
|
% title(sprintf('precomp = %d | precode = %d | %d km | %d nm | PAM %d',precomp,precode,uloops.link_length,w,m));
|
||||||
|
%
|
||||||
|
% plot(uloops.bitrate,ber_dbtgt,'DisplayName',sprintf('DB tgt. + MLSE',uloops.link_length,uloops.M),'Color',cols(1,:),'LineStyle','-','HandleVisibility','on');
|
||||||
|
%
|
||||||
|
% plot(uloops.bitrate,ber_vnle,'DisplayName',sprintf('VNLE'),'Color',cols(3,:),'LineStyle','-','HandleVisibility','on');
|
||||||
|
%
|
||||||
|
% plot(uloops.bitrate,ber_mlse,'DisplayName',sprintf('VNLE + 1 tap post-filter + MLSE',uloops.link_length,uloops.M),'Color',cols(4,:),'LineStyle','-','HandleVisibility','on');
|
||||||
|
%
|
||||||
|
% % plot(uloops.bitrate,cellfun(@min, ber_dfe),'DisplayName',sprintf('VNLE + DFE',uloops.link_length,uloops.M),'Color',cols(2,:),'LineStyle','--');
|
||||||
|
%
|
||||||
|
% % plot(uloops.bitrate,cellfun(@min, ber_dbenc),'DisplayName',sprintf('DB Encoded',uloops.link_length,uloops.M),'Color',cols(5,:),'LineStyle','-');
|
||||||
|
%
|
||||||
|
% set(gca, 'YScale', 'log');
|
||||||
|
% ylim([5e-5 0.5]);
|
||||||
|
% % xlim([min(uloops.bitrate.*1e-9), max(uloops.bitrate.*1e-9) ]);
|
||||||
|
% yline([3.8e-3, 2e-2],'HandleVisibility','off');
|
||||||
|
% legend
|
||||||
|
% beautifyBERplot()
|
||||||
|
% xlabel('Bit Rate in Gbps');
|
||||||
|
% ylabel('Channel Wavelength (nm)');
|
||||||
|
%
|
||||||
|
% end
|
||||||
|
% end
|
||||||
|
% end
|
||||||
|
% end
|
||||||
|
|
||||||
tp = TransmissionPerformance;
|
|
||||||
netRatesVNLE = tp.calculateNetRate(uloops.bitrate, 'NGMI', cellfun(@min, inf_rate_vnle)./log2(uloops.M), 'BER', cellfun(@min, ber_vnle));
|
|
||||||
|
|
||||||
pam8= [2.9515 2.9284 2.9203 2.9311 2.8473 2.7740 2.6253];
|
|
||||||
pam6 = [2.5280 2.5452 2.5579 2.5549 2.5272 2.4243 2.2617];
|
|
||||||
pam4 = [ 1.9982 1.9972 1.9690 1.7909 1.2493 0.8014 0.6385];
|
|
||||||
|
|
||||||
figure(6)
|
m = 6;
|
||||||
hold on
|
ir = [2,2.5,3];
|
||||||
title(sprintf('Performance at 1310 for all lengths'));
|
cols = linspecer(6);
|
||||||
% plot(uloops.bitrate.*1e-9,cellfun(@min, inf_rate_vnle),'DisplayName',sprintf('NGMI VNLE; %d km',uloops.link_length),'Color',cols(3,:),'LineStyle',':');
|
baudrate_gather = [];
|
||||||
plot(uloops.bitrate.*1e-9,pam4/2,'DisplayName',sprintf('GMI VNLE; PAM 4'),'Color',cols(1,:),'LineStyle',':');
|
for i = 1:3
|
||||||
plot(uloops.bitrate.*1e-9,pam6/log2(6),'DisplayName',sprintf('GMI VNLE; PAM 6'),'Color',cols(2,:),'LineStyle',':');
|
m = uloops.M(i);
|
||||||
plot(uloops.bitrate.*1e-9,pam8/3,'DisplayName',sprintf('GMI VNLE; PAM 8'),'Color',cols(3,:),'LineStyle',':');
|
|
||||||
xlabel('Gross Bitrate in Gbps');
|
%%% GET VNLE VALS
|
||||||
ylabel('NGMI')
|
precode = 0;
|
||||||
beautifyBERplot()
|
precomp = 1;
|
||||||
ylim([0,1]);
|
a = wh_master.getStoValue('ber',precomp, precode, uloops.bitrate , uloops.laser_wavelength, m, uloops.link_length);
|
||||||
|
ber_vnle(i,:) = cellfun(@(x) x.vnle_pf_package{1,1}.ber_vnle, a);
|
||||||
|
|
||||||
|
%%% GET DB VALS
|
||||||
|
precode = 1;
|
||||||
|
precomp = 0;
|
||||||
|
a = wh_master.getStoValue('ber',precomp, precode, uloops.bitrate , uloops.laser_wavelength, m, uloops.link_length);
|
||||||
|
ber_db(i,:) = cellfun(@(x) x.dbtgt_package{1,1}.ber, a);
|
||||||
|
|
||||||
|
%%% GET MLSE VALS
|
||||||
|
precode = 0;
|
||||||
|
precomp = 0;
|
||||||
|
a = wh_master.getStoValue('ber',precomp, precode, uloops.bitrate , uloops.laser_wavelength, m, uloops.link_length);
|
||||||
|
ber_mlse(i,:) = cellfun(@(x) x.vnle_pf_package{1,1}.ber_mlse, a);
|
||||||
|
|
||||||
|
inf_rate_pam(i,:) = cellfun(@(x) x.vnle_pf_package{1,1}.air, a);
|
||||||
|
inf_rate_pam(i,:) = inf_rate_pam(i,:)./log2(m);
|
||||||
|
|
||||||
|
bitrate = floor( uloops.bitrate.*1e-9 ./log2(m) ) .* ir(i) .* 1e9;
|
||||||
|
baudrate = floor( uloops.bitrate.*1e-9 ./log2(m) ) .* 1e9;
|
||||||
|
baudrate_gather = union(baudrate_gather,baudrate);
|
||||||
|
baudrate_ticks = 100:20:240;
|
||||||
|
bitrate_ticks = 300:30:480;
|
||||||
|
|
||||||
|
tp = TransmissionPerformance;
|
||||||
|
netRatesVNLE = tp.calculateNetRate(bitrate, 'NGMI', inf_rate_pam(i,:), 'BER', ber_vnle(i,:));
|
||||||
|
|
||||||
|
%%% NGMI
|
||||||
|
figure(12)
|
||||||
|
hold on
|
||||||
|
title(sprintf('Performance at 1310 nm'));
|
||||||
|
plot(baudrate.*1e-9,inf_rate_pam(i,:),'DisplayName',sprintf('NGMI; PAM %d',m),'Color',cols(i,:),'LineStyle','-');
|
||||||
|
xlabel('Baud rate in GBd');
|
||||||
|
ylabel('NGMI')
|
||||||
|
beautifyBERplot()
|
||||||
|
xticks(baudrate_ticks);
|
||||||
|
xlim([min(baudrate_ticks) max(baudrate_ticks)]);
|
||||||
|
|
||||||
|
|
||||||
|
%%% AIR
|
||||||
|
figure(14)
|
||||||
|
hold on
|
||||||
|
title(sprintf('Performance at 1310 nm'));
|
||||||
|
plot(baudrate.*1e-9,inf_rate_pam(i,:).*bitrate.*1e-9,'DisplayName',sprintf('AIR; PAM %d',m),'Color',cols(i,:),'LineStyle','-');
|
||||||
|
xlabel('Baud rate in GBd');
|
||||||
|
ylabel('AIR');
|
||||||
|
beautifyBERplot()
|
||||||
|
xticks(baudrate_ticks);
|
||||||
|
xlim([min(baudrate_ticks) max(baudrate_ticks)]);
|
||||||
|
|
||||||
|
%%% RATES
|
||||||
|
figure(16)
|
||||||
|
hold on
|
||||||
|
title(sprintf('Performance at 1310 nm'));
|
||||||
|
if i == 1
|
||||||
|
hv = 'on';
|
||||||
|
else
|
||||||
|
hv = 'off';
|
||||||
|
end
|
||||||
|
plot(baudrate*1e-9,netRatesVNLE.SDHD.NetRate.*1e-9,'DisplayName',sprintf('SD+HD FEC',m),'Color',cols(i,:),'LineStyle','-','HandleVisibility',hv,'Marker','o');
|
||||||
|
plot(baudrate.*1e-9,netRatesVNLE.HD.NetRate.*1e-9,'DisplayName',sprintf('HD FEC',m),'Color',cols(i,:),'LineStyle',':','HandleVisibility',hv,'Marker','diamond');
|
||||||
|
plot(baudrate.*1e-9,netRatesVNLE.KP4_hamming.NetRate*1e-9,'DisplayName',sprintf('KP4+Hamming',m),'Color',cols(i,:),'LineStyle','-.','HandleVisibility',hv,'Marker','square');
|
||||||
|
xticks(baudrate_ticks);
|
||||||
|
xlim([min(baudrate_ticks) max(baudrate_ticks)]);
|
||||||
|
xlabel('Baud rate in GBd');
|
||||||
|
ylabel('Net Bitrate in Gbps')
|
||||||
|
beautifyBERplot()
|
||||||
|
ylim([250 410])
|
||||||
|
|
||||||
|
%%% CODE OVERHEAD IN %
|
||||||
|
figure(18)
|
||||||
|
hold on
|
||||||
|
title(sprintf('Performance at 1310 nm'));
|
||||||
|
plot(baudrate*1e-9,100.*(1-netRatesVNLE.SDHD.CodeRate)./netRatesVNLE.SDHD.CodeRate,'DisplayName',sprintf('SD+HD FEC',m),'Color',cols(i,:),'LineStyle','-','HandleVisibility',hv,'Marker','o');
|
||||||
|
plot(baudrate.*1e-9,100.*(1-netRatesVNLE.HD.CodeRate)./netRatesVNLE.HD.CodeRate,'DisplayName',sprintf('HD FEC',m),'Color',cols(i,:),'LineStyle',':','HandleVisibility',hv,'Marker','diamond');
|
||||||
|
plot(baudrate.*1e-9,100.*(1-netRatesVNLE.KP4_hamming.CodeRate)./netRatesVNLE.KP4_hamming.CodeRate,'DisplayName',sprintf('KP4+Hamming',m),'Color',cols(i,:),'LineStyle','-.','HandleVisibility',hv,'Marker','square');
|
||||||
|
xticks(baudrate_ticks);
|
||||||
|
xlim([min(baudrate_ticks) max(baudrate_ticks)]);
|
||||||
|
xlabel('Baud rate in GBd');
|
||||||
|
ylabel('FEC Overhead in %')
|
||||||
|
beautifyBERplot()
|
||||||
|
|
||||||
|
%%% CLASSIC BER
|
||||||
|
figure(22)
|
||||||
|
subplot(1,4,i)
|
||||||
|
hold on
|
||||||
|
plot(baudrate*1e-9,ber_vnle(i,:),'DisplayName',sprintf('Tx precomp + VNLE',m),'Color',cols(i,:),'LineStyle','-','HandleVisibility','on','Marker','o');
|
||||||
|
plot(baudrate*1e-9,ber_mlse(i,:),'DisplayName',sprintf('VNLE + PF + MLSE',m),'Color',cols(i,:),'LineStyle',':','HandleVisibility','on','Marker','square');
|
||||||
|
plot(baudrate*1e-9,ber_db(i,:),'DisplayName',sprintf('Diff. Code + DB tgt.',m),'Color',cols(i,:),'LineStyle','--','HandleVisibility','on','Marker','diamond');
|
||||||
|
yline(4.85e-3,'HandleVisibility','off');
|
||||||
|
yline(2e-2,'HandleVisibility','off');
|
||||||
|
xticks(baudrate*1e-9);
|
||||||
|
xlim([min(baudrate*1e-9) max(baudrate*1e-9)]);
|
||||||
|
ylim([1e-4 0.3]);
|
||||||
|
xlabel('Baudrate in GBd');
|
||||||
|
if i == 1
|
||||||
|
ylabel('BER')
|
||||||
|
end
|
||||||
|
beautifyBERplot()
|
||||||
|
set(gca, 'YScale', 'log');
|
||||||
|
legend
|
||||||
|
subplot(1,4,4)
|
||||||
|
hold on
|
||||||
|
if m == 4
|
||||||
|
|
||||||
|
plot(bitrate*1e-9,ber_db(i,:),'DisplayName',sprintf('Diff. Code + DB tgt.'),'Color',cols(i,:),'LineStyle','--','HandleVisibility','on','Marker','diamond');
|
||||||
|
|
||||||
|
elseif m == 6
|
||||||
|
|
||||||
|
plot(bitrate*1e-9,ber_vnle(i,:),'DisplayName',sprintf('VNLE + PF + MLSE'),'Color',cols(i,:),'LineStyle','-','HandleVisibility','on','Marker','o');
|
||||||
|
% plot(bitrate*1e-9,ber_mlse(i,:),'DisplayName',sprintf('MLSE',m),'Color',cols(i,:),'LineStyle',':','HandleVisibility',hv,'Marker','square');
|
||||||
|
|
||||||
|
elseif m ==8
|
||||||
|
|
||||||
|
plot(bitrate*1e-9,ber_vnle(i,:),'DisplayName',sprintf('Tx precomp + VNLE'),'Color',cols(i,:),'LineStyle','-','HandleVisibility','on','Marker','o');
|
||||||
|
% plot(bitrate*1e-9,ber_mlse(i,:),'DisplayName',sprintf('MLSE',m),'Color',cols(i,:),'LineStyle',':','HandleVisibility',hv,'Marker','square');
|
||||||
|
|
||||||
|
end
|
||||||
|
yline(4.85e-3,'HandleVisibility','off');
|
||||||
|
yline(2e-2,'HandleVisibility','off');
|
||||||
|
xticks(bitrate_ticks);
|
||||||
|
xlim([min(bitrate_ticks) max(bitrate_ticks)]);
|
||||||
|
ylim([1e-4 0.3]);
|
||||||
|
xlabel('Gross Bitrate in Gbps');
|
||||||
|
% ylabel('BER')
|
||||||
|
beautifyBERplot()
|
||||||
|
set(gca, 'YScale', 'log');
|
||||||
|
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
figure()
|
figure()
|
||||||
title(sprintf('%d km | 1310 nm | PAM %d | VNLE',uloops.link_length,uloops.M));
|
title(sprintf('%d km | 1310 nm | PAM %d | VNLE',uloops.link_length,uloops.M));
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ vnle_order3 = 7;
|
|||||||
vnle_order=[vnle_order1,vnle_order2,vnle_order3];
|
vnle_order=[vnle_order1,vnle_order2,vnle_order3];
|
||||||
dfe_order = [0 0 0];
|
dfe_order = [0 0 0];
|
||||||
|
|
||||||
|
pf_ncoeffs = 1;
|
||||||
|
|
||||||
alpha = 0;
|
alpha = 0;
|
||||||
|
|
||||||
@@ -54,6 +55,7 @@ mu_ffe1 = 0.0001;
|
|||||||
mu_ffe2 = 0.0008;
|
mu_ffe2 = 0.0008;
|
||||||
mu_ffe3 = 0.001;
|
mu_ffe3 = 0.001;
|
||||||
mu_dc = 0.005;
|
mu_dc = 0.005;
|
||||||
|
% mu_dc = 0;
|
||||||
|
|
||||||
mu_ffe = [mu_ffe1 mu_ffe3 mu_ffe3];
|
mu_ffe = [mu_ffe1 mu_ffe3 mu_ffe3];
|
||||||
mu_dfe = 0.0004;
|
mu_dfe = 0.0004;
|
||||||
@@ -132,6 +134,7 @@ f_nyquist = fsym/2;
|
|||||||
%%% run the simulation or measurement or ...
|
%%% run the simulation or measurement or ...
|
||||||
if simulation_mode
|
if simulation_mode
|
||||||
|
|
||||||
|
Pform = Pulseformer("fsym",fsym,"fdac",4*fsym,"pulse","rc","pulselength",16,"alpha",rcalpha);
|
||||||
rcalpha = 1;
|
rcalpha = 1;
|
||||||
Pform = Pulseformer("fsym",fsym,"fdac",4*fsym,"pulse","rrc","pulselength",16,"alpha",rcalpha);
|
Pform = Pulseformer("fsym",fsym,"fdac",4*fsym,"pulse","rrc","pulselength",16,"alpha",rcalpha);
|
||||||
|
|
||||||
@@ -246,9 +249,9 @@ else
|
|||||||
%
|
%
|
||||||
% Raw_signal = Filter('filtdegree',4,"f_cutoff",Symbols.fs.*0.55,"fs",Raw_signal.fs,"filterType",filtertypes.gaussian,"active",true).process(Raw_signal);
|
% Raw_signal = Filter('filtdegree',4,"f_cutoff",Symbols.fs.*0.55,"fs",Raw_signal.fs,"filterType",filtertypes.gaussian,"active",true).process(Raw_signal);
|
||||||
%
|
%
|
||||||
Scpe_cell{1}.eye(fsym,M,"displayname",'eye','fignum',227);
|
% Scpe_cell{1}.eye(fsym,M,"displayname",'eye','fignum',227);
|
||||||
%
|
%
|
||||||
% Raw_signal.spectrum("normalizeTo0dB",0,"fignum",336,"fft_length",2^12);
|
% Raw_signal.spectrum("normalizeTo0dB",0,"fignum",11,"fft_length",2^12);
|
||||||
% Raw_signal.move_it_spectrum("fignum",334);
|
% Raw_signal.move_it_spectrum("fignum",334);
|
||||||
% Raw_signal.move_it_spectrum("fignum",334);
|
% Raw_signal.move_it_spectrum("fignum",334);
|
||||||
|
|
||||||
@@ -296,15 +299,15 @@ for occ = 1:proc_occ
|
|||||||
% eq_mlse = FFE_DCremoval("epochs_tr",5,"epochs_dd",5,"len_tr",len_tr,"mu_dd",mu_ffe(1),"mu_tr",0,"order",ffe_order(1),"sps",2,"decide",0,"dc_buffer_len",512,"mu_dc",0.05);
|
% eq_mlse = FFE_DCremoval("epochs_tr",5,"epochs_dd",5,"len_tr",len_tr,"mu_dd",mu_ffe(1),"mu_tr",0,"order",ffe_order(1),"sps",2,"decide",0,"dc_buffer_len",512,"mu_dc",0.05);
|
||||||
|
|
||||||
mu_ffe = [mu_ffe1 mu_ffe2 mu_ffe3];
|
mu_ffe = [mu_ffe1 mu_ffe2 mu_ffe3];
|
||||||
|
vnle_order=[vnle_order1,vnle_order2,vnle_order3];
|
||||||
|
|
||||||
% %%%%% VNLE + DFE %%%%
|
% %%%%% VNLE + DFE %%%%
|
||||||
if 1
|
if 0
|
||||||
eq_vnle_dfe = EQ("Ne",vnle_order,"Nb",[0,0,0],"training_length",len_tr,"training_loops",5,"dd_loops",5,"K",2,"DCmu",mu_dc,"DDmu",[mu_ffe mu_dfe],"DFEmu",0.005,"FFEmu",0,"plotfinal",1,"ideal_dfe",0);
|
eq_vnle_dfe = EQ("Ne",vnle_order,"Nb",[0,0,0],"training_length",len_tr,"training_loops",5,"dd_loops",5,"K",2,"DCmu",mu_dc,"DDmu",[mu_ffe mu_dfe],"DFEmu",0.005,"FFEmu",0,"plotfinal",0,"ideal_dfe",0);
|
||||||
|
|
||||||
[result] = vnle(eq_vnle_dfe,M,Scpe_sig,Symbols,Tx_bits,"precode_mode",doub_mode,"showAnalysis",1);
|
[result] = vnle(eq_vnle_dfe,M,Scpe_sig,Symbols,Tx_bits,"precode_mode",doub_mode,"showAnalysis",0);
|
||||||
vnle_dfe_package{occ} = result;
|
vnle_dfe_package{occ} = result;
|
||||||
|
|
||||||
|
|
||||||
end
|
end
|
||||||
%%%%% VNLE + PF + MLSE %%%%
|
%%%%% VNLE + PF + MLSE %%%%
|
||||||
if 0
|
if 0
|
||||||
@@ -312,7 +315,7 @@ for occ = 1:proc_occ
|
|||||||
% len_tr = length(Symbols)-1000;
|
% len_tr = length(Symbols)-1000;
|
||||||
eq_vnle_ = EQ("Ne",vnle_order,"Nb",dfe_order,"training_length",len_tr,"training_loops",5,"dd_loops",5,"K",2,"DCmu",mu_dc,"DDmu",[mu_ffe mu_dfe],"DFEmu",0.005,"FFEmu",0,"plotfinal",0,"ideal_dfe",1);
|
eq_vnle_ = EQ("Ne",vnle_order,"Nb",dfe_order,"training_length",len_tr,"training_loops",5,"dd_loops",5,"K",2,"DCmu",mu_dc,"DDmu",[mu_ffe mu_dfe],"DFEmu",0.005,"FFEmu",0,"plotfinal",0,"ideal_dfe",1);
|
||||||
% eq_vnle_ = VNLE("epochs_tr",5,"epochs_dd",5,"len_tr",4096*2,"mu_dd",[0.0004 0.0005 0.0006],"mu_tr",0,"order",vnle_order,"sps",2,"decide",0);
|
% eq_vnle_ = VNLE("epochs_tr",5,"epochs_dd",5,"len_tr",4096*2,"mu_dd",[0.0004 0.0005 0.0006],"mu_tr",0,"order",vnle_order,"sps",2,"decide",0);
|
||||||
pf_ = Postfilter("ncoeff",1,"useBurg",1);
|
pf_ = Postfilter("ncoeff",pf_ncoeffs,"useBurg",1);
|
||||||
mlse_ = MLSE_viterbi("duobinary_output",0,'M',M,'trellis_states',PAMmapper(M,0).levels);
|
mlse_ = MLSE_viterbi("duobinary_output",0,'M',M,'trellis_states',PAMmapper(M,0).levels);
|
||||||
|
|
||||||
[result] = vnle_postfilter_mlse(eq_vnle_,pf_,mlse_,M,Scpe_sig,Symbols,Tx_bits,"precode_mode",doub_mode,'showAnalysis',1);
|
[result] = vnle_postfilter_mlse(eq_vnle_,pf_,mlse_,M,Scpe_sig,Symbols,Tx_bits,"precode_mode",doub_mode,'showAnalysis',1);
|
||||||
@@ -327,7 +330,7 @@ for occ = 1:proc_occ
|
|||||||
mlse_db = MLSE_viterbi("DIR",[1,1],"duobinary_output",0,"M",M,"trellis_states",PAMmapper(M,0).levels);
|
mlse_db = MLSE_viterbi("DIR",[1,1],"duobinary_output",0,"M",M,"trellis_states",PAMmapper(M,0).levels);
|
||||||
eq_db = EQ("Ne",vnle_order,"Nb",dfe_order,"training_length",len_tr,"training_loops",5,"dd_loops",5,"K",2,"DCmu",mu_dc,"DDmu",[mu_ffe mu_dfe],"DFEmu",0.005,"FFEmu",0,"plotfinal",0,"ideal_dfe",1);
|
eq_db = EQ("Ne",vnle_order,"Nb",dfe_order,"training_length",len_tr,"training_loops",5,"dd_loops",5,"K",2,"DCmu",mu_dc,"DDmu",[mu_ffe mu_dfe],"DFEmu",0.005,"FFEmu",0,"plotfinal",0,"ideal_dfe",1);
|
||||||
|
|
||||||
[result] = duobinary_target(eq_db, mlse_db, M, Scpe_sig, Symbols, Tx_bits, "precode_mode", doub_mode,'showAnalysis',1);
|
[result] = duobinary_target(eq_db, mlse_db, M, Scpe_sig, Symbols, Tx_bits, "precode_mode", doub_mode,'showAnalysis',0);
|
||||||
dbtgt_package{occ} = result;
|
dbtgt_package{occ} = result;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
|
|
||||||
precomp_path = "C:\Users\Silas\Documents\MATLAB\imdd_simulation\projects\standard_system";
|
precomp_path = "C:\Users\Silas\Documents\MATLAB\Datensätze\sioe_labor\precomp";
|
||||||
precomp_filename = "lab_mpi_setup_2";
|
precomp_filename = "lab_high_speed";
|
||||||
|
|
||||||
freqresp = ChannelFreqResp("Nacq",1024,"Navg",64,"Ncp",63,'f_ref',92e9);
|
freqresp = ChannelFreqResp("Nacq",1024,"Navg",64,"Ncp",63,'f_ref',92e9);
|
||||||
freqresp.load('loadPath',precomp_path,'fileName',precomp_filename);
|
freqresp.load('loadPath',precomp_path,'fileName',precomp_filename);
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
useprbs = 1;
|
useprbs = 1;
|
||||||
M = 6;
|
M = 2;
|
||||||
randkey = 1;
|
randkey = 1;
|
||||||
datarate = 448e9;
|
datarate = 448e9;
|
||||||
fsym = round(datarate / log2(M)) ;
|
fsym = round(datarate / log2(M)) ;
|
||||||
|
|
||||||
%%%%% PRBS Generation in correct shape for Modulation Format %%%%%%
|
%%%%% PRBS Generation in correct shape for Modulation Format %%%%%%
|
||||||
O = 15; %O of prbs
|
O = 16; %O of prbs
|
||||||
N = 2^(O); %length of prbs
|
N = 2^(O); %length of prbs
|
||||||
[~,seed] = prbs(O,1); %initialize first seed of prbs
|
[~,seed] = prbs(O,1); %initialize first seed of prbs
|
||||||
bitpattern=[];
|
bitpattern=[];
|
||||||
@@ -47,28 +47,79 @@ Tx_bits = Informationsignal(bitpattern);
|
|||||||
|
|
||||||
%%%%% Duobinary %%%%%%
|
%%%%% Duobinary %%%%%%
|
||||||
|
|
||||||
|
precode = 1;
|
||||||
|
db_encode = 0;
|
||||||
|
|
||||||
close all
|
close all
|
||||||
Symbols_tx = PAMmapper(M,0).map(Tx_bits);
|
Symbols_tx = PAMmapper(M,0).map(Tx_bits);
|
||||||
Symbols_tx.fs = fsym;
|
Symbols_tx.fs = fsym;
|
||||||
|
|
||||||
Symbols1 = Duobinary().precode(Symbols_tx);
|
%%% precode
|
||||||
figure;histogram(Symbols1.signal);
|
if precode
|
||||||
|
Symbols0 = Duobinary().precode(Symbols_tx);
|
||||||
|
else
|
||||||
|
Symbols0 = Symbols_tx;
|
||||||
|
end
|
||||||
|
|
||||||
Symbols2 = Duobinary().encode(Symbols1);
|
figure;histogram(Symbols0.signal);
|
||||||
figure;histogram(Symbols2.signal);
|
|
||||||
|
|
||||||
Symbols3 = Duobinary().decode(Symbols2);
|
for n = 0:200
|
||||||
figure;histogram(Symbols3.signal);
|
|
||||||
autoArrangeFigures;
|
|
||||||
|
|
||||||
Rx_bits = PAMmapper(M,0).demap(Symbols3);
|
if db_encode
|
||||||
|
Symbols1 = Duobinary().encode(Symbols0);
|
||||||
|
else
|
||||||
|
Symbols1 = Symbols0;
|
||||||
|
end
|
||||||
|
|
||||||
%%%%% Check BER of Bit Sequence %%%%%%
|
Symbols2 = Symbols1;
|
||||||
|
pos = 1;
|
||||||
|
if n~=0
|
||||||
|
for pos = 1:n
|
||||||
|
po = randi(100);
|
||||||
|
a = Symbols2.signal(100+pos) == Symbols1.signal(100+po);
|
||||||
|
while a == 1
|
||||||
|
po = po+1;
|
||||||
|
po = randi(100);
|
||||||
|
a = Symbols2.signal(100+pos) == Symbols1.signal(100+po);
|
||||||
|
end
|
||||||
|
Symbols2.signal(100+pos) = Symbols1.signal(100+po);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
[~,error_num,ber,error_pos] = calc_ber(Tx_bits.signal,Rx_bits.signal,"skip_front",0,"skip_end",0,"returnErrorLocation",1);
|
% disp(Symbols2.signal(100:100+pos)==Symbols1.signal(100:100+pos))
|
||||||
|
|
||||||
disp(['BER: ',sprintf('%.1E',ber),' - - PAM-',num2str(M)]);
|
%%% encode
|
||||||
%
|
|
||||||
|
if db_encode
|
||||||
|
|
||||||
|
% figure;histogram(Symbols2.signal);
|
||||||
|
|
||||||
|
Symbols3 = Duobinary().decode(Symbols2);
|
||||||
|
% figure;histogram(Symbols3.signal);
|
||||||
|
% autoArrangeFigures;
|
||||||
|
elseif precode
|
||||||
|
Symbols3 = Duobinary().encode(Symbols2);
|
||||||
|
Symbols3 = Duobinary().decode(Symbols3);
|
||||||
|
% figure;histogram(Symbols3.signal);
|
||||||
|
else
|
||||||
|
Symbols3 = Symbols2;
|
||||||
|
end
|
||||||
|
|
||||||
|
Rx_bits = PAMmapper(M,0).demap(Symbols3);
|
||||||
|
|
||||||
|
%%%%% Check BER of Bit Sequence %%%%%%
|
||||||
|
|
||||||
|
[~,error_num(n+1),ber,error_pos] = calc_ber(Tx_bits.signal,Rx_bits.signal,"skip_front",10,"skip_end",10,"returnErrorLocation",1);
|
||||||
|
|
||||||
|
% disp(['BER: ',sprintf('%.1E',ber),sprintf(' - Num. Err: %.1d',error_num(n+1)-2),' - - PAM-',num2str(M)]);
|
||||||
|
fprintf('n: %d - Num. Err: %.1d \n',n,error_num(n+1));
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
figure()
|
||||||
|
hold on
|
||||||
|
scatter(1:length(Symbols3),Symbols3.signal,1,'.');
|
||||||
|
scatter(error_pos,Symbols3.signal(error_pos),14,'o');
|
||||||
|
|
||||||
|
|
||||||
figure(3);
|
figure(3);
|
||||||
|
|||||||
Reference in New Issue
Block a user