Minimal Working - seems too good?!

This commit is contained in:
Silas Oettinghaus
2023-05-16 17:43:51 +02:00
parent 709cee9ecd
commit f5c3a1b902
23 changed files with 1476 additions and 260 deletions

View File

@@ -1,47 +1,152 @@
classdef Signal
%SIGNAL Summary of this class goes here
% Detailed explanation goes here
properties
signal
fsym
fsimu
logbook
end
methods
function obj = Signal(signal)
%SIGNAL Construct an instance of this class
% Detailed explanation goes here
obj.signal = signal;
obj.fsym = 0;
obj.fsimu = 0;
SignalType = [];
TimeStamp = [];
Length = [];
SignalPower = [];
Nase = [];
Description = [];
obj.logbook = table(SignalType,TimeStamp,Length,SignalPower,Nase,Description);
end
function [e_sig, nase, lambda_nm] = Electricalsignal(obj)
function [i_sig, varargout] = Informationsignal(obj)
if isa(obj,'Electricalsignal')
%convert to optical
disp("Convert signal: elec. -> info.!");
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
disp("Convert signal: opt. -> elec. Fetch all properties (e.g. nase)!");
nase = obj.nase;
lambda_nm = obj.lambda_nm;
e_sig = Electricalsignal(obj.signal,obj.fsym, obj.fsimu);
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)
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
disp("Convert signal: elec. -> opt.!");
o_sig = Opticalsignal(obj.signal,obj.fsym, obj.fsimu);
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 normalizedsignal = signal_(obj)
normalizedsignal = obj.signal / norm(obj.signal);
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