80 lines
3.4 KiB
Matlab
80 lines
3.4 KiB
Matlab
classdef Electricalsignal_test < IMDDTestCase
|
|
methods (Test, TestTags = {'unit', 'fast', 'signals', 'electricalsignal'})
|
|
function constructorStoresSignalFsAndLogbook(testCase)
|
|
seed = Signal(1, "fs", 2);
|
|
seed = seed.logbookentry("electrical seed", seed);
|
|
|
|
elec = Electricalsignal([1; -2; 3], "fs", 80e9, "logbook", seed.logbook);
|
|
|
|
testCase.verifyClass(elec, 'Electricalsignal');
|
|
testCase.verifyEqual(elec.signal, [1; -2; 3]);
|
|
testCase.verifyEqual(elec.fs, 80e9);
|
|
testCase.verifyEqual(elec.logbook, seed.logbook);
|
|
end
|
|
|
|
function inheritedArithmeticKeepsElectricalsignalTypeAndMetadata(testCase)
|
|
seed = Signal(0, "fs", 1);
|
|
seed = seed.logbookentry("lhs metadata", seed);
|
|
lhs = Electricalsignal([1; 2; 3], "fs", 64e9, "logbook", seed.logbook);
|
|
rhs = Electricalsignal([4; 5; 6], "fs", 32e9, "logbook", table());
|
|
|
|
sumSig = lhs + rhs;
|
|
|
|
testCase.verifyClass(sumSig, 'Electricalsignal');
|
|
testCase.verifyEqual(sumSig.signal, [5; 7; 9]);
|
|
testCase.verifyEqual(sumSig.fs, lhs.fs);
|
|
testCase.verifyEqual(sumSig.logbook, lhs.logbook);
|
|
end
|
|
|
|
function informationCastPreservesSignalFsAndLogbook(testCase)
|
|
seed = Signal(3, "fs", 4);
|
|
seed = seed.logbookentry("electrical cast", seed);
|
|
elec = Electricalsignal([2; 0; -2], "fs", 96e9, "logbook", seed.logbook);
|
|
|
|
info = elec.Informationsignal("fs", elec.fs, "logbook", elec.logbook);
|
|
|
|
testCase.verifyClass(info, 'Informationsignal');
|
|
testCase.verifyEqual(info.signal, elec.signal);
|
|
testCase.verifyEqual(info.fs, elec.fs);
|
|
testCase.verifyEqual(info.logbook, elec.logbook);
|
|
end
|
|
|
|
function power50MatchesInheritedElectricalPowerDefinition(testCase)
|
|
elec = Electricalsignal([1; -1; 1; -1], "fs", 1, "logbook", table());
|
|
|
|
expectedPowerDbm = 10 * log10(mean(abs(elec.signal).^2) / 50) + 30;
|
|
|
|
testCase.verifyEqual(elec.power50(), expectedPowerDbm, "AbsTol", 1e-12);
|
|
testCase.verifyEqual(elec.power50(), elec.power(), "AbsTol", 1e-12);
|
|
end
|
|
|
|
function csprUsesCarrierToTotalPowerRatioInDb(testCase)
|
|
elec = Electricalsignal([1; 3], "fs", 1, "logbook", table());
|
|
|
|
carrierPowerDbm = pow2db(abs(mean(elec.signal)).^2) + 30;
|
|
expectedCsprDb = carrierPowerDbm - elec.power();
|
|
|
|
testCase.verifyEqual(elec.cspr(), expectedCsprDb, "AbsTol", 1e-12);
|
|
end
|
|
|
|
function normalizeMilliwattSetsPowerToZeroDbmInto50Ohm(testCase)
|
|
elec = Electricalsignal([2; -2; 2; -2], "fs", 1, "logbook", table());
|
|
|
|
elec = elec.normalize("mode", normalization_mode.milliwatt);
|
|
|
|
testCase.verifyEqual(elec.power50(), 0, "AbsTol", 1e-12);
|
|
testCase.verifyClass(elec, 'Electricalsignal');
|
|
end
|
|
|
|
function setPowerSupportsMilliwattAndDbwTargets(testCase)
|
|
elec = Electricalsignal([1; -1; 1; -1], "fs", 1, "logbook", table());
|
|
|
|
elecMilliwatt = elec.setPower(2, power_notation.mW);
|
|
elecDbw = elec.setPower(-20, power_notation.dBW);
|
|
|
|
testCase.verifyEqual(elecMilliwatt.power50(), 10 * log10(2), "AbsTol", 1e-12);
|
|
testCase.verifyEqual(elecDbw.power50(), 10, "AbsTol", 1e-12);
|
|
end
|
|
end
|
|
end
|