65 lines
2.6 KiB
Matlab
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
|