classdef PAMmapper_test < matlab.unittest.TestCase properties Digi_Mod Tx_bits Rx_bits % M = 8; % Modulation order fsym = 112e9; % Symbol rate end properties (TestParameter) M = {4,6,8}; end methods (TestMethodSetup) function setupModulation(testCase) % Setup PRBS and bit pattern for the test case O = 10; % Order of PRBS N = 2^(O-1); % Length of PRBS useprbs = 1; % Flag to use PRBS randkey = 1; % Random key for random stream [~, seed] = prbs(O, 1); % Initialize first seed of PRBS bitpattern = []; if useprbs for i = 1:log2(testCase.M) [bitpattern(:, i), seed] = prbs(O, N, seed); end else s = RandStream('twister', 'Seed', randkey); for i = 1:log2(testCase.M) bitpattern(:, i) = randi(s, [0 1], N, 1); end end if testCase.M == 6 bitpattern = reshape(bitpattern, [], 1); bitpattern = bitpattern(1:end-mod(length(bitpattern), 5)); end testCase.Tx_bits = Informationsignal(bitpattern); testCase.Digi_Mod = PAMmapper(testCase.M, 0); end end methods (Test) function testBackToBackMapping(testCase) % Test Bits -> Symbols -> Bits (Back-to-Back Mapping) % Map bits to symbols Symbols = testCase.Digi_Mod.map(testCase.Tx_bits); % Demap symbols back to bits testCase.Rx_bits = testCase.Digi_Mod.demap(Symbols); % Validate BER is zero [~, error_num, ber, ~] = calc_ber(testCase.Tx_bits.signal, testCase.Rx_bits.signal, ... "skip_front", 0, "skip_end", 0, "returnErrorLocation", 1); % Assert that BER is zero testCase.verifyEqual(ber, 0, 'BER should be zero'); testCase.verifyEqual(error_num, 0, 'No errors should occur in the mapping process'); end end end