93 lines
2.5 KiB
Matlab
93 lines
2.5 KiB
Matlab
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
|