stuff from 400G analysis (project deliv 01)

This commit is contained in:
Silas Oettinghaus
2025-03-10 12:48:10 +01:00
parent affdb4ad6f
commit 77ac44536d
15 changed files with 787 additions and 207 deletions

View File

@@ -1,11 +1,11 @@
useprbs = 1;
M = 6;
M = 2;
randkey = 1;
datarate = 448e9;
fsym = round(datarate / log2(M)) ;
%%%%% PRBS Generation in correct shape for Modulation Format %%%%%%
O = 15; %O of prbs
O = 16; %O of prbs
N = 2^(O); %length of prbs
[~,seed] = prbs(O,1); %initialize first seed of prbs
bitpattern=[];
@@ -47,28 +47,79 @@ Tx_bits = Informationsignal(bitpattern);
%%%%% Duobinary %%%%%%
precode = 1;
db_encode = 0;
close all
Symbols_tx = PAMmapper(M,0).map(Tx_bits);
Symbols_tx.fs = fsym;
Symbols1 = Duobinary().precode(Symbols_tx);
figure;histogram(Symbols1.signal);
%%% precode
if precode
Symbols0 = Duobinary().precode(Symbols_tx);
else
Symbols0 = Symbols_tx;
end
Symbols2 = Duobinary().encode(Symbols1);
figure;histogram(Symbols2.signal);
figure;histogram(Symbols0.signal);
Symbols3 = Duobinary().decode(Symbols2);
figure;histogram(Symbols3.signal);
autoArrangeFigures;
for n = 0:200
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))
%%% 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
disp(['BER: ',sprintf('%.1E',ber),' - - PAM-',num2str(M)]);
%
figure()
hold on
scatter(1:length(Symbols3),Symbols3.signal,1,'.');
scatter(error_pos,Symbols3.signal(error_pos),14,'o');
figure(3);