duobinary cleanup (currently it is a mess)
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
|
||||
|
||||
M = 6;
|
||||
apply_precode = 1;
|
||||
M = 4;
|
||||
apply_precode = 0;
|
||||
|
||||
bitpattern = [];
|
||||
s = RandStream('twister','Seed',1);
|
||||
@@ -29,12 +29,12 @@ else
|
||||
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
|
||||
@@ -51,6 +51,8 @@ disp(['BER: ',sprintf('%.1E',ber),' - - PAM-',num2str(M)]);
|
||||
figure(200)
|
||||
clf
|
||||
hold on
|
||||
start = 100;
|
||||
burstwidth = 10;
|
||||
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');
|
||||
|
||||
75
test/memoryless_decoding.m
Normal file
75
test/memoryless_decoding.m
Normal file
@@ -0,0 +1,75 @@
|
||||
% einstellungen
|
||||
M = 4;
|
||||
apply_precode_at_tx = 0;
|
||||
emulate_precode = 1;
|
||||
|
||||
% daten erzeugen
|
||||
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
|
||||
|
||||
tx_bits = Informationsignal(bitpattern);
|
||||
tx_symbols = PAMmapper(M,0).map(tx_bits);
|
||||
|
||||
if apply_precode_at_tx
|
||||
|
||||
tx_symbols = Duobinary().precode(tx_symbols);
|
||||
|
||||
if emulate_precode
|
||||
% ansatz 1B) Omit precode (einfach precoded empfangen, nichts weiter machen und normal prozessieren - möglich weil konstellation sich nicht ändert)
|
||||
rx_symbols = tx_symbols;
|
||||
bits_rx = PAMmapper(M,0).demap(rx_symbols);
|
||||
% beachten, dass man die tx_bits anpassen muss, da man ja mit precoded symbolen vergleicht
|
||||
tx_bits = PAMmapper(M,0).demap(tx_symbols);
|
||||
else
|
||||
% ansatz 1A) Precode normal:
|
||||
% 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(tx_symbols);
|
||||
% Entschiedene codierte Symbole decodieren: d_dec(n) = d_DB(n) mod4
|
||||
rx_symbols = Duobinary().decode(symbols_db);
|
||||
bits_rx = PAMmapper(M,0).demap(rx_symbols);
|
||||
end
|
||||
|
||||
[~,~,ber,~] = calc_ber(tx_bits.signal,bits_rx.signal,"skip_front",0,"skip_end",0,"returnErrorLocation",1);
|
||||
disp(['BER: ',sprintf('%.1E',ber)]);
|
||||
assert(ber == 0)
|
||||
|
||||
else
|
||||
|
||||
if emulate_precode
|
||||
% emulate 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(tx_symbols); % das wäre der FFE mit db target
|
||||
|
||||
% Entschiedene codierte Symbole decodieren: d_dec(n) = d_DB(n) mod4
|
||||
rx_symbols = Duobinary().decode(symbols_db); % modulo
|
||||
bits_rx = PAMmapper(M,0).demap(rx_symbols); % demappen
|
||||
|
||||
% ref symbole precoden, auch hier muss man wieder etwas fummeln wegen der emulation:
|
||||
% encode + decode == remove precoding (mathematisch die gleiche operation)
|
||||
tx_symbols_ref = Duobinary().encode(tx_symbols);
|
||||
tx_symbols_ref = Duobinary().decode(tx_symbols_ref);
|
||||
tx_bits = PAMmapper(M,0).demap(tx_symbols_ref);
|
||||
|
||||
else
|
||||
% normal detection without any precode stuff
|
||||
symbols_db = Duobinary().encode(tx_symbols);
|
||||
|
||||
rx_symbols = tx_symbols;
|
||||
bits_rx = PAMmapper(M,0).demap(rx_symbols);
|
||||
end
|
||||
|
||||
|
||||
[~,~,ber,~] = calc_ber(tx_bits.signal,bits_rx.signal,"skip_front",1,"skip_end",1,"returnErrorLocation",1);
|
||||
disp(['BER: ',sprintf('%.1E',ber)]);
|
||||
assert(ber == 0)
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user