CLEANUP - changes to folder structure
This commit is contained in:
196
projects/AWG_output_power_simulation/output_power.m
Normal file
196
projects/AWG_output_power_simulation/output_power.m
Normal file
@@ -0,0 +1,196 @@
|
||||
|
||||
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
|
||||
Reference in New Issue
Block a user