-
Notifications
You must be signed in to change notification settings - Fork 0
/
helperGetP.m
72 lines (68 loc) · 1.9 KB
/
helperGetP.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
function P = helperGetP(numTx)
% Return orthogonal mapping sequences per transmit antenna
% Allows numTx to be a value in the set of
% {1 2 4 8 16 32 64 128 256 512 1024}.
% Copyright 2017 The MathWorks, Inc.
% Base set
Pltf = [1 -1 1 1; 1 1 -1 1; 1 1 1 -1; -1 1 1 1];
if numTx==2
P = Pltf(1:2,1:2);
elseif numTx==4
P = Pltf;
elseif numTx==8
P = [Pltf Pltf; Pltf -Pltf];
elseif numTx==16
P8 = [Pltf Pltf; Pltf -Pltf];
P = [P8 P8; P8 -P8];
elseif numTx==32
P8 = [Pltf Pltf; Pltf -Pltf];
P16 = [P8 P8; P8 -P8];
P = [P16 P16; P16 -P16];
elseif numTx==64
P8 = [Pltf Pltf; Pltf -Pltf];
P16 = [P8 P8; P8 -P8];
P32 = [P16 P16; P16 -P16];
P = [P32 P32; P32 -P32];
elseif numTx==128
P8 = [Pltf Pltf; Pltf -Pltf];
P16 = [P8 P8; P8 -P8];
P32 = [P16 P16; P16 -P16];
P64 = [P32 P32; P32 -P32];
P = [P64 P64; P64 -P64];
elseif numTx==256
P8 = [Pltf Pltf; Pltf -Pltf];
P16 = [P8 P8; P8 -P8];
P32 = [P16 P16; P16 -P16];
P64 = [P32 P32; P32 -P32];
P128 = [P64 P64; P64 -P64];
P = [P128 P128; P128 -P128];
elseif numTx==512
P8 = [Pltf Pltf; Pltf -Pltf];
P16 = [P8 P8; P8 -P8];
P32 = [P16 P16; P16 -P16];
P64 = [P32 P32; P32 -P32];
P128 = [P64 P64; P64 -P64];
P256 = [P128 P128; P128 -P128];
P = [P256 P256; P256 -P256];
elseif numTx==1024
P8 = [Pltf Pltf; Pltf -Pltf];
P16 = [P8 P8; P8 -P8];
P32 = [P16 P16; P16 -P16];
P64 = [P32 P32; P32 -P32];
P128 = [P64 P64; P64 -P64];
P256 = [P128 P128; P128 -P128];
P512 = [P256 P256; P256 -P256];
P = [P512 P512; P512 -P512];
else % for SISO, numTx = 1;
P = 1;
end
% For internal use only:
% Uncomment following code to cross-check mapping to be orthogonal
%
% cross = zeros(numTx,numTx);
% for i = 1:numTx
% for j = 1:numTx
% cross(i,j) = P(:,i)'*P(:,j);
% end
% end
% [EOF]