68 lines
2.1 KiB
Matlab
68 lines
2.1 KiB
Matlab
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
|