Mainly AWG updates
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
classdef AWG
|
||||
classdef AWG < handle
|
||||
%AWG Summary of this class goes here
|
||||
% Detailed explanation goes here
|
||||
|
||||
@@ -63,18 +63,22 @@ classdef AWG
|
||||
len_in = length(signalclass_in.signal);
|
||||
|
||||
if signalclass_in.fs ~= obj.fdac
|
||||
k = obj.kover*obj.fdac / signalclass_in.fs;
|
||||
signalclass_in = signalclass_in.resample("fs_in",signalclass_in.fs,"fs_out",obj.fdac);
|
||||
end
|
||||
|
||||
|
||||
% 1-3. actual processing of the signal (normalize->quantize->sample hold)
|
||||
signalclass_in.signal = obj.process_(signalclass_in.signal);
|
||||
|
||||
% cast the inform. signal to electrical signal
|
||||
signalclass_in = Electricalsignal(signalclass_in,"fs",obj.fdac*obj.kover,"logbook",signalclass_in.logbook);
|
||||
|
||||
% cast the inform. signal to electrical signal
|
||||
if ~isa(signalclass_in,'Electricalsignal')
|
||||
signalclass_in = Electricalsignal(signalclass_in,"fs",obj.fdac*obj.kover,"logbook",signalclass_in.logbook);
|
||||
end
|
||||
|
||||
% normalize to 0dBm before applying the lowpass
|
||||
%signalclass_in = signalclass_in.normalize("mode","milliwatt");
|
||||
signalclass_in = signalclass_in.setPower(6,"dBm");
|
||||
signalclass_in = signalclass_in.setPower(13,"dBm");
|
||||
|
||||
|
||||
% 4. Apply LPF on the signal
|
||||
if obj.lpf_active
|
||||
@@ -89,7 +93,7 @@ classdef AWG
|
||||
end
|
||||
end
|
||||
|
||||
signalclass_in.power
|
||||
disp(['AWG output power: ',num2str(signalclass_in.power),' dBm']);
|
||||
|
||||
% append to logbook
|
||||
current_class = class(obj);
|
||||
@@ -123,12 +127,15 @@ classdef AWG
|
||||
|
||||
if obj.normalize2dac
|
||||
% 0a Normalize the signal to full scale DAC range
|
||||
data_in = data_in - min(data_in);
|
||||
data_in = data_in/(max(data_in)-min(data_in));
|
||||
data_in = data_in * (obj.dac_max-obj.dac_min);
|
||||
data_in = data_in + obj.dac_min;
|
||||
|
||||
data_in = data_in - min(data_in); %set "foot" to zero
|
||||
data_in = data_in / (max(data_in)-min(data_in)); %scale between 0 and 1
|
||||
data_in = data_in * (obj.dac_max-obj.dac_min); %scale to desired total range of DAC
|
||||
data_in = data_in + obj.dac_min; %set "foot" to desired value
|
||||
end
|
||||
|
||||
data_in = data_in - mean(data_in);
|
||||
|
||||
% 1. Quantize the signal - Full Scale is between obj.dac_min
|
||||
% and dac_max. If signal is smaller in between, you won't use
|
||||
% the full bit-resolution.
|
||||
@@ -137,6 +144,7 @@ classdef AWG
|
||||
else
|
||||
elec_out = data_in;
|
||||
end
|
||||
|
||||
|
||||
% 2. Sample and hold + repeat (data_out: 1xsignal length)
|
||||
if obj.upsampling_method == 1
|
||||
@@ -149,6 +157,7 @@ classdef AWG
|
||||
else
|
||||
error('chosen upsampling method not implemented?');
|
||||
end
|
||||
|
||||
|
||||
% 3. Add skew (not implemented so far)
|
||||
if obj.skew_active
|
||||
@@ -182,7 +191,7 @@ classdef AWG
|
||||
1i*min(max(imag(x_in)-obj.dac_min,0),obj.dac_max-obj.dac_min);
|
||||
|
||||
% quantize signal and shift back signal
|
||||
x_in = round((steps-1)/(obj.max-obj.dac_min)*x_in);
|
||||
x_in = round((steps-1)/(obj.dac_max-obj.dac_min)*x_in);
|
||||
|
||||
% scale and shift back
|
||||
quant_out = x_in*(obj.dac_max-obj.dac_min)/(steps-1) +(1+1i)*obj.dac_min;
|
||||
|
||||
@@ -249,8 +249,12 @@ classdef Filter < handle
|
||||
end
|
||||
|
||||
function showHere(obj)
|
||||
obj.signal_length = 512;
|
||||
[H_,~] = obj.buildFilter();
|
||||
if isempty(obj.H)
|
||||
obj.signal_length = 4096;
|
||||
[H_,~] = obj.buildFilter();
|
||||
else
|
||||
H_ = obj.H;
|
||||
end
|
||||
fs = obj.fs;
|
||||
frex = linspace(-fs/2,fs/2,numel(H_)).*1e-9;
|
||||
|
||||
@@ -265,6 +269,12 @@ classdef Filter < handle
|
||||
[~, index] = min(abs(filt - (-3)));
|
||||
threedB = frex(index);
|
||||
|
||||
[~, index] = min(abs(filt - (-6)));
|
||||
sixdB = frex(index);
|
||||
|
||||
[~, index] = min(abs(filt - (-10)));
|
||||
ninedB = frex(index);
|
||||
|
||||
cur_module_name = '';
|
||||
|
||||
filter_desc = char([num2str(obj.filtdegree),'th-order ',char(obj.filterType),'; f cut:',num2str(fc.*1e-9),' GHz']);
|
||||
@@ -273,10 +283,17 @@ classdef Filter < handle
|
||||
legend Interpreter none
|
||||
title('Magnitude')
|
||||
hold on
|
||||
p = plot(frex,filt,'LineWidth',1,'LineStyle','-','DisplayName',[cur_module_name,': ',filter_desc]);
|
||||
p = plot(frex,filt,'LineWidth',1,'LineStyle','-','DisplayName',[cur_module_name,': ',filter_desc, '; 3/6/10 dB: ', num2str(threedB),'/ ',num2str(sixdB),'/ ',num2str(ninedB)]);
|
||||
|
||||
xline([-threedB,threedB],'LineStyle','-','LineWidth',1,'HandleVisibility','off','Color',p.Color);
|
||||
xline([-sixdB,sixdB],'LineStyle','-','LineWidth',1,'HandleVisibility','off','Color',p.Color);
|
||||
xline([-ninedB,ninedB],'LineStyle','-','LineWidth',1,'HandleVisibility','off','Color',p.Color);
|
||||
|
||||
xline(fcut_,'LineStyle',':','LineWidth',1,'HandleVisibility','off','Color',p.Color);
|
||||
yline(-3,'LineStyle',':','LineWidth',1,'HandleVisibility','off');
|
||||
yline([-3, -6, -9],'LineStyle',':','LineWidth',1,'HandleVisibility','off');
|
||||
|
||||
xlim([0 fc.*2].*1e-9);
|
||||
ylim([ninedB-6, 2]);
|
||||
legend
|
||||
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user