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