useprbs = 1; M = 2; randkey = 1; datarate = 448e9; fsym = round(datarate / log2(M)) ; %%%%% PRBS Generation in correct shape for Modulation Format %%%%%% O = 16; %O of prbs N = 2^(O); %length of prbs [~,seed] = prbs(O,1); %initialize first seed of prbs bitpattern=[]; state = struct(); para = struct(); if M == 6 para.bl = 2^(O-2); para.dimension = 5; else para.bl = 2^(O-1); para.dimension = log2(M); %2.5bits/sym -> 2 bit/sym end para.rand = 0; para.order = floor(O / log2(M)); para.skip =0; para.bruijn = 0; para.reset_prms = 0; para.method = 1; para.pcs = 0; para.shape_para = 0; para.rng_num = 0; data_in = []; global loop; loop = 0; [data_out,state_] = prms(data_in, state, para); loop = 1; [data_out,state_out] = prms(data_in, state_, para); bitpattern = data_out'; if M == 6 bitpattern = reshape(bitpattern',[],1); bitpattern = bitpattern(1:end-mod(length(bitpattern),5)); end Tx_bits = Informationsignal(bitpattern); %%%%% Duobinary %%%%%% close all Symbols_tx = PAMmapper(M,0,"eth_style",0).map(Tx_bits); Symbols_tx.fs = fsym; precode = db_mode.db_precoded; %%% precode switch precode case db_mode.db_precoded Symbols_tx = Duobinary().precode(Symbols_tx); case db_mode.db_encoded Symbols_tx = Duobinary().precode(Symbols_tx); Symbols_tx = Duobinary().encode(Symbols_tx); case db_mode.no_db end for n = 10 Symbols_rx = Symbols_tx; pos = 1; if n~=0 for pos = 1:n po = randi(100); a = Symbols_rx.signal(100+pos) == Symbols_tx.signal(100+po); while a == 1 po = po+1; po = randi(100); a = Symbols_rx.signal(100+pos) == Symbols_tx.signal(100+po); end Symbols_rx.signal(100+pos) = Symbols_tx.signal(100+po); end end error_positions = ~(Symbols_rx.signal == Symbols_tx.signal); error_positions = find(error_positions==1); switch precode case db_mode.db_precoded Symbols_rx = Duobinary().encode(Symbols_rx); Symbols_rx = Duobinary().decode(Symbols_rx); case db_mode.db_encoded Symbols_rx = Duobinary().decode(Symbols_rx); end Rx_bits = PAMmapper(M,0).demap(Symbols_rx); %%%%% Check BER of Bit Sequence %%%%%% [~,error_num(n+1),ber,error_pos] = calc_ber(Tx_bits.signal,Rx_bits.signal,"skip_front",10,"skip_end",10,"returnErrorLocation",1); % disp(['BER: ',sprintf('%.1E',ber),sprintf(' - Num. Err: %.1d',error_num(n+1)-2),' - - PAM-',num2str(M)]); fprintf('n: %d - Num. Err: %.1d \n',n,error_num(n+1)); end figure(3); clf %sgtitle(['BER: ',num2str(ber),' // Error is at position: ',num2str(error_pos),'']) subplot(2,2,1) hold on title('First Bits') stairs(Tx_bits.signal(100:150,1),'LineStyle','-','LineWidth',2,'DisplayName','Tx Bits'); stairs(Rx_bits.signal(100:150,1),'LineWidth',2,'DisplayName','Rx Bits','LineStyle',':') legend subplot(2,2,2) title('Last Bits') hold on stairs(Tx_bits.signal(end-50:end,1),'LineStyle','-','LineWidth',2,'DisplayName','Tx Bits'); stairs(Rx_bits.signal(end-50:end,1),'LineWidth',2,'DisplayName','Rx Bits','LineStyle',':') legend subplot(2,2,3) hold on title('First Symbols Compare') stairs(Symbols_tx.signal(1:100,1),'LineWidth',2,'DisplayName','Tx Symbols','LineStyle','-') stairs(Symbols_rx.signal(1:100,1),'LineStyle',':','LineWidth',2,'DisplayName','Rx Symbols'); legend subplot(2,2,4) hold on title('Last Symbols Compare') stairs(Symbols_tx.signal(end-50:end,1),'LineWidth',2,'DisplayName','Tx Symbols','LineStyle','-') stairs(Symbols_rx.signal(end-50:end,1),'LineStyle',':','LineWidth',2,'DisplayName','Rx Symbols'); legend