197 lines
6.3 KiB
Matlab
197 lines
6.3 KiB
Matlab
|
|
M=4;
|
|
|
|
fdac = 256e9;%fsym;
|
|
fadc = 256e9;
|
|
fsym = ([32:16:240].*1e9);
|
|
|
|
%fsym = 160e9;
|
|
% 1) PRBS Generation
|
|
O = 18; %order of prbs
|
|
N = 2^(O-1); %length of prbs
|
|
[~,seed] = prbs(O,1); %initialize first seed of prbs
|
|
bitpattern=[];
|
|
|
|
for i = 1:log2(M)
|
|
[bitpattern(:,i),seed] = prbs(O,N,seed);
|
|
end
|
|
|
|
|
|
if M == 6
|
|
bitpattern = reshape(bitpattern,[],1);
|
|
bitpattern = bitpattern(1:end-mod(length(bitpattern),5));
|
|
end
|
|
|
|
% 2 ) Build Inf. signal class
|
|
bits = Informationsignal(bitpattern);
|
|
|
|
% 5) AWG (lowpass, quantization, sample and hold)
|
|
kover = 8;
|
|
LP_awg = Filter('filtdegree',4,"f_cutoff",75e9,"fs",fdac*kover,"filterType",filtertypes.butterworth);
|
|
|
|
powerlist = [];
|
|
input_papr = zeros(numel(fsym),1);
|
|
output_papr = zeros(numel(fsym),1);
|
|
|
|
for i = 1:length(fsym)
|
|
|
|
%%%%% Map to PAM %%%%%%
|
|
digimod_out = PAMmapper(M,0).map(bits);
|
|
digimod_out.fs = fsym(i);
|
|
|
|
% Y.plot("fignum",2,'displayname',['PAM 4 Signal; Raised Cosine Alpha: ',num2str(rrca)]);
|
|
% X.plot("fignum",2,'displayname',['PAM 4 Signal; Raised Cosine Alpha: ',num2str(rrca)])
|
|
% digimod_out.plot("fignum",2,'displayname',['PAM 4 Signal'])
|
|
|
|
%X.spectrum("displayname",['PAM 4; Baudrate: ',num2str(fsym(i).*1e-9), ' GBd', num2str(rrca)],'fignum',4);
|
|
%%%%% AWG %%%%%%
|
|
|
|
X = digimod_out;
|
|
|
|
X1 = M8199B("kover",kover).process(X);
|
|
|
|
X2 = M8199A("kover",kover).process(X);
|
|
|
|
X3 = M8196A("kover",kover).process(X);
|
|
|
|
% X.spectrum("displayname",['Baudrate: ',num2str(fsym(i).*1e-9), ' GBd'],'fignum',4);
|
|
|
|
powerlist1(i) = X1.power;
|
|
vpplist1(i) = max(X1.signal)-min(X1.signal);
|
|
paprlist1(i) = X1.papr_lin;
|
|
|
|
powerlist2(i) = X2.power;
|
|
vpplist2(i) = max(X2.signal)-min(X2.signal);
|
|
paprlist2(i) = X2.papr_lin;
|
|
|
|
if fsym(i) <= 113e9
|
|
powerlist3(i) = X3.power;
|
|
vpplist3(i) = max(X3.signal)-min(X3.signal);
|
|
paprlist3(i) = X3.papr_lin;
|
|
else
|
|
powerlist3(i) =NaN;
|
|
vpplist3(i) = NaN;
|
|
paprlist3(i) = NaN;
|
|
end
|
|
|
|
|
|
|
|
%%%%% Pulseforming %%%%%%
|
|
rrca=0.3;
|
|
X = Pulseformer("fsym",fsym(i),"fdac",256e9,"pulse","rc","pulselength",16,"alpha",rrca).process(digimod_out);
|
|
|
|
% % %%%%% Clip to PAM range %%%%%%
|
|
min_ = min(digimod_out.signal).*1.3;
|
|
max_ = max(digimod_out.signal).*1.3;
|
|
X.signal = clip(X.signal,min_,max_);
|
|
|
|
X1 = M8199B("kover",kover).process(X);
|
|
|
|
X2 = M8199A("kover",kover).process(X);
|
|
|
|
X = Pulseformer("fsym",fsym(i),"fdac",92e9,"pulse","rc","pulselength",16,"alpha",rrca).process(digimod_out);
|
|
|
|
% % %%%%% Clip to PAM range %%%%%%
|
|
min_ = min(digimod_out.signal).*1.3;
|
|
max_ = max(digimod_out.signal).*1.3;
|
|
X.signal = clip(X.signal,min_,max_);
|
|
|
|
X3 = M8196A("kover",kover).process(X);
|
|
|
|
powerlist1_opt(i) = X1.power;
|
|
vpplist1_opt(i) = max(X1.signal)-min(X1.signal);
|
|
paprlist1_opt(i) = X1.papr_lin;
|
|
|
|
powerlist2_opt(i) = X2.power;
|
|
vpplist2_opt(i) = max(X2.signal)-min(X2.signal);
|
|
paprlist2_opt(i) = X2.papr_lin;
|
|
|
|
if fsym(i) <= 113e9
|
|
powerlist3_opt(i) = X3.power;
|
|
vpplist3_opt(i) = max(X3.signal)-min(X3.signal);
|
|
paprlist3_opt(i) = X3.papr_lin;
|
|
else
|
|
powerlist3_opt(i) =NaN;
|
|
vpplist3_opt(i) = NaN;
|
|
paprlist3_opt(i) = NaN;
|
|
end
|
|
|
|
end
|
|
%%
|
|
cols = linspecer(3);
|
|
|
|
figure(6)
|
|
hold on
|
|
scatter(fsym.*1e-9,vpplist1,'DisplayName','M8199B','MarkerFaceColor',cols(1,:),'MarkerEdgeColor',cols(1,:),'LineWidth',2);
|
|
scatter(fsym.*1e-9,vpplist2,'DisplayName','M8199A','MarkerFaceColor',cols(2,:),'MarkerEdgeColor',cols(2,:),'LineWidth',2);
|
|
scatter(fsym.*1e-9,vpplist3,'DisplayName','M8196A','MarkerFaceColor',cols(3,:),'MarkerEdgeColor',cols(3,:),'LineWidth',2);
|
|
xticks(fsym.*1e-9)
|
|
xlabel("Baudrate in GBaud");
|
|
ylabel("Vpp in V")
|
|
legend
|
|
ylim([0.3 1.4])
|
|
|
|
|
|
figure(7)
|
|
hold on
|
|
scatter(fsym.*1e-9,powerlist1,'DisplayName','M8199B','MarkerFaceColor',cols(1,:),'MarkerEdgeColor',cols(1,:),'LineWidth',2);
|
|
scatter(fsym.*1e-9,powerlist2,'DisplayName','M8199A','MarkerFaceColor',cols(2,:),'MarkerEdgeColor',cols(2,:),'LineWidth',2);
|
|
scatter(fsym.*1e-9,powerlist3,'DisplayName','M8196A','MarkerFaceColor',cols(3,:),'MarkerEdgeColor',cols(3,:),'LineWidth',2);
|
|
xticks(fsym.*1e-9)
|
|
xlabel("Baudrate in GBaud");
|
|
ylabel("Output Power in dBm")
|
|
legend
|
|
ylim([-12 4])
|
|
|
|
|
|
figure(8)
|
|
hold on
|
|
scatter(fsym.*1e-9,paprlist1,'DisplayName','M8199B','MarkerFaceColor',cols(1,:),'MarkerEdgeColor',cols(1,:),'LineWidth',2);
|
|
scatter(fsym.*1e-9,paprlist2,'DisplayName','M8199A','MarkerFaceColor',cols(2,:),'MarkerEdgeColor',cols(2,:),'LineWidth',2);
|
|
scatter(fsym.*1e-9,paprlist3,'DisplayName','M8196A','MarkerFaceColor',cols(3,:),'MarkerEdgeColor',cols(3,:),'LineWidth',2);
|
|
xticks(fsym.*1e-9)
|
|
xlabel("Baudrate in GBaud");
|
|
ylabel("PAPR linear")
|
|
legend
|
|
ylim([3 10])
|
|
|
|
|
|
|
|
figure(9)
|
|
hold on
|
|
scatter(fsym.*1e-9,vpplist1_opt,'DisplayName','M8199B','Marker','x','MarkerFaceColor',cols(1,:),'MarkerEdgeColor',cols(1,:),'LineWidth',3);
|
|
scatter(fsym.*1e-9,vpplist2_opt,'DisplayName','M8199A','Marker','x','MarkerFaceColor',cols(2,:),'MarkerEdgeColor',cols(2,:),'LineWidth',3);
|
|
scatter(fsym.*1e-9,vpplist3_opt,'DisplayName','M8196A','Marker','x','MarkerFaceColor',cols(3,:),'MarkerEdgeColor',cols(3,:),'LineWidth',3);
|
|
xticks(fsym.*1e-9)
|
|
xlabel("Baudrate in GBaud");
|
|
ylabel("Vpp in V")
|
|
legend
|
|
ylim([0.3 1.4])
|
|
|
|
|
|
figure(10)
|
|
hold on
|
|
scatter(fsym.*1e-9,powerlist1_opt,'DisplayName','M8199B','Marker','x','MarkerFaceColor',cols(1,:),'MarkerEdgeColor',cols(1,:),'LineWidth',3);
|
|
scatter(fsym.*1e-9,powerlist2_opt,'DisplayName','M8199A','Marker','x','MarkerFaceColor',cols(2,:),'MarkerEdgeColor',cols(2,:),'LineWidth',3);
|
|
scatter(fsym.*1e-9,powerlist3_opt,'DisplayName','M8196A','Marker','x','MarkerFaceColor',cols(3,:),'MarkerEdgeColor',cols(3,:),'LineWidth',3);
|
|
xticks(fsym.*1e-9)
|
|
xlabel("Baudrate in GBaud");
|
|
ylabel("Output Power in dBm")
|
|
legend
|
|
ylim([-12 4])
|
|
|
|
|
|
figure(11)
|
|
hold on
|
|
scatter(fsym.*1e-9,paprlist1_opt,'DisplayName','M8199B','Marker','x','MarkerFaceColor',cols(1,:),'MarkerEdgeColor',cols(1,:),'LineWidth',3);
|
|
scatter(fsym.*1e-9,paprlist2_opt,'DisplayName','M8199A','Marker','x','MarkerFaceColor',cols(2,:),'MarkerEdgeColor',cols(2,:),'LineWidth',3);
|
|
scatter(fsym.*1e-9,paprlist3_opt,'DisplayName','M8196A','Marker','x','MarkerFaceColor',cols(3,:),'MarkerEdgeColor',cols(3,:),'LineWidth',3);
|
|
xticks(fsym.*1e-9)
|
|
xlabel("Baudrate in GBaud");
|
|
ylabel("PAPR linear")
|
|
legend
|
|
ylim([3 10])
|
|
|
|
|
|
autoArrangeFigures
|