Strengthen WDM and IM/DD optical tests
This commit is contained in:
@@ -1,10 +1,96 @@
|
||||
classdef Optical_Demultiplex_test < IMDDTestCase
|
||||
% Auto-generated placeholder for Optical_Demultiplex.
|
||||
% Target: C:/Users/Silas/Documents/MATLAB/imdd_simulation/Classes/02_optical/Optical_Demultiplex.m
|
||||
methods (Test, TestTags = {'unit', 'fast', 'optical', 'demux'})
|
||||
function processReturnsOneCellPerChannelAndPreservesMetadata(testCase)
|
||||
fs = 32e9;
|
||||
lambdaCenterNm = 1310;
|
||||
lambdaA = 1309e-9;
|
||||
lambdaB = 1311e-9;
|
||||
|
||||
methods (Test, TestTags = {'placeholder', 'todo'})
|
||||
function testNotImplemented(testCase)
|
||||
testCase.assumeFail("Tests for Optical_Demultiplex are not implemented yet.");
|
||||
sigA = makeOpticalSignal( ...
|
||||
[1 2; 1 2; 1 2; 1 2], ...
|
||||
fs, ...
|
||||
lambdaA, ...
|
||||
0.10);
|
||||
sigB = makeOpticalSignal( ...
|
||||
[3 4; 3 4; 3 4; 3 4], ...
|
||||
fs, ...
|
||||
lambdaB, ...
|
||||
0.90);
|
||||
|
||||
mux = Optical_Multiplex( ...
|
||||
"fs_in", fs, ...
|
||||
"fs_out", fs, ...
|
||||
"lambda_center", lambdaCenterNm, ...
|
||||
"delta_f", 0, ...
|
||||
"random_key", 0, ...
|
||||
"attenuation", 0, ...
|
||||
"filtype", 3, ...
|
||||
"B", 200e9);
|
||||
muxOut = mux.process({sigA, sigB});
|
||||
|
||||
demux = Optical_Demultiplex( ...
|
||||
"fs_in", muxOut.fs, ...
|
||||
"fs_out", muxOut.fs, ...
|
||||
"lambda_center", lambdaCenterNm, ...
|
||||
"attenuation", 0, ...
|
||||
"filtype", 3, ...
|
||||
"B", 200e9);
|
||||
out = demux.process(muxOut);
|
||||
|
||||
testCase.verifyClass(out, 'cell');
|
||||
testCase.verifyNumElements(out, 2);
|
||||
testCase.verifyClass(out{1}, 'Opticalsignal');
|
||||
testCase.verifyClass(out{2}, 'Opticalsignal');
|
||||
testCase.verifyEqual(size(out{1}.signal), size(muxOut.signal));
|
||||
testCase.verifyEqual(size(out{2}.signal), size(muxOut.signal));
|
||||
testCase.verifyEqual(out{1}.fs, fs);
|
||||
testCase.verifyEqual(out{2}.fs, fs);
|
||||
testCase.verifyEqual(out{1}.lambda, muxOut.lambda(1), 'AbsTol', 1e-12);
|
||||
testCase.verifyEqual(out{2}.lambda, muxOut.lambda(2), 'AbsTol', 1e-12);
|
||||
end
|
||||
|
||||
function roundTripThroughMuxAndDemuxPreservesChannelMagnitudes(testCase)
|
||||
fs = 16e9;
|
||||
lambdaCenterNm = 1310;
|
||||
|
||||
sigA = makeOpticalSignal(ones(8, 2), fs, 1309.5e-9, 0.0);
|
||||
|
||||
mux = Optical_Multiplex( ...
|
||||
"fs_in", fs, ...
|
||||
"fs_out", fs, ...
|
||||
"lambda_center", lambdaCenterNm, ...
|
||||
"delta_f", 0, ...
|
||||
"random_key", 0, ...
|
||||
"attenuation", 0, ...
|
||||
"filtype", 3, ...
|
||||
"B", 200e9);
|
||||
muxOut = mux.process({sigA});
|
||||
|
||||
demux = Optical_Demultiplex( ...
|
||||
"fs_in", muxOut.fs, ...
|
||||
"fs_out", muxOut.fs, ...
|
||||
"lambda_center", lambdaCenterNm, ...
|
||||
"attenuation", 0, ...
|
||||
"filtype", 3, ...
|
||||
"B", 200e9);
|
||||
out = demux.process(muxOut);
|
||||
|
||||
testCase.verifyNumElements(out, 1);
|
||||
testCase.verifyEqual(size(out{1}.signal), size(sigA.signal));
|
||||
testCase.verifyEqual(out{1}.fs, fs);
|
||||
testCase.verifyEqual(out{1}.lambda, muxOut.lambda(1), 'AbsTol', 1e-12);
|
||||
testCase.verifyEqual(mean(abs(out{1}.signal), 'all'), mean(abs(sigA.signal), 'all'), 'AbsTol', 1e-6);
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user