-
Notifications
You must be signed in to change notification settings - Fork 4
/
fig6.m
107 lines (106 loc) · 6.61 KB
/
fig6.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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
clear all
snrValueDB = 0;
SNR = 10.^(snrValueDB./10);
tryNumber = 300;
%% Fig6 Parameters
parameters_Fig6 = containers.Map('KeyType','char','ValueType','any');
parameters_Fig6("numberTransmitAntennas") = 64; % Number of transmit antennas
parameters_Fig6("numberRecieveAntennas") = 16; % Number of receive antennas
parameters_Fig6("numberDataStreams") = 1; % Number of data streams
parameters_Fig6("numberRFChains") = 4; % Number of RF chains for precoding and combining
parameters_Fig6("numberCluster") = 8; % Number of clusters
parameters_Fig6("numberRayPerCluster") = 10; % Number of rays per cluster
%% Angle Spread vs Spectral Eff
angleSpreadValues = 0:1:15;
spectralEffOptimal = zeros(tryNumber,length(angleSpreadValues));
spectralEffHybrid = zeros(tryNumber,length(angleSpreadValues));
for a = 1:length(angleSpreadValues)
parameters_Fig6("angularSpread") = angleSpreadValues(a);
for i = 1:tryNumber
channel = ChannelGeneration(parameters_Fig6);
tempObj = OptimalUnconstraint(SNR,channel);
spectralEffOptimal(i,a) = tempObj.spectralEfficiency;
tempObj = HybridSparsePrecoding(SNR,channel);
spectralEffHybrid(i,a) = tempObj.spectralEfficiency;
end
end
% Averaging Tries
spectralEffOptimalSNR = mean(spectralEffOptimal,1);
spectralEffHybridSNR = mean(spectralEffHybrid,1);
% figure();
hold on
color = rand(1,3);
l1 = plot(angleSpreadValues,spectralEffOptimalSNR,'-s','Color',color,'LineWidth',2.0,'MarkerSize',8.0, 'DisplayName', sprintf("Optimal Uns. %dx%d, N_s=%d, N_{RF}=%d",parameters_Fig6("numberTransmitAntennas"),parameters_Fig6("numberRecieveAntennas"),parameters_Fig6("numberDataStreams"),parameters_Fig6("numberRFChains") ));
l2 = plot(angleSpreadValues,spectralEffHybridSNR,'-o','Color',color,'LineWidth',2.0,'MarkerSize',8.0,'DisplayName', sprintf("Hybrid Comb. %dx%d, N_s=%d, N_{RF}=%d",parameters_Fig6("numberTransmitAntennas"),parameters_Fig6("numberRecieveAntennas"),parameters_Fig6("numberDataStreams"),parameters_Fig6("numberRFChains") ));
%% v2
parameters_Fig6("numberTransmitAntennas") = 256; % Number of transmit antennas
parameters_Fig6("numberRecieveAntennas") = 64; % Number of receive antennas
spectralEffOptimal = zeros(tryNumber,length(angleSpreadValues));
spectralEffHybrid = zeros(tryNumber,length(angleSpreadValues));
for a = 1:length(angleSpreadValues)
parameters_Fig6("angularSpread") = angleSpreadValues(a);
for i = 1:tryNumber
channel = ChannelGeneration(parameters_Fig6);
tempObj = OptimalUnconstraint(SNR,channel);
spectralEffOptimal(i,a) = tempObj.spectralEfficiency;
tempObj = HybridSparsePrecoding(SNR,channel);
spectralEffHybrid(i,a) = tempObj.spectralEfficiency;
end
end
% Averaging Tries
spectralEffOptimalSNR = mean(spectralEffOptimal,1);
spectralEffHybridSNR = mean(spectralEffHybrid,1);
hold on
color = rand(1,3);
l3 = plot(angleSpreadValues,spectralEffOptimalSNR,'-s','Color',color,'LineWidth',2.0,'MarkerSize',8.0, 'DisplayName', sprintf("Optimal Uns. %dx%d, N_s=%d, N_{RF}=%d",parameters_Fig6("numberTransmitAntennas"),parameters_Fig6("numberRecieveAntennas"),parameters_Fig6("numberDataStreams"),parameters_Fig6("numberRFChains") ));
l4 = plot(angleSpreadValues,spectralEffHybridSNR,'-o','Color',color,'LineWidth',2.0,'MarkerSize',8.0,'DisplayName', sprintf("Hybrid Comb. %dx%d, N_s=%d, N_{RF}=%d",parameters_Fig6("numberTransmitAntennas"),parameters_Fig6("numberRecieveAntennas"),parameters_Fig6("numberDataStreams"),parameters_Fig6("numberRFChains") ));
%% v3
parameters_Fig6("numberTransmitAntennas") = 64; % Number of transmit antennas
parameters_Fig6("numberRecieveAntennas") = 16; % Number of receive antennas
parameters_Fig6("numberDataStreams") = 2; % Number of data streams
spectralEffOptimal = zeros(tryNumber,length(angleSpreadValues));
spectralEffHybrid = zeros(tryNumber,length(angleSpreadValues));
for a = 1:length(angleSpreadValues)
parameters_Fig6("angularSpread") = angleSpreadValues(a);
for i = 1:tryNumber
channel = ChannelGeneration(parameters_Fig6);
tempObj = OptimalUnconstraint(SNR,channel);
spectralEffOptimal(i,a) = tempObj.spectralEfficiency;
tempObj = HybridSparsePrecoding(SNR,channel);
spectralEffHybrid(i,a) = tempObj.spectralEfficiency;
end
end
% Averaging Tries
spectralEffOptimalSNR = mean(spectralEffOptimal,1);
spectralEffHybridSNR = mean(spectralEffHybrid,1);
hold on
color = rand(1,3);
l5 = plot(angleSpreadValues,spectralEffOptimalSNR,'-s','Color',color,'LineWidth',2.0,'MarkerSize',8.0, 'DisplayName', sprintf("Optimal Uns. %dx%d, N_s=%d, N_{RF}=%d",parameters_Fig6("numberTransmitAntennas"),parameters_Fig6("numberRecieveAntennas"),parameters_Fig6("numberDataStreams"),parameters_Fig6("numberRFChains") ));
l6 = plot(angleSpreadValues,spectralEffHybridSNR,'-o','Color',color,'LineWidth',2.0,'MarkerSize',8.0, 'DisplayName', sprintf("Hybrid Comb. %dx%d, N_s=%d, N_{RF}=%d",parameters_Fig6("numberTransmitAntennas"),parameters_Fig6("numberRecieveAntennas"),parameters_Fig6("numberDataStreams"),parameters_Fig6("numberRFChains") ));
%% v4
parameters_Fig6("numberTransmitAntennas") = 64; % Number of transmit antennas
parameters_Fig6("numberRecieveAntennas") = 16; % Number of receive antennas
parameters_Fig6("numberDataStreams") = 2; % Number of data streams
parameters_Fig6("numberRFChains") = 6;
spectralEffOptimal = zeros(tryNumber,length(angleSpreadValues));
spectralEffHybrid = zeros(tryNumber,length(angleSpreadValues));
for a = 1:length(angleSpreadValues)
parameters_Fig6("angularSpread") = angleSpreadValues(a);
for i = 1:tryNumber
channel = ChannelGeneration(parameters_Fig6);
tempObj = OptimalUnconstraint(SNR,channel);
spectralEffOptimal(i,a) = tempObj.spectralEfficiency;
tempObj = HybridSparsePrecoding(SNR,channel);
spectralEffHybrid(i,a) = tempObj.spectralEfficiency;
end
end
% Averaging Tries
spectralEffOptimalSNR = mean(spectralEffOptimal,1);
spectralEffHybridSNR = mean(spectralEffHybrid,1);
hold on
color = rand(1,3);
l7 = plot(angleSpreadValues,spectralEffOptimalSNR,'-s','Color',color,'LineWidth',2.0,'MarkerSize',8.0, 'DisplayName', sprintf("Optimal Uns. %dx%d, N_s=%d, N_{RF}=%d",parameters_Fig6("numberTransmitAntennas"),parameters_Fig6("numberRecieveAntennas"),parameters_Fig6("numberDataStreams"),parameters_Fig6("numberRFChains") ));
l8 = plot(angleSpreadValues,spectralEffHybridSNR,'-o','Color',color,'LineWidth',2.0,'MarkerSize',8.0,'DisplayName', sprintf("Hybrid Comb. %dx%d, N_s=%d, N_{RF}=%d",parameters_Fig6("numberTransmitAntennas"),parameters_Fig6("numberRecieveAntennas"),parameters_Fig6("numberDataStreams"),parameters_Fig6("numberRFChains") ));
legend
xlabel("Angle Spread (degrees)")
ylabel("Spectral Efficiency(bits/s/Hz)")