Files
imdd_silas/Tests/00_signals/Opticalsignal_test.m
2026-03-25 08:07:31 +01:00

65 lines
2.6 KiB
Matlab

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