-
Notifications
You must be signed in to change notification settings - Fork 1
/
alamoutiEncoder4x4MIMO.m
65 lines (51 loc) · 1.89 KB
/
alamoutiEncoder4x4MIMO.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
function encodedMatrix = alamoutiEncoder4x4MIMO(inp,timeSlot)
%Input
%inp is expected either be a 1x4 vector(for encoding data symbols) or 4x4
%matrix (for encoding the channel matrix)
%TimeSlot defines the time slot in which the data symbols are being sent
%Output
%encodedMatrix is a 4x1 vector in case of data symbol encoding and a 4x4
%matrix in case of encoding of the channel matrix
temp = zeros(size(inp));
if(size(inp,1) == 1) %Encoding data
%Encoding the data symbols from each antenna for different time
%instances
if(timeSlot == 2)
temp(:,1) = conj(inp(:,2));
temp(:,2) = -conj(inp(:,1));
temp(:,3) = conj(inp(:,4));
temp(:,4) = -conj(inp(:,3));
elseif(timeSlot == 3)
temp(:,1) = conj(inp(:,3));
temp(:,2) = conj(inp(:,4));
temp(:,3) = -conj(inp(:,1));
temp(:,4) = -conj(inp(:,2));
elseif(timeSlot == 4)
temp(:,1) = inp(:,4);
temp(:,2) = -inp(:,3);
temp(:,3) = -inp(:,2);
temp(:,4) = inp(:,1);
end
encodedMatrix = temp(:);
else
%Encoding of the channel matrix in order to compute the composite
%channel matrix
if(timeSlot == 2)
temp(:,2) = conj(inp(:,1));
temp(:,1) = -conj(inp(:,2));
temp(:,4) = conj(inp(:,3));
temp(:,3) = -conj(inp(:,4));
elseif(timeSlot == 3)
temp(:,3) = conj(inp(:,1));
temp(:,4) = conj(inp(:,2));
temp(:,1) = -conj(inp(:,3));
temp(:,2) = -conj(inp(:,4));
elseif(timeSlot == 4)
temp(:,4) = inp(:,1);
temp(:,3) = -inp(:,2);
temp(:,2) = -inp(:,3);
temp(:,1) = inp(:,4);
end
encodedMatrix = temp;
end
end