M = 4; apply_precode = 0; 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 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'); scatter(idxs,d_dec.signal(idxs),'DisplayName',['EQ Signal'],'Marker','x'); yline(PAMmapper(M,0).thresholds,'HandleVisibility','off'); legend ylim([-2 2])