halfway merged and pulled?!
This commit is contained in:
92
Classes/02_optical/Polarization_Controller.m
Normal file
92
Classes/02_optical/Polarization_Controller.m
Normal file
@@ -0,0 +1,92 @@
|
||||
classdef Polarization_Controller
|
||||
%Input can be "normal" - output will be DP!
|
||||
|
||||
properties(Access=public)
|
||||
|
||||
mode
|
||||
desired_angle
|
||||
desired_power
|
||||
|
||||
rotation_angle
|
||||
rotation_matrix
|
||||
|
||||
end
|
||||
|
||||
methods (Access=public)
|
||||
function obj = Polarization_Controller(options)
|
||||
%NAME Construct an instance of this class
|
||||
% Detailed explanation goes here
|
||||
|
||||
arguments
|
||||
options.mode polarization_control_mode = polarization_control_mode.rot_power
|
||||
options.desired_angle
|
||||
options.desired_power
|
||||
|
||||
end
|
||||
|
||||
%
|
||||
fn = fieldnames(options);
|
||||
for n = 1:numel(fn)
|
||||
try
|
||||
obj.(fn{n}) = options.(fn{n});
|
||||
end
|
||||
end
|
||||
|
||||
% do more stuff
|
||||
|
||||
end
|
||||
|
||||
function signalclass_out = process(obj,signalclass_in)
|
||||
|
||||
% actual processing of the signal (steps 1. - 3.)
|
||||
[signalclass_in.signal,signalclass_in.polrot] = obj.process_(signalclass_in.signal,signalclass_in.polrot);
|
||||
|
||||
% append to logbook
|
||||
lbdesc = ['Logbookentry'];
|
||||
signalclass_in = signalclass_in.logbookentry(lbdesc);
|
||||
|
||||
% write to output
|
||||
signalclass_out = signalclass_in;
|
||||
|
||||
end
|
||||
|
||||
function [data_out, polrot_out] = process_(obj,data_in,polrot_in)
|
||||
% Rotate polarization of am opt signal
|
||||
|
||||
arguments(Input)
|
||||
obj
|
||||
data_in double
|
||||
polrot_in double
|
||||
end
|
||||
|
||||
|
||||
if obj.mode ~= polarization_control_mode.deactivate
|
||||
|
||||
switch obj.mode
|
||||
case polarization_control_mode.random
|
||||
obj.rotation_angle = 2*pi*rand ;
|
||||
|
||||
case polarization_control_mode.rot_angle
|
||||
obj.rotation_angle = obj.desired_angle*pi/180 ;
|
||||
|
||||
case polarization_control_mode.rot_power
|
||||
obj.rotation_angle = -polrot_in + acos(sqrt(obj.desired_power/100)) ;
|
||||
end
|
||||
|
||||
obj.rotation_matrix = [cos(obj.rotation_angle) -sin(obj.rotation_angle) ; sin(obj.rotation_angle) cos(obj.rotation_angle)].' ;
|
||||
|
||||
if min(size(data_in)) == 1
|
||||
data_in = reshape(data_in,[],1);
|
||||
data_in = [data_in, zeros(length(data_in),1)];
|
||||
end
|
||||
|
||||
data_out = data_in * obj.rotation_matrix;
|
||||
|
||||
polrot_out = polrot_in + obj.rotation_angle ;
|
||||
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user