Files
imdd_silas/Classes/Signal.m
2023-05-17 14:47:56 +02:00

152 lines
4.0 KiB
Matlab

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