Minor Changes and Lab Preps
This commit is contained in:
124
Classes/05_Lab/DC_supply.m
Normal file
124
Classes/05_Lab/DC_supply.m
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
classdef DC_supply
|
||||||
|
% Simple control of DC supply via fixed GBIB address.
|
||||||
|
% Agilent E3646A
|
||||||
|
|
||||||
|
properties(Access=public)
|
||||||
|
active
|
||||||
|
voltage
|
||||||
|
end
|
||||||
|
|
||||||
|
methods (Access=public)
|
||||||
|
|
||||||
|
function obj = DC_supply(options)
|
||||||
|
|
||||||
|
|
||||||
|
arguments
|
||||||
|
options.active bool = true
|
||||||
|
options.voltage double = [0,0];
|
||||||
|
end
|
||||||
|
|
||||||
|
%
|
||||||
|
fn = fieldnames(options);
|
||||||
|
for n = 1:numel(fn)
|
||||||
|
try
|
||||||
|
obj.(fn{n}) = options.(fn{n});
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
assert(size(obj.voltage,1)==1,'Set Voltage for CH1 and CH2 must be given as vector [V1, V2]');
|
||||||
|
assert(size(obj.voltage,2)==2,'Set Voltage for CH1 and CH2 must be given as vector [V1, V2]');
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
function success = set(obj)
|
||||||
|
|
||||||
|
success = false;
|
||||||
|
|
||||||
|
try
|
||||||
|
%connect to device
|
||||||
|
v = visadev("GPIB0::19::INSTR");
|
||||||
|
% fopen(v);
|
||||||
|
|
||||||
|
writeline(v, '*IDN?;');
|
||||||
|
disp(['DC Source: ' readline(v)]);
|
||||||
|
|
||||||
|
cmd = 'INST:SEL?';
|
||||||
|
fprintf(v, cmd);
|
||||||
|
selected_channel = fscanf(v);
|
||||||
|
|
||||||
|
for ch = 1:2
|
||||||
|
|
||||||
|
% choose channel
|
||||||
|
cmd = ['INST:SEL OUT',num2str(ch)];
|
||||||
|
fprintf(v, cmd);
|
||||||
|
|
||||||
|
% get current voltage level
|
||||||
|
cmd = ['VOLT?'];
|
||||||
|
fprintf(v, cmd);
|
||||||
|
act_volt = str2num(fscanf(v));
|
||||||
|
|
||||||
|
% desired voltage (round to two digits after comma)
|
||||||
|
des_volt = round(obj.voltage(ch),2);
|
||||||
|
|
||||||
|
cnt = 0;
|
||||||
|
while abs(act_volt-des_volt) > 0
|
||||||
|
|
||||||
|
selected_channel = ['OUT',num2str(ch)];
|
||||||
|
|
||||||
|
% get current voltage level
|
||||||
|
cmd = ['VOLT?'];
|
||||||
|
fprintf(v, cmd);
|
||||||
|
act_volt = str2num(fscanf(v));
|
||||||
|
|
||||||
|
% difference
|
||||||
|
diff_volt = act_volt-des_volt;
|
||||||
|
|
||||||
|
% set new voltage
|
||||||
|
increment_voltage = -0.01* sign(diff_volt) ;
|
||||||
|
cmd = ['VOLT ',num2str(act_volt+increment_voltage)];
|
||||||
|
fprintf(v, cmd);
|
||||||
|
|
||||||
|
cnt = cnt+1;
|
||||||
|
if mod(cnt,100) == 0
|
||||||
|
wait(1);
|
||||||
|
end
|
||||||
|
|
||||||
|
% get current voltage level
|
||||||
|
cmd = ['VOLT?'];
|
||||||
|
fprintf(v, cmd);
|
||||||
|
act_volt = str2num(fscanf(v));
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
% check if voltage is set
|
||||||
|
if act_volt ~= des_volt
|
||||||
|
hMsgBox = msgbox('An error occurred in dc supply module. Check if voltage is set correctly.');
|
||||||
|
uiwait(hMsgBox);
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
% choose channel
|
||||||
|
cmd = ['INST:SEL ',selected_channel];
|
||||||
|
fprintf(v, cmd);
|
||||||
|
|
||||||
|
%disconnect
|
||||||
|
fclose(v);
|
||||||
|
delete(v);
|
||||||
|
|
||||||
|
catch
|
||||||
|
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
methods (Access=private)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
16
Tests/05_Lab/DC_Supply_test.m
Normal file
16
Tests/05_Lab/DC_Supply_test.m
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
classdef DC_Supply_test < matlab.unittest.TestCase
|
||||||
|
% Test class for DC_Supply
|
||||||
|
|
||||||
|
methods (Test)
|
||||||
|
function testExample(testCase)
|
||||||
|
% Example test case for DC_Supply
|
||||||
|
% Add your test code here
|
||||||
|
|
||||||
|
dc_supply = DC_supply("voltage",[0,9],"active",1);
|
||||||
|
|
||||||
|
dc_supply.set();
|
||||||
|
|
||||||
|
testCase.verifyTrue(true);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -1,10 +1,11 @@
|
|||||||
function generateTests()
|
function generateTests()
|
||||||
|
|
||||||
if ismac
|
if ismac
|
||||||
cd('/Users/silasoettinghaus/Documents/MATLAB/imdd_simulation');
|
cd('/Users/silasoettinghaus/Documents/MATLAB/imdd_simulation');
|
||||||
else
|
else
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
% Define the root folders for classes and tests
|
% Define the root folders for classes and tests
|
||||||
classesFolder = 'Classes'; % Folder containing the class files
|
classesFolder = 'Classes'; % Folder containing the class files
|
||||||
testsFolder = 'Tests'; % Folder where test files should be created
|
testsFolder = 'Tests'; % Folder where test files should be created
|
||||||
|
|||||||
59
projects/Lab_analysis/eq_lab.m
Normal file
59
projects/Lab_analysis/eq_lab.m
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
|
||||||
|
%% Parameter to simulate and save
|
||||||
|
params = struct;
|
||||||
|
|
||||||
|
params.M = [4];
|
||||||
|
params.datarate = [300];
|
||||||
|
params.rop = [0];
|
||||||
|
|
||||||
|
precomp_mode = 2; %0=do nothing ; 1= measure; 2=precomp active
|
||||||
|
|
||||||
|
if ismac
|
||||||
|
precomp_path = "/Users/silasoettinghaus/Documents/MATLAB/imdd_simulation/projects/standard_system";
|
||||||
|
else
|
||||||
|
precomp_path = "C:\Users\Silas\Documents\MATLAB\imdd_simulation\projects\standard_system\";
|
||||||
|
end
|
||||||
|
|
||||||
|
precomp_fn = "400G_simulative_setup";
|
||||||
|
usemrds = 0;
|
||||||
|
|
||||||
|
name = ['wh_',strrep(num2str(now),'.','')];
|
||||||
|
|
||||||
|
wh = DataStorage(params);
|
||||||
|
|
||||||
|
wh.addStorage("ber_ffe");
|
||||||
|
|
||||||
|
%% Init Params
|
||||||
|
link_length = 0; %meter
|
||||||
|
pn_key = 2;
|
||||||
|
laser_linewidth = 0;
|
||||||
|
|
||||||
|
endcnt = prod(wh.dim);
|
||||||
|
cnt=0;
|
||||||
|
|
||||||
|
disp(['Start Simulation of ',num2str(endcnt),' loops...'])
|
||||||
|
tic
|
||||||
|
|
||||||
|
|
||||||
|
% SETUP HERE: %%
|
||||||
|
fsym = 92e9;
|
||||||
|
|
||||||
|
Symbols = Informationsignal(digi_mod_out',"fs",92e9);
|
||||||
|
|
||||||
|
Scpe_sig = Electricalsignal(awg2scope_keysight_out.no1',"fs",160e9);
|
||||||
|
Scpe_sig = Scpe_sig.resample("fs_in",160e9,"fs_out",2*92e9);
|
||||||
|
|
||||||
|
Bits = Informationsignal(prms_out',"fs",92e9);
|
||||||
|
|
||||||
|
%%%%%% Sync Rx signal with reference %%%%%%
|
||||||
|
[Scpe_sig,S] = Scpe_sig.tsynch("reference",Symbols,"fs_ref",fsym);
|
||||||
|
|
||||||
|
%%%%% EQUALIZE %%%%%%
|
||||||
|
% Eq = FFE("epochs_tr",5,"epochs_dd",5,"len_tr",4096*2,"mu_dd",1e-4,"mu_tr",0,"order",25,"sps",2,"decide",1);
|
||||||
|
Eq = VNLE("epochs_tr",5,"epochs_dd",5,"len_tr",4096*2,"mu_dd",[0.0004 0.0005 0.0006],"mu_tr",0,"order",[50,7,7],"sps",2,"decide",1);
|
||||||
|
[EQ_sig] = Eq.process(Scpe_sig,Symbols);
|
||||||
|
Rx_bits = PAMmapper(M,0).demap(EQ_sig);
|
||||||
|
[~,errors_bm,ber_ffe,errors] = calc_ber(Rx_bits.signal,Bits.signal,"skip_front",100,"skip_end",150,"returnErrorLocation",1);
|
||||||
|
disp(['BER: ',sprintf('%.1E',ber_ffe),' - - - ',num2str(fsym*1e-9),' GBd']);
|
||||||
|
|
||||||
|
|
||||||
@@ -6,7 +6,7 @@ params.M = [4];
|
|||||||
params.datarate = [300];
|
params.datarate = [300];
|
||||||
params.rop = [0];
|
params.rop = [0];
|
||||||
|
|
||||||
precomp_mode = 2; %0=do nothing ; 1= measure; 2=precomp active
|
precomp_mode = 0; %0=do nothing ; 1= measure; 2=precomp active
|
||||||
|
|
||||||
if ismac
|
if ismac
|
||||||
precomp_path = "/Users/silasoettinghaus/Documents/MATLAB/imdd_simulation/projects/standard_system";
|
precomp_path = "/Users/silasoettinghaus/Documents/MATLAB/imdd_simulation/projects/standard_system";
|
||||||
@@ -148,7 +148,7 @@ for M = wh.parameter.M.values
|
|||||||
|
|
||||||
|
|
||||||
%%%%%% Sync Rx signal with reference %%%%%%
|
%%%%%% Sync Rx signal with reference %%%%%%
|
||||||
[Scpe_sig,D,cuts] = Scpe_sig.tsynch("reference",Symbols,"fs_ref",fsym);
|
[Scpe_sig,S] = Scpe_sig.tsynch("reference",Symbols,"fs_ref",fsym);
|
||||||
|
|
||||||
|
|
||||||
%%%%% EQUALIZE %%%%%%
|
%%%%% EQUALIZE %%%%%%
|
||||||
|
|||||||
Reference in New Issue
Block a user