useprbs = 1; M = 4; randkey = 1; datarate = 224e9; fsym = round(datarate / log2(M)) ; db_pre = 1; Pform = Pulseformer("fsym",fsym,"fdac",4*fsym,"pulse","rrc","pulselength",16,"rrcalpha",0.05); [d,Symbols,Bits] = PAMsource(... "fsym",fsym,"M",M,"order",17,"useprbs",1,... "fs_out",fsym,... "applyclipping",0,"clipfactor",1.5,... "applypulseform",0,"pulseformer",Pform,... "randkey",1,... "db_precode",db_pre,"db_encode",0,... "mrds_code",0,"mrds_blocklength",512).process(); %%%CHANNEL % s = RandStream('twister','Seed',2); % start = 10000; % burstwidth = 100; % d_burst = d; % for pos = start:start+burstwidth % lvls = 1.5 .* PAMmapper(M,0).levels / rms(PAMmapper(M,0).levels); % d_burst.signal(pos) = d.signal(pos)+randn(s,1,1); % end d_resample = d.resample("fs_out",2.*fsym); eq_ffe = FFE("epochs_tr",5,"epochs_dd",5,"len_tr",1024,"mu_dd",0.0004,"mu_tr",0,"order",25,"sps",2,"decide",1); d_eq = eq_ffe.process(d_resample,Symbols); % s = RandStream('twister','Seed',2); % start = 10000; % burstwidth = 100; % d_burst = d_eq; % for pos = start:start+burstwidth % lvls = 1.5 .* PAMmapper(M,0).levels / rms(PAMmapper(M,0).levels); % d_burst.signal(pos) = d_eq.signal(pos)+randn(s,1,1); % end % % d_burst = PAMmapper(M,0).decide_pamlevel(d_burst); if db_pre % Entschiedene Symbole codieren: d_DB(n) = d(n) + d(n-1) (im Fall von PAM4 7 level [0 1 2 3 4 5 6]) d_db = Duobinary().encode(d); % Entschiedene codierte Symbole decodieren: d_dec(n) = d_DB(n) mod4 d_dec = Duobinary().decode(d_db); else d_dec = d_burst; end % Vergleichen von b(n) und d_dec(n) Rx_bits = PAMmapper(M,0).demap(d_dec); Tx_bits = Bits; [~,error_num,ber,error_pos] = calc_ber(Tx_bits.signal,Rx_bits.signal,"skip_front",0,"skip_end",0,"returnErrorLocation",1); disp(['BER: ',sprintf('%.1E',ber),' - - PAM-',num2str(M)]); figure(200) clf hold on 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])