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