Strengthen WDM and IM/DD optical tests
This commit is contained in:
@@ -1,10 +1,101 @@
|
||||
classdef Optical_Multiplex_test < IMDDTestCase
|
||||
% Auto-generated placeholder for Optical_Multiplex.
|
||||
% Target: C:/Users/Silas/Documents/MATLAB/imdd_simulation/Classes/02_optical/Optical_Multiplex.m
|
||||
methods (Test, TestTags = {'unit', 'fast', 'optical', 'mux'})
|
||||
function processCombinesChannelsAndPreservesMetadata(testCase)
|
||||
fs = 32e9;
|
||||
lambdaCenter = 1550;
|
||||
lambdaA = 1550e-9;
|
||||
lambdaB = 1550e-9;
|
||||
|
||||
methods (Test, TestTags = {'placeholder', 'todo'})
|
||||
function testNotImplemented(testCase)
|
||||
testCase.assumeFail("Tests for Optical_Multiplex are not implemented yet.");
|
||||
sigA = makeOpticalSignal( ...
|
||||
[1 2; 1 2; 1 2], ...
|
||||
fs, ...
|
||||
lambdaA, ...
|
||||
0.10);
|
||||
sigB = makeOpticalSignal( ...
|
||||
[3 4; 3 4; 3 4], ...
|
||||
fs, ...
|
||||
lambdaB, ...
|
||||
0.90);
|
||||
|
||||
mux = Optical_Multiplex( ...
|
||||
"fs_in", fs, ...
|
||||
"fs_out", fs, ...
|
||||
"lambda_center", lambdaCenter, ...
|
||||
"delta_f", 0, ...
|
||||
"random_key", 0, ...
|
||||
"attenuation", 0, ...
|
||||
"filtype", 3);
|
||||
|
||||
out = mux.process({sigA, sigB});
|
||||
expected = combineSingleChannelMuxOutputs({sigA, sigB}, mux);
|
||||
|
||||
testCase.verifyClass(out, 'Opticalsignal');
|
||||
testCase.verifyEqual(size(out.signal), [3 2]);
|
||||
testCase.verifyEqual(out.signal, expected, 'AbsTol', 1e-12);
|
||||
testCase.verifyEqual(out.fs, fs);
|
||||
testCase.verifyEqual(out.lambda, [lambdaA, lambdaB], 'AbsTol', 1e-9);
|
||||
testCase.verifyEqual(out.polrot, [0.10, 0.90], 'AbsTol', 1e-12);
|
||||
testCase.verifyEqual(height(out.logbook), 2);
|
||||
testCase.verifyEqual(string(out.logbook.Description(end)), "Opt. Mux. ");
|
||||
end
|
||||
|
||||
function processSupportsMoreThanOneInputChannel(testCase)
|
||||
fs = 16e9;
|
||||
lambdaCenter = 1310;
|
||||
|
||||
sig1 = makeOpticalSignal(ones(4, 2), fs, lambdaCenter * 1e-9, 0.0);
|
||||
sig2 = makeOpticalSignal(2 * ones(4, 2), fs, lambdaCenter * 1e-9, 0.5);
|
||||
sig3 = makeOpticalSignal(3 * ones(4, 2), fs, lambdaCenter * 1e-9, 1.0);
|
||||
|
||||
mux = Optical_Multiplex( ...
|
||||
"fs_in", fs, ...
|
||||
"fs_out", fs, ...
|
||||
"lambda_center", lambdaCenter, ...
|
||||
"delta_f", 0, ...
|
||||
"random_key", 0, ...
|
||||
"attenuation", 0, ...
|
||||
"filtype", 3);
|
||||
|
||||
out = mux.process({sig1, sig2, sig3});
|
||||
expected = combineSingleChannelMuxOutputs({sig1, sig2, sig3}, mux);
|
||||
|
||||
testCase.verifySize(out.signal, [4, 2]);
|
||||
testCase.verifyEqual(out.signal, expected, 'AbsTol', 1e-12);
|
||||
testCase.verifyEqual(numel(out.lambda), 3);
|
||||
testCase.verifyEqual(numel(out.polrot), 3);
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function sig = makeOpticalSignal(signal, fs, lambda, polrot)
|
||||
base = Signal(signal, "fs", fs);
|
||||
sig = Opticalsignal( ...
|
||||
signal, ...
|
||||
"fs", fs, ...
|
||||
"logbook", base.logbook, ...
|
||||
"lambda", lambda, ...
|
||||
"nase", 0, ...
|
||||
"polrot", polrot);
|
||||
end
|
||||
|
||||
function expected = combineSingleChannelMuxOutputs(signals, muxPrototype)
|
||||
expected = [];
|
||||
|
||||
for idx = 1:numel(signals)
|
||||
mux = Optical_Multiplex( ...
|
||||
"fs_in", muxPrototype.fs_in, ...
|
||||
"fs_out", muxPrototype.fs_out, ...
|
||||
"lambda_center", muxPrototype.lambda_center, ...
|
||||
"delta_f", muxPrototype.delta_f, ...
|
||||
"random_key", muxPrototype.random_key, ...
|
||||
"attenuation", muxPrototype.attenuation, ...
|
||||
"filtype", muxPrototype.filtype);
|
||||
singleOut = mux.process({signals{idx}});
|
||||
|
||||
if isempty(expected)
|
||||
expected = zeros(size(singleOut.signal));
|
||||
end
|
||||
|
||||
expected = expected + singleOut.signal;
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user