classdef Opticalsignal_test < IMDDTestCase methods (Test, TestTags = {'unit', 'fast', 'signals', 'optical'}) function constructorWiresOpticalMetadata(testCase) opt = makeOpticalsignal([1; 2; 3], 12.5e9, 1310e-9, 0.25, 2); testCase.verifyClass(opt, 'Opticalsignal'); testCase.verifyEqual(opt.signal, [1; 2; 3]); testCase.verifyEqual(opt.fs, 12.5e9); testCase.verifyEqual(opt.lambda, 1310e-9); testCase.verifyEqual(opt.nase, 0.25); testCase.verifyEqual(opt.polrot, 2); testCase.verifyEqual(height(opt.logbook), 0); end function delayBySamplesAndMetersGiveTheSameResult(testCase) fs = physconst('LightSpeed') / 1.4677; opt = makeOpticalsignal([1; 0; -1; 2], fs, 1550e-9, 0, 0); [bySamples, delayNs] = opt.delay("delay_samples", 2); [byMeters, delayNm] = opt.delay("delay_meter", 2); testCase.verifyEqual(delayNs, 2); testCase.verifyEqual(delayNm, 2); testCase.verifyEqual(bySamples.signal, byMeters.signal); testCase.verifyEqual(bySamples.fs, opt.fs); testCase.verifyClass(bySamples, 'Opticalsignal'); testCase.verifyClass(byMeters, 'Opticalsignal'); end function csprMatchesKnownCarrierToSidebandRatio(testCase) opt = makeOpticalsignal([3; 1; 3; 1], 10, 1550e-9, 0, 0); actual = opt.cspr(); expected = 10 * log10(abs(mean(opt.signal)).^2 / mean(abs(opt.signal - mean(opt.signal)).^2)); testCase.verifyEqual(actual, expected, "AbsTol", 1e-12); end function inheritedPlusAndLengthPreserveOpticalSemantics(testCase) left = makeOpticalsignal([1; 2; 3], 5, 1310e-9, 0.1, 1); right = makeOpticalsignal([4; 5; 6], 5, 1310e-9, 0.2, 1); sumSig = left + right; testCase.verifyClass(sumSig, 'Opticalsignal'); testCase.verifyEqual(sumSig.signal, [5; 7; 9]); testCase.verifyEqual(sumSig.fs, left.fs); testCase.verifyEqual(sumSig.lambda, left.lambda); testCase.verifyEqual(sumSig.nase, left.nase); testCase.verifyEqual(sumSig.polrot, left.polrot); testCase.verifyEqual(sumSig.length(), 3); end end end function opt = makeOpticalsignal(signal, fs, lambda, nase, polrot) base = Signal(signal); opt = Opticalsignal(signal, ... "fs", fs, ... "logbook", base.logbook, ... "lambda", lambda, ... "nase", nase, ... "polrot", polrot); end