From f93d61f5d871851fc06c5a54ed4fab7e0e3534ef Mon Sep 17 00:00:00 2001 From: Silas Labor Zizou Date: Tue, 8 Apr 2025 13:29:12 +0200 Subject: [PATCH] Minor changes from lab pc --- Classes/05_Lab/AwgKeysight.m | 12 ++--- Classes/05_Lab/OptAtten.m | 2 +- .../Lab_helper/measureMZMtransferfunction.m | 54 +++++++++++++++++++ projects/ECOC_2025/b2b_measurement.m | 0 .../Lab_base_system/test_device_control.m | 33 ++++++------ 5 files changed, 78 insertions(+), 23 deletions(-) create mode 100644 Functions/Lab_helper/measureMZMtransferfunction.m create mode 100644 projects/ECOC_2025/b2b_measurement.m diff --git a/Classes/05_Lab/AwgKeysight.m b/Classes/05_Lab/AwgKeysight.m index c17afa6..e0ef03a 100644 --- a/Classes/05_Lab/AwgKeysight.m +++ b/Classes/05_Lab/AwgKeysight.m @@ -220,10 +220,10 @@ classdef AwgKeysight v = visadev('TCPIP0::zizou.tf.uni-kiel.de::hislip0::INSTR'); case awg_model.M8199B v = visadev('TCPIP0::localhost::hislip0::INSTR'); + case awg_model.M8199A + v = visadev('TCPIP0::Zizou::hislip2::INSTR'); case awg_model.M8199A_ILV - v = visadev('TCPIP0::Zizou::hislip0::INSTR'); - case awg_model.M8199A_ILV - v = visadev('TCPIP0::Zizou::hislip0::INSTR'); + v = visadev('TCPIP0::Zizou::hislip2::INSTR'); end debug = 0; @@ -327,13 +327,13 @@ classdef AwgKeysight elseif obj.model == awg_model.M8199B || obj.model == awg_model.M8199A || obj.model == awg_model.M8199A_ILV - % SET Ref clock out (which is conn. to scope) to 10 MHz - obj.writeNcheck(v, ':OUTPut:FREQuency ''M1.RefClkOut'',10000000'); + % SET Ref clock out (which is conn. to scope) to 100 MHz + obj.writeNcheck(v, ':OUTPut:FREQuency ''M1.RefClkOut'',100000000'); % :OUTP:GLOB 'M1.System', OFF obj.writeNcheck(v, ':OUTP:GLOB ''M1.System'', ON'); obj.writeNcheck(v, ':OUTP:GLOB ''M2.System'', ON'); - %obj.writeNcheck(v,':INIT:IMMediate ''M2'''); + obj.writeNcheck(v,':INIT:IMMediate ''M2'''); end % operation ceomplete (opc) diff --git a/Classes/05_Lab/OptAtten.m b/Classes/05_Lab/OptAtten.m index b63f156..32cf1b9 100644 --- a/Classes/05_Lab/OptAtten.m +++ b/Classes/05_Lab/OptAtten.m @@ -276,7 +276,7 @@ classdef OptAtten < handle cnt = cnt+1; end - fprintf("\n SET: CH1 %.2f dB | CH2: %.2f dB | CH3: %.2f dB | CH4: %.2f dB\n",obj.value_state(1), obj.value_state(2), obj.value_state(3), obj.value_state(4)); + fprintf("\n Pset: CH1 %.2f dB | CH2: %.2f dB | CH3: %.2f dB | CH4: %.2f dB\n",obj.value_state(1), obj.value_state(2), obj.value_state(3), obj.value_state(4)); fprintf(" ATT: CH1 %.2f dB | CH2: %.2f dB | CH3: %.2f dB | CH4: %.2f dB\n",obj.atten_state(1), obj.atten_state(2), obj.atten_state(3), obj.atten_state(4)); fprintf(" POW: CH1 %.2f dBm | CH2: %.2f dBm | CH3: %.2f dBm | CH4: %.2f dBm \n \n",obj.power_state(1), obj.power_state(2), obj.power_state(3), obj.power_state(4)); diff --git a/Functions/Lab_helper/measureMZMtransferfunction.m b/Functions/Lab_helper/measureMZMtransferfunction.m new file mode 100644 index 0000000..18ea2e3 --- /dev/null +++ b/Functions/Lab_helper/measureMZMtransferfunction.m @@ -0,0 +1,54 @@ + +% Measure Bias Curve of Modulator +% 1) Loop over bias volate +% 2) measure voltgae, current and input laser power and output laser power + + +v_bias_range = [0:0.25:8]; +v_bias_meas = NaN(size(v_range)); +i_bias_meas = NaN(size(v_range)); +p_out_meas = NaN(size(v_range)); + +%% DC Source +dcs = DC_supply("active",[1,0],"voltage",[0, 6]); + + +%% Optical Attenuator +voa = OptAtten("active",[0,0,2,0],"value",[0,0,0,0],"wavelength",[1550,1550,1550,1550]); +voa.set('value',[0,0,2,0]); +voa.readvals(); + +for i = 1:numel(v_bias_range) + + dcs.set('voltage',[v_bias_range(i),6]); + % pause(1); + + [p1,p2,p_out_meas(i),p4]= voa.readPower; + [v_meas,i_meas] = dcs.readVals; + v_bias_meas(i)=v_meas(1); + i_bias_meas(i)= i_meas(1); + + figure(1) + clf + subplot(2,1,1) + hold on + plot(v_bias_meas,p_out_meas,'DisplayName','MZM TF in dB'); + xlabel('V_{bias} in V'); + ylabel('P_{out} in dBm'); + grid on + xlim([min(v_bias_range), max(v_bias_range)]) + + + subplot(2,1,2) + hold on + plot(v_bias_meas,db2pow(p_out_meas),'DisplayName','MZM TF in mW'); + xlabel('V_{bias} in V'); + ylabel('P_{out} in mW'); + grid on + xlim([min(v_bias_range), max(v_bias_range)]) + +end + + + + diff --git a/projects/ECOC_2025/b2b_measurement.m b/projects/ECOC_2025/b2b_measurement.m new file mode 100644 index 0000000..e69de29 diff --git a/projects/Lab_base_system/test_device_control.m b/projects/Lab_base_system/test_device_control.m index 334c505..1f48656 100644 --- a/projects/Lab_base_system/test_device_control.m +++ b/projects/Lab_base_system/test_device_control.m @@ -1,44 +1,45 @@ %% DC Source -desired_voltage = 2.1; +desired_voltage = 2.8; dcs = DC_supply("active",[1,0],"voltage",[desired_voltage, 0]); dcs.set("voltage",[desired_voltage, 0]); [v,i]=dcs.readVals(); %% Laser +desired_wavelength = 1310; laser = Exfo_laser("mainframe_channel",1,"safety_mode",0,"connection_id",'10','lab_interface','gpib'); -laser.setWavelength(1311); -laser.setPower(0); +laser.setWavelength(desired_wavelength); +laser.setPower(10); laser.enableLaser(); %% Optical Attenuator -voa = OptAtten("active",[2,0,0,0],"value",[-5,0,0,0],"wavelength",[1310,1310,1310,1310]); -voa.set('value',[-5,0,0,0]); -voa.readvals(); +voa = OptAtten("active",[0,0,2,0],"value",[0,0,-5,0],"wavelength",[desired_wavelength,desired_wavelength,desired_wavelength,desired_wavelength]); +voa.set('value',[0,0,3,0]); %% Construct AWG and Scope Modules %%%%%% fdac = 256e9; fadc = 160e9; -Scp = ScopeKeysight("model","DSAZ634A",'autoscale',1,"fadc","GSa_160","channel",[0,0,1,0],"recordLen",4000000,"removeDC",1,"extRef",0); -Awg = AwgKeysight("model","M8199A_ILV","fdac",fdac,"scaletodac",[1,1],"skews",[0,0],"voltages",[0,0.1]); -A2S = Awg2Scope(Awg,Scp,[0,3,0,0],"waitUntilClick",0); % +Scp = ScopeKeysight("model","DSAZ634A",'autoscale',1,"fadc","GSa_160","channel",[0,0,1,0],"recordLen",4000000,"removeDC",1,"extRef",1); +Awg = AwgKeysight("model","M8199A_ILV","fdac",fdac,"scaletodac",[1,1],"skews",[0,0],"voltages",[0,0.8]); +A2S = Awg2Scope(Awg,Scp,[0,0,3,0],"waitUntilClick",0); % %%%%% Symbol Generation %%%%%% fsym = 56e9; M = 4; -rcalpha = 0.05; -Pform = Pulseformer("fsym",fsym,"fdac",4*fsym,"pulse","rrc","pulselength",16,"rrcalpha",rcalpha); +rcalpha = 0.2; +Pform = Pulseformer("fsym",fsym,"fdac",4*fsym,"pulse","rrc","pulselength",16,"rrcalpha",rcalpha); Pamsource = PAMsource(... - "fsym",fsym,"M",M,"order",17,"useprbs",0,... + "fsym",fsym,"M",M,"order",17,"useprbs",1,... "fs_out",fdac,... - "applyclipping",0,"clipfactor",1.5,... - "applypulseform",0,"pulseformer",Pform,... + "applyclipping",0,"clipfactor",4,... + "applypulseform",1,"pulseformer",Pform,... "randkey",1,... "db_precode",0,"db_encode",0,... "mrds_code",0,"mrds_blocklength",512); tx_signal = Pamsource.process(); +tx_signal.spectrum("displayname",'Tx Spectrum','fignum',10,'normalizeTo0dB',0); -A2S.process("signal2",tx_signal); - +[S1,S2,S3,S4] = A2S.process("signal2",tx_signal); +S3.spectrum("displayname",'Rx Spectrum','fignum',10,'normalizeTo0dB',0);