Files
imdd_silas/Tests/01_transmit/Signalgenerator_test.m
Silas Oettinghaus 456fd02186 Ordnerstruktur
2026-04-23 16:16:58 +02:00

151 lines
4.9 KiB
Matlab

classdef Signalgenerator_test < IMDDTestCase
methods (Test, TestTags = {'unit', 'fast', 'transmit', 'signalgenerator'})
function constructorStoresDefaultConfiguration(testCase)
gen = Signalgenerator();
testCase.verifyEqual(gen.form, signalform.sine);
testCase.verifyEqual(gen.length, 1024);
testCase.verifyEqual(gen.fs, 1000);
testCase.verifyEqual(gen.fsig, 50);
testCase.verifyEqual(gen.dimension, 1);
testCase.verifyEmpty(gen.M);
testCase.verifyEqual(gen.order, 7);
testCase.verifyEqual(gen.randkey, 0);
testCase.verifyEqual(gen.skip, 0);
testCase.verifyFalse(gen.bruijn);
end
function buildSignalProducesExpectedSineWave(testCase)
gen = Signalgenerator( ...
"form", signalform.sine, ...
"length", 4, ...
"fs", 4, ...
"fsig", 1);
signal = gen.build_signal();
expected = [0 1 0 -1];
testCase.verifySize(signal, [1 4]);
testCase.verifyEqual(signal, expected, "AbsTol", 1e-12);
end
function processWrapsGeneratedSignalInInformationsignal(testCase)
gen = Signalgenerator( ...
"form", signalform.sine, ...
"length", 4, ...
"fs", 4, ...
"fsig", 1);
out = gen.process();
testCase.verifyClass(out, 'Informationsignal');
testCase.verifySize(out.signal, [1 4]);
testCase.verifyEqual(out.fs, 4);
testCase.verifyEqual(out.signal, [0 1 0 -1], "AbsTol", 1e-12);
testCase.verifyEqual(height(out.logbook), 1);
end
function randomDataIsDeterministicAndColumnShaped(testCase)
gen = Signalgenerator( ...
"form", signalform.random, ...
"length", 8, ...
"dimension", 2, ...
"randkey", 3);
signal = gen.build_signal();
expected = [ ...
1 0; ...
1 0; ...
0 0; ...
1 0; ...
1 1; ...
1 0; ...
0 1; ...
0 1];
testCase.verifySize(signal, [8 2]);
testCase.verifyEqual(signal, expected);
end
function prmsDataUsesMoveItStyleShape(testCase)
gen = Signalgenerator( ...
"form", signalform.prms, ...
"length", 8, ...
"dimension", 2, ...
"order", 6);
signal = gen.build_signal();
expected = [ ...
1 0; ...
1 0; ...
0 1; ...
1 0; ...
0 1; ...
0 0; ...
1 0; ...
0 0];
testCase.verifySize(signal, [8 2]);
testCase.verifyEqual(signal, expected);
end
function prmsLengthDefaultsToPamSourceStyleLength(testCase)
pam4Gen = Signalgenerator( ...
"form", signalform.prms, ...
"dimension", 2, ...
"order", 7);
pam6Gen = Signalgenerator( ...
"form", signalform.prms, ...
"dimension", 5, ...
"order", 7);
testCase.verifyEqual(pam4Gen.length, 2^(7 - 1));
testCase.verifyEqual(pam6Gen.length, 2^(7 - 2));
end
function pamFormatSelectsMapperReadyDimension(testCase)
pam4Gen = Signalgenerator( ...
"form", signalform.prms, ...
"M", 4, ...
"order", 7);
pam6Gen = Signalgenerator( ...
"form", signalform.prms, ...
"M", 6, ...
"order", 7);
testCase.verifyEqual(pam4Gen.dimension, 2);
testCase.verifyEqual(pam4Gen.length, 2^(7 - 1));
testCase.verifyEqual(pam6Gen.dimension, 5);
testCase.verifyEqual(pam6Gen.length, 2^(7 - 2));
end
function pam6FormatReturnsMapperReadyVector(testCase)
gen = Signalgenerator( ...
"form", signalform.prms, ...
"M", 6, ...
"order", 7);
signal = gen.build_signal();
testCase.verifySize(signal, [5 * 2^(7 - 2), 1]);
testCase.verifyEqual(mod(numel(signal), 5), 0);
end
function processWrapsPrmsSignalInInformationsignal(testCase)
gen = Signalgenerator( ...
"form", signalform.prms, ...
"length", 8, ...
"dimension", 2, ...
"order", 6, ...
"fs", 42);
out = gen.process();
testCase.verifyClass(out, 'Informationsignal');
testCase.verifySize(out.signal, [8 2]);
testCase.verifyEqual(out.fs, 42);
testCase.verifyEqual(height(out.logbook), 1);
end
end
end