Files
imdd_silas/Theory/Mapping_Coding/partial_response/duobinary_back2back.m

41 lines
1.7 KiB
Matlab

for M = [2 4 8]
bits = Signalgenerator("form", signalform.prms,"M", M,"order", 15).process();
mapper = PAMmapper(M,0);
symbols = mapper.map(bits);
symbols_pre = Duobinary().precode(symbols);
symbols_db = Duobinary().encode(symbols_pre);
symbols_rx = Duobinary().decode(symbols_db);
bits_rx = PAMmapper(M,0).demap(symbols_rx);
[~,~,ber,~] = calc_ber(bits.signal,bits_rx.signal,"skip_front",0,"skip_end",0,"returnErrorLocation",1);
disp(['Class BER: ',sprintf('%.1E',ber),' - PAM-',num2str(M)]);
symbols_pre_pr = Partialresponse("order",1).precode(symbols,"M",M);
symbols_db_pr = Partialresponse("order",1).encode(symbols_pre_pr,"M",M);
symbols_rx_pr = Partialresponse("order",1).decode(symbols_db_pr,"M",M);
bits_rx_pr = mapper.demap(symbols_rx_pr);
[~,~,ber_pr,~] = calc_ber(bits.signal,bits_rx_pr.signal,"skip_front",0,"skip_end",0,"returnErrorLocation",1);
disp(['Partialresponse BER: ',sprintf('%.1E',ber_pr),' - PAM-',num2str(M)]);
pre_match = isequaln(symbols_pre.signal, symbols_pre_pr.signal);
enc_match = isequaln(symbols_db.signal, symbols_db_pr.signal);
dec_match = isequaln(symbols_rx.signal, symbols_rx_pr.signal);
pre_maxdiff = max(abs(symbols_pre.signal - symbols_pre_pr.signal));
enc_maxdiff = max(abs(symbols_db.signal - symbols_db_pr.signal));
dec_maxdiff = max(abs(symbols_rx.signal - symbols_rx_pr.signal));
disp(['Precode match: ',num2str(pre_match), ...
' | max abs diff: ',sprintf('%.3g',pre_maxdiff)]);
disp(['Encode match: ',num2str(enc_match), ...
' | max abs diff: ',sprintf('%.3g',enc_maxdiff)]);
disp(['Decode match: ',num2str(dec_match), ...
' | max abs diff: ',sprintf('%.3g',dec_maxdiff)]);
disp('---');
end