classdef Signal %SIGNAL Summary of this class goes here % Detailed explanation goes here properties signal logbook end methods function obj = Signal(signal) %SIGNAL Construct an instance of this class % Detailed explanation goes here obj.signal = signal; SignalType = []; TimeStamp = []; Length = []; SignalPower = []; Nase = []; Description = []; obj.logbook = table(SignalType,TimeStamp,Length,SignalPower,Nase,Description); end function [i_sig, varargout] = Informationsignal(obj) if isa(obj,'Electricalsignal') %convert to optical varargout{1} = obj.fs; i_sig = Informationsignal(obj.signal); elseif isa(obj,'Opticalsignal') error("Cannot convert from optical- to informationsignal. Use O/E conversion first."); end end function [e_sig, varargout] = Electricalsignal(obj,options) arguments obj options.fs options.logbook end obj.logbook = options.logbook; if isa(obj,'Opticalsignal') %convert to electrical varargout{1} = obj.nase; varargout{2} = obj.lambda; e_sig = Electricalsignal(obj.signal,"fs",obj.fs,"logbook",obj.logbook); elseif isa(obj,'Informationsignal') try % specify fs at varargin{1} e_sig = Electricalsignal(obj.signal,"fs",options.fs,"logbook",options.logbook); catch error("Signal Conversion failed [I -> E] "); end end end function o_sig = Opticalsignal(obj, options) arguments obj options.fs options.logbook options.nase options.lambda end fn = fieldnames(options); for l = 1:numel(fn) try obj.(fn{l}) = options.(fn{l}); end end if isa(obj,'Electricalsignal') %convert to optical o_sig = Opticalsignal(obj.signal,"fs",obj.fs,"lambda",options.lambda,"logbook",obj.logbook,"nase",options.nase); elseif isa(obj,'Informationsignal') error("Cannot convert from information- to opticalsignal. Use E/O conversion first."); end end function return_length = length(obj) %METHOD1 Summary of this method goes here % Detailed explanation goes here return_length = length(obj.signal); end function obj = logbookentry(obj,varargin) if nargin > 1 Description = varargin{1}; else Description = ""; end SignalType = [string(class(obj))]; TimeStamp = [(datetime('now','TimeZone','local','Format','HH:mm:ss'))]; Length = [obj.length]; SignalPower = [obj.power]; Nase = [0]; cell = {SignalType , TimeStamp , Length , SignalPower , Nase, Description}; obj.logbook = [obj.logbook;cell]; end function obj = resample(obj,options) arguments obj Signal options.fs_in double options.fs_out double end obj.signal = resample(obj.signal,options.fs_out,options.fs_in); desc = ['resample signal from ', num2str(options.fs_in*1e-9), ' GHz to ', num2str(options.fs_out*1e-9), ' GHz' ]; obj = obj.logbookentry(desc); end end end