Files
imdd_silas/Classes/00_signals/Opticalsignal.m
silas (home) 5c39a7f98a new minimal example
new project: FSO stuff
2026-01-07 15:07:38 +01:00

80 lines
2.1 KiB
Matlab

classdef Opticalsignal < Signal
%OPTICALSIGNAL Summary of this class goes here
% Detailed explanation goes here
properties
nase
lambda
polrot
end
methods
function obj = Opticalsignal(signal, options)
%OPTICALSIGNAL Construct an instance of this class
% Detailed explanation goes here
arguments
signal
options.fs
options.logbook
options.lambda
options.nase
options.polrot
end
obj = obj@Signal(signal);
fn = fieldnames(options);
for l = 1:numel(fn)
obj.(fn{l}) = options.(fn{l});
end
end
%%
function [obj,delay_n] = delay(obj,options)
arguments
obj Opticalsignal
options.delay_meter double = 0
options.delay_samples = 0
end
if options.delay_meter ~= 0
delay_t = options.delay_meter /(physconst("LightSpeed")/1.4677);
delay_n = delay_t .* obj.fs;
else
delay_n = options.delay_samples;
end
obj.signal=delayseq(obj.signal,delay_n);
end
function cspr = cspr(obj)
carrier_power_dbm = pow2db( abs(mean(obj.signal)).^2 ) +30; % dB -> +30 -> dBm
signal_power_dbm = obj.power;
cspr = carrier_power_dbm-signal_power_dbm;
carr_lin = abs(mean(obj.signal)).^2;
sign_lin = mean(abs(obj.signal).^2);
cspr_lin = pow2db(carr_lin/sign_lin);
%carrier power is the mean value of the overall signal -> dc part
c = abs(mean(obj.signal)).^2;
%signal power is now only the "fluctuation"/ i.e. the ac part
s = mean( abs(obj.signal-mean(obj.signal)).^2 );
cspr = 10*log10(c / s);
end
end
end