Strengthen WDM and IM/DD optical tests
This commit is contained in:
@@ -1,10 +1,69 @@
|
||||
classdef Amplifier_test < IMDDTestCase
|
||||
% Auto-generated placeholder for Amplifier.
|
||||
% Target: C:/Users/Silas/Documents/MATLAB/imdd_simulation/Classes/02_etc/Amplifier.m
|
||||
methods (Test, TestTags = {'unit', 'fast', 'etc', 'amplifier'})
|
||||
function constructorStoresConfiguredModesAndSettings(testCase)
|
||||
amp = Amplifier( ...
|
||||
"amp_mode", amp_mode.ideal_no_noise, ...
|
||||
"gain_mode", gain_mode.gain, ...
|
||||
"nase_mode", nase_mode.pass_ase, ...
|
||||
"amplification_db", 7.5, ...
|
||||
"noifig", 12);
|
||||
|
||||
methods (Test, TestTags = {'placeholder', 'todo'})
|
||||
function testNotImplemented(testCase)
|
||||
testCase.assumeFail("Tests for Amplifier are not implemented yet.");
|
||||
testCase.verifyEqual(amp.amp_mode, amp_mode.ideal_no_noise);
|
||||
testCase.verifyEqual(amp.gain_mode, gain_mode.gain);
|
||||
testCase.verifyEqual(amp.nase_mode, nase_mode.pass_ase);
|
||||
testCase.verifyEqual(amp.amplification_db, 7.5);
|
||||
testCase.verifyEqual(amp.noifig, 12);
|
||||
end
|
||||
|
||||
function gainModeAmplifiesOpticalSignalAndPreservesMetadata(testCase)
|
||||
inputSignal = makeOpticalSignal([1; -1; 1; -1], 64e9, 1310e-9, 0, 0);
|
||||
amp = Amplifier( ...
|
||||
"amp_mode", amp_mode.ideal_no_noise, ...
|
||||
"gain_mode", gain_mode.gain, ...
|
||||
"nase_mode", nase_mode.pass_ase, ...
|
||||
"amplification_db", 6);
|
||||
|
||||
outputSignal = amp.process(inputSignal);
|
||||
|
||||
expectedScale = 10^(6/20);
|
||||
|
||||
testCase.verifyClass(outputSignal, 'Opticalsignal');
|
||||
testCase.verifyEqual(outputSignal.signal, expectedScale * inputSignal.signal, "AbsTol", 1e-12);
|
||||
testCase.verifyEqual(outputSignal.nase, inputSignal.nase * expectedScale^2, "AbsTol", 1e-12);
|
||||
testCase.verifyEqual(outputSignal.fs, inputSignal.fs);
|
||||
testCase.verifyEqual(outputSignal.lambda, inputSignal.lambda);
|
||||
testCase.verifyEqual(outputSignal.polrot, inputSignal.polrot);
|
||||
testCase.verifyEqual(height(outputSignal.logbook), height(inputSignal.logbook) + 1);
|
||||
testCase.verifyEqual(string(outputSignal.logbook.Description(end)), "Optical Amplifier ");
|
||||
end
|
||||
|
||||
function outputPowerModeTargetsRequestedAveragePower(testCase)
|
||||
inputSignal = makeOpticalSignal([1; -1; 1; -1], 64e9, 1310e-9, 0, 0);
|
||||
amp = Amplifier( ...
|
||||
"amp_mode", amp_mode.ideal_no_noise, ...
|
||||
"gain_mode", gain_mode.output_power, ...
|
||||
"nase_mode", nase_mode.pass_ase, ...
|
||||
"amplification_db", 33);
|
||||
|
||||
outputSignal = amp.process(inputSignal);
|
||||
|
||||
expectedPowerW = 10^(33/10 - 3);
|
||||
expectedScale = sqrt(expectedPowerW / mean(abs(inputSignal.signal).^2));
|
||||
|
||||
testCase.verifyClass(outputSignal, 'Opticalsignal');
|
||||
testCase.verifyEqual(outputSignal.signal, expectedScale * inputSignal.signal, "AbsTol", 1e-12);
|
||||
testCase.verifyEqual(outputSignal.power("unit", power_notation.W), expectedPowerW, "AbsTol", 1e-12);
|
||||
testCase.verifyEqual(outputSignal.fs, inputSignal.fs);
|
||||
testCase.verifyEqual(outputSignal.lambda, inputSignal.lambda);
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function sig = makeOpticalSignal(values, fs, lambda, nase, polrot)
|
||||
sig = Opticalsignal(values, ...
|
||||
"fs", fs, ...
|
||||
"logbook", Signal(values, "fs", fs).logbook, ...
|
||||
"lambda", lambda, ...
|
||||
"nase", nase, ...
|
||||
"polrot", polrot);
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user