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;
|
||||
|
||||
Reference in New Issue
Block a user