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