WDM code added (Pol Cont., Opt MUX/DEMUX, Opt Atten, DP_Fiber) -> the codebase is not optimized to always work with dp signals!
60 lines
1.6 KiB
Matlab
60 lines
1.6 KiB
Matlab
|
|
|
|
M = 6;
|
|
apply_precode = 1;
|
|
|
|
bitpattern = [];
|
|
s = RandStream('twister','Seed',1);
|
|
for i = 1:log2(M)
|
|
N = 2^(17-1); %length of prbs
|
|
bitpattern(:,i) = randi(s,[0 1], N, 1);
|
|
end
|
|
|
|
if M == 6
|
|
bitpattern = reshape(bitpattern',[],1);
|
|
bitpattern = bitpattern(1:end-mod(length(bitpattern),5));
|
|
end
|
|
|
|
bits = Informationsignal(bitpattern);
|
|
|
|
symbols = PAMmapper(M,0).map(bits);
|
|
|
|
bits_rx = PAMmapper(M,0).demap(symbols);
|
|
[~,~,ber_direct,~] = calc_ber(bits.signal,bits_rx.signal,"skip_front",0,"skip_end",0,"returnErrorLocation",1);
|
|
|
|
if apply_precode
|
|
symbols_tx = Duobinary().precode(symbols);
|
|
else
|
|
symbols_tx = symbols;
|
|
end
|
|
|
|
show2Dconstellation(symbols_tx,symbols_tx,"displayname",'VNLE Out','fignum',2241);
|
|
|
|
|
|
if apply_precode
|
|
% Entschiedene Symbole codieren: d_DB(n) = d(n) + d(n-1) (im Fall von PAM4 7 level [0 1 2 3 4 5 6])
|
|
symbols_db = Duobinary().encode(symbols_tx);
|
|
|
|
% Entschiedene codierte Symbole decodieren: d_dec(n) = d_DB(n) mod4
|
|
symbols_rx = Duobinary().decode(symbols_db);
|
|
else
|
|
symbols_rx = symbols_tx;
|
|
end
|
|
|
|
% Vergleichen von b(n) und d_dec(n)
|
|
bits_rx = PAMmapper(M,0).demap(symbols_rx);
|
|
[~,~,ber,~] = calc_ber(bits.signal,bits_rx.signal,"skip_front",10,"skip_end",10,"returnErrorLocation",1);
|
|
|
|
disp(['BER: ',sprintf('%.1E',ber),' - - PAM-',num2str(M)]);
|
|
|
|
|
|
figure(200)
|
|
clf
|
|
hold on
|
|
idxs = start-10:start+burstwidth+10;
|
|
scatter(idxs,d.signal(idxs),'DisplayName',['Orig Signal'],'Marker','o');
|
|
scatter(idxs,d_burst.signal(idxs),'DisplayName',['Error Signal'],'Marker','x');
|
|
scatter(idxs,d_dec.signal(idxs),'DisplayName',['EQ Signal'],'Marker','x');
|
|
yline(PAMmapper(M,0).thresholds,'HandleVisibility','off');
|
|
legend
|
|
ylim([-2 2]) |