NetSim Source Code Help v14.4
All 13 Components
 
Loading...
Searching...
No Matches
IEEE802_11_HTPhy.c
1/************************************************************************************
2* Copyright (C) 2023 *
3* TETCOS, Bangalore. India *
4* *
5* Tetcos owns the intellectual property rights in the Product and its content. *
6* The copying, redistribution, reselling or publication of any or all of the *
7* Product or its content without express prior written consent of Tetcos is *
8* prohibited. Ownership and / or any other right relating to the software and all *
9* intellectual property rights therein shall remain at all times with Tetcos. *
10* *
11* This source code is licensed per the NetSim license agreement. *
12* *
13* No portion of this source code may be used as the basis for a derivative work, *
14* or used, for any purpose other than its intended use per the NetSim license *
15* agreement. *
16* *
17* This source code and the algorithms contained within it are confidential trade *
18* secrets of TETCOS and may not be used as the basis for any other software, *
19* hardware, product or service. *
20* *
21* Author: Shashi Kant Suman *
22* *
23* ----------------------------------------------------------------------------------*/
24#include "main.h"
25#include "main.h"
26#include "IEEE802_11.h"
27#include "IEEE802_11_Phy.h"
28#include "ErrorModel.h"
29
30/// Data structure for physical layer parameters
32{
33 int nIndex;
34 int MCS;
35 double dRxSensitivity;
36 PHY_MODULATION nModulation;
37 double dCodingRate;
38 int nNBPSC;
39 int nNSD;
40 int NSP;
41 int nNCBPS;
42 int nNDBPS;
43 int NES;
44 double dGI;
45 double dDataRate;
46
47};
48
49static struct stru_802_11_Phy_Parameters_HT struPhyParameters_20MHz_1NSS[20] =
50{
51 //IEEE802.11-HT Phy 20 MHz
52 {1,0,-82,Modulation_BPSK,1.0/2.0,1,52,4,52,26,1,800,6.5},
53 {2,1,-79,Modulation_QPSK,1.0/2.0,1,52,4,104,52,1,800,13.0},
54 {3,2,-77,Modulation_QPSK,3.0/4.0,2,52,4,104,78,1,800,19.5},
55 {4,3,-74,Modulation_16_QAM,1.0/2.0,4,52,4,208,104,1,800,26.0},
56 {5,4,-70,Modulation_16_QAM,3.0/4.0,4,52,4,208,156,1,800,39.0},
57 {6,5,-66,Modulation_64_QAM,2.0/3.0,6,52,4,312,208,1,800,52.0},
58 {7,6,-65,Modulation_64_QAM,3.0/4.0,6,52,4,312,234,1,800,58.5},
59 {8,7,-64,Modulation_64_QAM,5.0/6.0,6,52,4,312,260,1,800,65.0},
60 {9,8,-59,Modulation_256_QAM,3.0/4.0,8,52,4,416,312,1,800,78.0},
61 {10,9,-57,Modulation_256_QAM,3.0/4.0,8,0,0,0,0,0,0,-1},//Not valid
62 {11,0,-82,Modulation_BPSK,1.0/2.0,1,52,4,52,26,1,400,7.2},
63 {12,1,-79,Modulation_QPSK,1.0/2.0,1,52,4,104,52,1,400,14.4},
64 {13,2,-77,Modulation_QPSK,3.0/4.0,2,52,4,104,78,1,400,21.7},
65 {14,3,-74,Modulation_16_QAM,1.0/2.0,4,52,4,208,104,1,400,28.9},
66 {15,4,-70,Modulation_16_QAM,3.0/4.0,4,52,4,208,156,1,400,43.3},
67 {16,5,-66,Modulation_64_QAM,2.0/3.0,6,52,4,312,208,1,400,57.8},
68 {17,6,-65,Modulation_64_QAM,3.0/4.0,6,52,4,312,234,1,400,65.0},
69 {18,7,-64,Modulation_64_QAM,5.0/6.0,6,52,4,312,260,1,400,72.2},
70 {19,8,-59,Modulation_256_QAM,3.0/4.0,8,52,4,416,312,1,400,86.7},
71 {20,9,-57,Modulation_256_QAM,3.0/4.0,8,0,0,0,0,0,0,-1},
72};
73
74static struct stru_802_11_Phy_Parameters_HT struPhyParameters_20MHz_2NSS[20] =
75{
76 //IEEE802.11-HT Phy 20 MHz
77 {1,0,-82,Modulation_BPSK,1.0/2.0,1,52,4,104,52,1,800,13.0},
78 {2,1,-79,Modulation_QPSK,1.0/2.0,1,52,4,208,104,1,800,26.0},
79 {3,2,-77,Modulation_QPSK,3.0/4.0,2,52,4,208,156,1,800,39.0},
80 {4,3,-74,Modulation_16_QAM,1.0/2.0,4,52,4,416,208,1,800,52.0},
81 {5,4,-70,Modulation_16_QAM,3.0/4.0,4,52,4,416,312,1,800,78.0},
82 {6,5,-66,Modulation_64_QAM,2.0/3.0,6,52,4,624,416,1,800,104.0},
83 {7,6,-65,Modulation_64_QAM,3.0/4.0,6,52,4,624,468,1,800,117.0},
84 {8,7,-64,Modulation_64_QAM,5.0/6.0,6,52,4,624,520,1,800,130.0},
85 {9,8,-59,Modulation_256_QAM,3.0/4.0,8,52,4,832,624,1,800,156.0},
86 {10,9,-57,Modulation_256_QAM,3.0/4.0,8,0,0,0,0,0,0,-1},//Not valid
87 {11,0,-82,Modulation_BPSK,1.0/2.0,1,52,4,104,52,1,400,14.4},
88 {12,1,-79,Modulation_QPSK,1.0/2.0,1,52,4,208,104,1,400,28.9},
89 {13,2,-77,Modulation_QPSK,3.0/4.0,2,52,4,208,156,1,400,43.3},
90 {14,3,-74,Modulation_16_QAM,1.0/2.0,4,52,4,416,208,1,400,57.8},
91 {15,4,-70,Modulation_16_QAM,3.0/4.0,4,52,4,416,312,1,400,86.7},
92 {16,5,-66,Modulation_64_QAM,2.0/3.0,6,52,4,624,416,1,400,115.6},
93 {17,6,-65,Modulation_64_QAM,3.0/4.0,6,52,4,624,468,1,400,130.0},
94 {18,7,-64,Modulation_64_QAM,5.0/6.0,6,52,4,624,520,1,400,144.4},
95 {19,8,-59,Modulation_256_QAM,3.0/4.0,8,52,4,832,624,1,400,173.3},
96 {20,8,-57,Modulation_256_QAM,3.0/4.0,8,0,0,0,0,0,0,-1},
97};
98
99static struct stru_802_11_Phy_Parameters_HT struPhyParameters_20MHz_3NSS[20] =
100{
101 //IEEE802.11-HT Phy 20 MHz
102 {1,0,-82,Modulation_BPSK,1.0/2.0,1,52,4,156,78,1,800,19.5},
103 {2,1,-79,Modulation_QPSK,1.0/2.0,1,52,4,312,156,1,800,39.0},
104 {3,2,-77,Modulation_QPSK,3.0/4.0,2,52,4,312,234,1,800,58.5},
105 {4,3,-74,Modulation_16_QAM,1.0/2.0,4,52,4,624,312,1,800,78.0},
106 {5,4,-70,Modulation_16_QAM,3.0/4.0,4,52,4,624,468,1,800,117.0},
107 {6,5,-66,Modulation_64_QAM,2.0/3.0,6,52,4,936,624,1,800,156.0},
108 {7,6,-65,Modulation_64_QAM,3.0/4.0,6,52,4,936,702,1,800,175.5},
109 {8,7,-64,Modulation_64_QAM,5.0/6.0,6,52,4,936,780,1,800,195.0},
110 {9,8,-59,Modulation_256_QAM,3.0/4.0,8,52,4,1248,936,1,800,234.0},
111 {10,9,-57,Modulation_256_QAM,3.0/4.0,8,52,4,1248,1040,1,800,260.0},
112 {11,0,-82,Modulation_BPSK,1.0/2.0,1,52,4,156,78,1,400,21.7},
113 {12,1,-79,Modulation_QPSK,1.0/2.0,1,52,4,312,156,1,400,43.3},
114 {13,2,-77,Modulation_QPSK,3.0/4.0,2,52,4,312,234,1,400,65.0},
115 {14,3,-74,Modulation_16_QAM,1.0/2.0,4,52,4,624,312,1,400,86.7},
116 {15,4,-70,Modulation_16_QAM,3.0/4.0,4,52,4,624,468,1,400,130.0},
117 {16,5,-66,Modulation_64_QAM,2.0/3.0,6,52,4,936,624,1,400,173.3},
118 {17,6,-65,Modulation_64_QAM,3.0/4.0,6,52,4,936,702,1,400,195.0},
119 {18,7,-64,Modulation_64_QAM,5.0/6.0,6,52,4,936,780,1,400,216.7},
120 {19,8,-59,Modulation_256_QAM,3.0/4.0,8,52,4,1248,936,1,400,260.0},
121 {20,9,-57,Modulation_256_QAM,3.0/4.0,8,52,4,1248,1040,1,400,288.9},
122};
123
124static struct stru_802_11_Phy_Parameters_HT struPhyParameters_20MHz_4NSS[20] =
125{
126 //IEEE802.11-HT Phy 20 MHz
127 {1,0,-82,Modulation_BPSK,1.0/2.0,1,52,4,208,104,1,800,26.0},
128 {2,1,-79,Modulation_QPSK,1.0/2.0,1,52,4,416,208,1,800,52.0},
129 {3,2,-77,Modulation_QPSK,3.0/4.0,2,52,4,416,312,1,800,78.0},
130 {4,3,-74,Modulation_16_QAM,1.0/2.0,4,52,4,832,416,1,800,104.0},
131 {5,4,-70,Modulation_16_QAM,3.0/4.0,4,52,4,832,624,1,800,156.0},
132 {6,5,-66,Modulation_64_QAM,2.0/3.0,6,52,4,1248,832,1,800,208.0},
133 {7,6,-65,Modulation_64_QAM,3.0/4.0,6,52,4,1248,936,1,800,234.0},
134 {8,7,-64,Modulation_64_QAM,5.0/6.0,6,52,4,1248,1040,1,800,260.0},
135 {9,8,-59,Modulation_256_QAM,3.0/4.0,8,52,4,1664,1248,1,800,312.0},
136 {10,9,-57,Modulation_256_QAM,3.0/4.0,8,0,0,0,0,0,0,-1},//Not valid
137 {11,0,-82,Modulation_BPSK,1.0/2.0,1,52,4,208,104,1,400,28.9},
138 {12,1,-79,Modulation_QPSK,1.0/2.0,1,52,4,416,208,1,400,57.8},
139 {13,2,-77,Modulation_QPSK,3.0/4.0,2,52,4,416,312,1,400,86.7},
140 {14,3,-74,Modulation_16_QAM,1.0/2.0,4,52,4,832,416,1,400,115.6},
141 {15,4,-70,Modulation_16_QAM,3.0/4.0,4,52,4,832,624,1,400,173.3},
142 {16,5,-66,Modulation_64_QAM,2.0/3.0,6,52,4,1248,832,1,400,231.1},
143 {17,6,-65,Modulation_64_QAM,3.0/4.0,6,52,4,1248,936,1,400,260.0},
144 {18,7,-64,Modulation_64_QAM,5.0/6.0,6,52,4,1248,1040,1,400,288.9},
145 {19,8,-59,Modulation_256_QAM,3.0/4.0,8,52,4,1664,1248,1,400,346.7},
146 {20,9,-57,Modulation_256_QAM,3.0/4.0,8,0,0,0,0,0,0,-1},//Not valid
147};
148
149static struct stru_802_11_Phy_Parameters_HT struPhyParameters_20MHz_5NSS[20] =
150{
151 //IEEE802.11-HT Phy 20 MHz
152 {1,0,-82,Modulation_BPSK,1.0/2.0,1,52,4,260,130,1,800,32.5},
153 {2,1,-79,Modulation_QPSK,1.0/2.0,1,52,4,520,260,1,800,65.0},
154 {3,2,-77,Modulation_QPSK,3.0/4.0,2,52,4,520,390,1,800,97.5},
155 {4,3,-74,Modulation_16_QAM,1.0/2.0,4,52,4,1040,520,1,800,130.0},
156 {5,4,-70,Modulation_16_QAM,3.0/4.0,4,52,4,1040,780,1,800,195.0},
157 {6,5,-66,Modulation_64_QAM,2.0/3.0,6,52,4,1560,1040,1,800,260.0},
158 {7,6,-65,Modulation_64_QAM,3.0/4.0,6,52,4,1560,1170,1,800,292.5},
159 {8,7,-64,Modulation_64_QAM,5.0/6.0,6,52,4,1560,1300,1,800,325.0},
160 {9,8,-59,Modulation_256_QAM,3.0/4.0,8,52,4,2080,1560,1,800,390.0},
161 {10,9,-57,Modulation_256_QAM,3.0/4.0,8,0,0,0,0,0,0,-1},//Not valid
162 {11,0,-82,Modulation_BPSK,1.0/2.0,1,52,4,260,130,1,400,36.1},
163 {12,1,-79,Modulation_QPSK,1.0/2.0,1,52,4,520,260,1,400,72.2},
164 {13,2,-77,Modulation_QPSK,3.0/4.0,2,52,4,520,390,1,400,108.3},
165 {14,3,-74,Modulation_16_QAM,1.0/2.0,4,52,4,1040,520,1,400,144.4},
166 {15,4,-70,Modulation_16_QAM,3.0/4.0,4,52,4,1040,780,1,400,216.7},
167 {16,5,-66,Modulation_64_QAM,2.0/3.0,6,52,4,1560,1040,1,400,288.9},
168 {17,6,-65,Modulation_64_QAM,3.0/4.0,6,52,4,1560,1170,1,400,325.0},
169 {18,7,-64,Modulation_64_QAM,5.0/6.0,6,52,4,1560,1300,1,400,361.1},
170 {19,8,-59,Modulation_256_QAM,3.0/4.0,8,52,4,2080,1560,1,400,433.3},
171 {20,9,-57,Modulation_256_QAM,3.0/4.0,8,0,0,0,0,0,0,-1},//Not valid
172};
173
174static struct stru_802_11_Phy_Parameters_HT struPhyParameters_20MHz_6NSS[20] =
175{
176 //IEEE802.11-HT Phy 20 MHz
177 {1,0,-82,Modulation_BPSK,1.0/2.0,1,52,4,312,156,1,800,39.0},
178 {2,1,-79,Modulation_QPSK,1.0/2.0,1,52,4,624,312,1,800,78.0},
179 {3,2,-77,Modulation_QPSK,3.0/4.0,2,52,4,624,468,1,800,117.0},
180 {4,3,-74,Modulation_16_QAM,1.0/2.0,4,52,4,1248,624,1,800,156.0},
181 {5,4,-70,Modulation_16_QAM,3.0/4.0,4,52,4,1248,936,1,800,234.0},
182 {6,5,-66,Modulation_64_QAM,2.0/3.0,6,52,4,1872,1248,1,800,312.0},
183 {7,6,-65,Modulation_64_QAM,3.0/4.0,6,52,4,1872,1404,1,800,351.0},
184 {8,7,-64,Modulation_64_QAM,5.0/6.0,6,52,4,1872,1560,1,800,390.0},
185 {9,8,-59,Modulation_256_QAM,3.0/4.0,8,52,4,2496,1872,1,800,468.0},
186 {10,9,-57,Modulation_256_QAM,3.0/4.0,8,52,4,2496,2080,1,800,520.0},
187 {11,0,-82,Modulation_BPSK,1.0/2.0,1,52,4,312,156,1,400,43.3},
188 {12,1,-79,Modulation_QPSK,1.0/2.0,1,52,4,624,312,1,400,86.7},
189 {13,2,-77,Modulation_QPSK,3.0/4.0,2,52,4,624,468,1,400,130.0},
190 {14,3,-74,Modulation_16_QAM,1.0/2.0,4,52,4,1248,624,1,400,173.3},
191 {15,4,-70,Modulation_16_QAM,3.0/4.0,4,52,4,1248,936,1,400,260.0},
192 {16,5,-66,Modulation_64_QAM,2.0/3.0,6,52,4,1872,1248,1,400,346.7},
193 {17,6,-65,Modulation_64_QAM,3.0/4.0,6,52,4,1872,1404,1,400,390.0},
194 {18,7,-64,Modulation_64_QAM,5.0/6.0,6,52,4,1872,1560,1,400,433.3},
195 {19,8,-59,Modulation_256_QAM,3.0/4.0,8,52,4,2496,1872,1,400,520.0},
196 {20,9,-57,Modulation_256_QAM,3.0/4.0,8,52,4,2496,2080,1,400,577.8},
197};
198
199static struct stru_802_11_Phy_Parameters_HT struPhyParameters_20MHz_7NSS[20] =
200{
201 //IEEE802.11-HT Phy 20 MHz
202 {1,0,-82,Modulation_BPSK,1.0/2.0,1,52,4,364,182,1,800,45.5},
203 {2,1,-79,Modulation_QPSK,1.0/2.0,1,52,4,728,364,1,800,91.0},
204 {3,2,-77,Modulation_QPSK,3.0/4.0,2,52,4,728,546,1,800,136.5},
205 {4,3,-74,Modulation_16_QAM,1.0/2.0,4,52,4,1456,728,1,800,182.0},
206 {5,4,-70,Modulation_16_QAM,3.0/4.0,4,52,4,1456,1092,1,800,273.0},
207 {6,5,-66,Modulation_64_QAM,2.0/3.0,6,52,4,2184,1456,1,800,364.0},
208 {7,6,-65,Modulation_64_QAM,3.0/4.0,6,52,4,2184,1638,1,800,409.5},
209 {8,7,-64,Modulation_64_QAM,5.0/6.0,6,52,4,2184,1820,1,800,455.0},
210 {9,8,-59,Modulation_256_QAM,3.0/4.0,8,52,4,2912,2184,2,800,546.0},
211 {10,9,-57,Modulation_256_QAM,3.0/4.0,8,0,0,0,0,0,0,-1},//Not valid
212 {11,0,-82,Modulation_BPSK,1.0/2.0,1,52,4,364,182,1,400,50.6},
213 {12,1,-79,Modulation_QPSK,1.0/2.0,1,52,4,728,364,1,400,101.1},
214 {13,2,-77,Modulation_QPSK,3.0/4.0,2,52,4,728,546,1,400,151.7},
215 {14,3,-74,Modulation_16_QAM,1.0/2.0,4,52,4,1456,728,1,400,202.2},
216 {15,4,-70,Modulation_16_QAM,3.0/4.0,4,52,4,1456,1092,1,400,303.3},
217 {16,5,-66,Modulation_64_QAM,2.0/3.0,6,52,4,2184,1456,1,400,404.4},
218 {17,6,-65,Modulation_64_QAM,3.0/4.0,6,52,4,2184,1638,1,400,455.0},
219 {18,7,-64,Modulation_64_QAM,5.0/6.0,6,52,4,2184,1820,1,400,505.6},
220 {19,8,-59,Modulation_256_QAM,3.0/4.0,8,52,4,2912,2184,2,400,606.7},
221 {20,9,-57,Modulation_256_QAM,3.0/4.0,8,0,0,0,0,0,0,-1},//Not valid
222};
223
224static struct stru_802_11_Phy_Parameters_HT struPhyParameters_20MHz_8NSS[20] =
225{
226 //IEEE802.11-HT Phy 20 MHz
227 {1,0,-82,Modulation_BPSK,1.0/2.0,1,52,4,416,208,1,800,52.0},
228 {2,1,-79,Modulation_QPSK,1.0/2.0,1,52,4,832,416,1,800,104.0},
229 {3,2,-77,Modulation_QPSK,3.0/4.0,2,52,4,832,624,1,800,156.0},
230 {4,3,-74,Modulation_16_QAM,1.0/2.0,4,52,4,1664,832,1,800,208.0},
231 {5,4,-70,Modulation_16_QAM,3.0/4.0,4,52,4,1664,1248,1,800,312.0},
232 {6,5,-66,Modulation_64_QAM,2.0/3.0,6,52,4,2496,1664,1,800,416.0},
233 {7,6,-65,Modulation_64_QAM,3.0/4.0,6,52,4,2496,1872,1,800,468.0},
234 {8,7,-64,Modulation_64_QAM,5.0/6.0,6,52,4,2496,2080,1,800,520.0},
235 {9,8,-59,Modulation_256_QAM,3.0/4.0,8,52,4,3328,2496,2,800,624.0},
236 {10,9,-57,Modulation_256_QAM,3.0/4.0,8,0,0,0,0,0,0,-1},//Not valid
237 {11,0,-82,Modulation_BPSK,1.0/2.0,1,52,4,416,208,1,400,57.8},
238 {12,1,-79,Modulation_QPSK,1.0/2.0,1,52,4,832,416,1,400,115.6},
239 {13,2,-77,Modulation_QPSK,3.0/4.0,2,52,4,832,624,1,400,173.3},
240 {14,3,-74,Modulation_16_QAM,1.0/2.0,4,52,4,1664,832,1,400,231.1},
241 {15,4,-70,Modulation_16_QAM,3.0/4.0,4,52,4,1664,1248,1,400,346.7},
242 {16,5,-66,Modulation_64_QAM,2.0/3.0,6,52,4,2496,1664,1,400,462.2},
243 {17,6,-65,Modulation_64_QAM,3.0/4.0,6,52,4,2496,1872,1,400,520.0},
244 {18,7,-64,Modulation_64_QAM,5.0/6.0,6,52,4,2496,2080,1,400,577.8},
245 {19,8,-59,Modulation_256_QAM,3.0/4.0,8,52,4,3328,2496,2,400,693.3},
246 {20,9,-57,Modulation_256_QAM,3.0/4.0,8,0,0,0,0,0,0,-1},
247};
248
249
250static struct stru_802_11_Phy_Parameters_HT struPhyParameters_40MHz_1NSS[20] =
251{
252 //IEEE802.11-HT Phy 40 MHz
253 {1,0,-79,Modulation_BPSK,1.0/2.0,1,108,6,108,54,1,800,13.5},
254 {2,1,-76,Modulation_QPSK,1.0/2.0,2,108,6,216,108,1,800,27.0},
255 {3,2,-74,Modulation_QPSK,3.0/4.0,2,108,6,216,162,1,800,40.5},
256 {4,3,-71,Modulation_16_QAM,1.0/2.0,4,108,6,432,216,1,800,54.0},
257 {5,4,-67,Modulation_16_QAM,3.0/4.0,4,108,6,432,324,1,800,81.0},
258 {6,5,-63,Modulation_64_QAM,2.0/3.0,6,108,6,648,432,1,800,108.0},
259 {7,6,-62,Modulation_64_QAM,3.0/4.0,6,108,6,648,486,1,800,121.5},
260 {8,7,-61,Modulation_64_QAM,5.0/6.0,6,108,6,648,540,1,800,135.0},
261 {9,8,-56,Modulation_256_QAM,3.0/4.0,8,108,6,864,648,1,800,162.0},
262 {10,9,-54,Modulation_256_QAM,5.0/6.0,8,108,6,864,720,1,800,180.0},
263 {11,0,-79,Modulation_BPSK,1.0/2.0,1,108,6,108,54,1,400,15.0},
264 {12,1,-76,Modulation_QPSK,1.0/2.0,2,108,6,216,108,1,400,30.0},
265 {13,2,-74,Modulation_QPSK,3.0/4.0,2,108,6,216,162,1,400,45.0},
266 {14,3,-71,Modulation_16_QAM,1.0/2.0,4,108,6,432,216,1,400,60.0},
267 {15,4,-67,Modulation_16_QAM,3.0/4.0,4,108,6,432,324,1,400,90.0},
268 {16,5,-63,Modulation_64_QAM,2.0/3.0,6,108,6,648,432,1,400,120.0},
269 {17,6,-62,Modulation_64_QAM,3.0/4.0,6,108,6,648,486,1,400,135.0},
270 {18,7,-61,Modulation_64_QAM,5.0/6.0,6,108,6,648,540,1,400,150.0},
271 {19,8,-56,Modulation_256_QAM,3.0/4.0,8,108,6,864,648,1,400,180.0},
272 {20,9,-54,Modulation_256_QAM,5.0/6.0,8,108,6,864,720,1,400,200.0},
273
274};
275
276static struct stru_802_11_Phy_Parameters_HT struPhyParameters_40MHz_2NSS[20] =
277{
278 //IEEE802.11-HT Phy 40 MHz
279 {1,0,-79,Modulation_BPSK,1.0/2.0,1,108,6,216,108,1,800,27.0},
280 {2,1,-76,Modulation_QPSK,1.0/2.0,2,108,6,432,216,1,800,54.0},
281 {3,2,-74,Modulation_QPSK,3.0/4.0,2,108,6,432,324,1,800,81.0},
282 {4,3,-71,Modulation_16_QAM,1.0/2.0,4,108,6,864,432,1,800,108.0},
283 {5,4,-67,Modulation_16_QAM,3.0/4.0,4,108,6,864,648,1,800,162.0},
284 {6,5,-63,Modulation_64_QAM,2.0/3.0,6,108,6,1296,864,1,800,216.0},
285 {7,6,-62,Modulation_64_QAM,3.0/4.0,6,108,6,1296,972,1,800,243.0},
286 {8,7,-61,Modulation_64_QAM,5.0/6.0,6,108,6,1296,1080,1,800,270.0},
287 {9,8,-56,Modulation_256_QAM,3.0/4.0,8,108,6,1728,1296,1,800,324.0},
288 {10,9,-54,Modulation_256_QAM,5.0/6.0,8,108,6,1728,1440,1,800,360.0},
289 {11,0,-79,Modulation_BPSK,1.0/2.0,1,108,6,216,108,1,400,30.0},
290 {12,1,-76,Modulation_QPSK,1.0/2.0,2,108,6,432,216,1,400,60.0},
291 {13,2,-74,Modulation_QPSK,3.0/4.0,2,108,6,432,324,1,400,90.0},
292 {14,3,-71,Modulation_16_QAM,1.0/2.0,4,108,6,864,432,1,400,120.0},
293 {15,4,-67,Modulation_16_QAM,3.0/4.0,4,108,6,864,648,1,400,180.0},
294 {16,5,-63,Modulation_64_QAM,2.0/3.0,6,108,6,1296,864,1,400,240.0},
295 {17,6,-62,Modulation_64_QAM,3.0/4.0,6,108,6,1296,972,1,400,270.0},
296 {18,7,-61,Modulation_64_QAM,5.0/6.0,6,108,6,1296,1080,1,400,300.0},
297 {19,8,-56,Modulation_256_QAM,3.0/4.0,8,108,6,1728,1296,1,400,360.0},
298 {20,9,-54,Modulation_256_QAM,5.0/6.0,8,108,6,1728,1440,1,400,400.0},
299
300};
301
302static struct stru_802_11_Phy_Parameters_HT struPhyParameters_40MHz_3NSS[20] =
303{
304 //IEEE802.11-HT Phy 40 MHz
305 {1,0,-79,Modulation_BPSK,1.0/2.0,1,108,6,324,162,1,800,40.5},
306 {2,1,-76,Modulation_QPSK,1.0/2.0,2,108,6,648,324,1,800,81.0},
307 {3,2,-74,Modulation_QPSK,3.0/4.0,2,108,6,648,486,1,800,121.5},
308 {4,3,-71,Modulation_16_QAM,1.0/2.0,4,108,6,1296,648,1,800,162.0},
309 {5,4,-67,Modulation_16_QAM,3.0/4.0,4,108,6,1296,972,1,800,243.0},
310 {6,5,-63,Modulation_64_QAM,2.0/3.0,6,108,6,1944,1296,1,800,324.0},
311 {7,6,-62,Modulation_64_QAM,3.0/4.0,6,108,6,1944,1458,1,800,364.5},
312 {8,7,-61,Modulation_64_QAM,5.0/6.0,6,108,6,1944,1620,1,800,405.0},
313 {9,8,-56,Modulation_256_QAM,3.0/4.0,8,108,6,2592,1944,1,800,486.0},
314 {10,9,-54,Modulation_256_QAM,5.0/6.0,8,108,6,2592,2160,1,800,540.0},
315 {11,0,-79,Modulation_BPSK,1.0/2.0,1,108,6,324,162,1,400,45.0},
316 {12,1,-76,Modulation_QPSK,1.0/2.0,2,108,6,648,324,1,400,90.0},
317 {13,2,-74,Modulation_QPSK,3.0/4.0,2,108,6,648,486,1,400,135.0},
318 {14,3,-71,Modulation_16_QAM,1.0/2.0,4,108,6,1296,648,1,400,180.0},
319 {15,4,-67,Modulation_16_QAM,3.0/4.0,4,108,6,1296,972,1,400,270.0},
320 {16,5,-63,Modulation_64_QAM,2.0/3.0,6,108,6,1944,1296,1,400,360.0},
321 {17,6,-62,Modulation_64_QAM,3.0/4.0,6,108,6,1944,1458,1,400,405.5},
322 {18,7,-61,Modulation_64_QAM,5.0/6.0,6,108,6,1944,1620,1,400,450.0},
323 {19,8,-56,Modulation_256_QAM,3.0/4.0,8,108,6,2592,1944,1,400,540.0},
324 {20,9,-54,Modulation_256_QAM,5.0/6.0,8,108,6,2592,2160,1,400,600.0},
325
326};
327
328
329static struct stru_802_11_Phy_Parameters_HT struPhyParameters_40MHz_4NSS[20] =
330{
331 //IEEE802.11-HT Phy 40 MHz
332 {1,0,-79,Modulation_BPSK,1.0/2.0,1,108,6,432,216,1,800,54.0},
333 {2,1,-76,Modulation_QPSK,1.0/2.0,2,108,6,864,432,1,800,108.0},
334 {3,2,-74,Modulation_QPSK,3.0/4.0,2,108,6,864,648,1,800,162.0},
335 {4,3,-71,Modulation_16_QAM,1.0/2.0,4,108,6,1728,864,1,800,216.0},
336 {5,4,-67,Modulation_16_QAM,3.0/4.0,4,108,6,1728,1296,1,800,324.0},
337 {6,5,-63,Modulation_64_QAM,2.0/3.0,6,108,6,2592,1728,1,800,432.0},
338 {7,6,-62,Modulation_64_QAM,3.0/4.0,6,108,6,2592,1944,1,800,486.5},
339 {8,7,-61,Modulation_64_QAM,5.0/6.0,6,108,6,2592,2160,1,800,540.0},
340 {9,8,-56,Modulation_256_QAM,3.0/4.0,8,108,6,3456,2592,2,800,648.0},
341 {10,9,-54,Modulation_256_QAM,5.0/6.0,8,108,6,3456,2880,2,800,720.0},
342 {11,0,-79,Modulation_BPSK,1.0/2.0,1,108,6,432,216,1,400,60.0},
343 {12,1,-76,Modulation_QPSK,1.0/2.0,2,108,6,864,432,1,400,120.0},
344 {13,2,-74,Modulation_QPSK,3.0/4.0,2,108,6,864,648,1,400,180.0},
345 {14,3,-71,Modulation_16_QAM,1.0/2.0,4,108,6,1728,864,1,400,240.0},
346 {15,4,-67,Modulation_16_QAM,3.0/4.0,4,108,6,1728,1296,1,400,360.0},
347 {16,5,-63,Modulation_64_QAM,2.0/3.0,6,108,6,2592,1728,1,400,480.0},
348 {17,6,-62,Modulation_64_QAM,3.0/4.0,6,108,6,2592,1944,1,400,540.0},
349 {18,7,-61,Modulation_64_QAM,5.0/6.0,6,108,6,2592,2160,1,400,600.0},
350 {19,8,-56,Modulation_256_QAM,3.0/4.0,8,108,6,3456,2592,2,400,720.0},
351 {20,9,-54,Modulation_256_QAM,5.0/6.0,8,108,6,3456,2880,2,400,800.0}
352
353};
354
355
356static struct stru_802_11_Phy_Parameters_HT struPhyParameters_40MHz_5NSS[20] =
357{
358 //IEEE802.11-HT Phy 40 MHz
359 {1,0,-79,Modulation_BPSK,1.0/2.0,1,108,6,540,270,1,800,67.5},
360 {2,1,-76,Modulation_QPSK,1.0/2.0,2,108,6,1080,540,1,800,135.0},
361 {3,2,-74,Modulation_QPSK,3.0/4.0,2,108,6,1080,810,1,800,202.5},
362 {4,3,-71,Modulation_16_QAM,1.0/2.0,4,108,6,2160,1080,1,800,270.0},
363 {5,4,-67,Modulation_16_QAM,3.0/4.0,4,108,6,2160,1620,1,800,405.0},
364 {6,5,-63,Modulation_64_QAM,2.0/3.0,6,108,6,3240,2160,1,800,540.0},
365 {7,6,-62,Modulation_64_QAM,3.0/4.0,6,108,6,3240,2430,2,800,607.5},
366 {8,7,-61,Modulation_64_QAM,5.0/6.0,6,108,6,3240,2700,2,800,675.0},
367 {9,8,-56,Modulation_256_QAM,3.0/4.0,8,108,6,4320,3240,2,800,810.0},
368 {10,9,-54,Modulation_256_QAM,5.0/6.0,8,108,6,4320,3600,2,800,900.0},
369 {11,0,-79,Modulation_BPSK,1.0/2.0,1,108,6,540,270,1,400,75.0},
370 {12,1,-76,Modulation_QPSK,1.0/2.0,2,108,6,1080,540,1,400,150.0},
371 {13,2,-74,Modulation_QPSK,3.0/4.0,2,108,6,1080,810,1,400,225.5},
372 {14,3,-71,Modulation_16_QAM,1.0/2.0,4,108,6,2160,1080,1,400,300.0},
373 {15,4,-67,Modulation_16_QAM,3.0/4.0,4,108,6,2160,1620,1,400,450.0},
374 {16,5,-63,Modulation_64_QAM,2.0/3.0,6,108,6,3240,2160,1,400,600.0},
375 {17,6,-62,Modulation_64_QAM,3.0/4.0,6,108,6,3240,2430,2,400,675.0},
376 {18,7,-61,Modulation_64_QAM,5.0/6.0,6,108,6,3240,2700,2,400,750.0},
377 {19,8,-56,Modulation_256_QAM,3.0/4.0,8,108,6,4320,3240,2,400,900.0},
378 {20,9,-54,Modulation_256_QAM,5.0/6.0,8,108,6,4320,3600,2,400,1000.0},
379
380};
381
382static struct stru_802_11_Phy_Parameters_HT struPhyParameters_40MHz_6NSS[20] =
383{
384 //IEEE802.11-HT Phy 40 MHz
385 {1,0,-79,Modulation_BPSK,1.0/2.0,1,108,6,648,324,1,800,81.0},
386 {2,1,-76,Modulation_QPSK,1.0/2.0,2,108,6,1296,648,1,800,162.0},
387 {3,2,-74,Modulation_QPSK,3.0/4.0,2,108,6,1296,972,1,800,243.0},
388 {4,3,-71,Modulation_16_QAM,1.0/2.0,4,108,6,2592,1296,1,800,324.0},
389 {5,4,-67,Modulation_16_QAM,3.0/4.0,4,108,6,2592,1944,1,800,486.0},
390 {6,5,-63,Modulation_64_QAM,2.0/3.0,6,108,6,3888,2592,1,800,648.0},
391 {7,6,-62,Modulation_64_QAM,3.0/4.0,6,108,6,3888,2916,2,800,729.0},
392 {8,7,-61,Modulation_64_QAM,5.0/6.0,6,108,6,3888,3240,2,800,810.0},
393 {9,8,-56,Modulation_256_QAM,3.0/4.0,8,108,6,5184,3888,2,800,972.0},
394 {10,9,-54,Modulation_256_QAM,5.0/6.0,8,108,6,5184,4320,2,800,1080.0},
395 {11,0,-79,Modulation_BPSK,1.0/2.0,1,108,6,648,324,1,400,90.0},
396 {12,1,-76,Modulation_QPSK,1.0/2.0,2,108,6,1296,648,1,400,180.0},
397 {13,2,-74,Modulation_QPSK,3.0/4.0,2,108,6,1296,972,1,400,270.0},
398 {14,3,-71,Modulation_16_QAM,1.0/2.0,4,108,6,2592,1296,1,400,360.0},
399 {15,4,-67,Modulation_16_QAM,3.0/4.0,4,108,6,2592,1944,1,400,540.0},
400 {16,5,-63,Modulation_64_QAM,2.0/3.0,6,108,6,3888,2592,1,400,720.0},
401 {17,6,-62,Modulation_64_QAM,3.0/4.0,6,108,6,3888,2916,2,400,810.0},
402 {18,7,-61,Modulation_64_QAM,5.0/6.0,6,108,6,3888,3240,2,400,900.0},
403 {19,8,-56,Modulation_256_QAM,3.0/4.0,8,108,6,5184,3888,2,400,1080.0},
404 {20,9,-54,Modulation_256_QAM,5.0/6.0,8,108,6,5184,4320,2,400,1200.0}
405
406};
407
408static struct stru_802_11_Phy_Parameters_HT struPhyParameters_40MHz_7NSS[20] =
409{
410 //IEEE802.11-HT Phy 40 MHz
411 {1,0,-79,Modulation_BPSK,1.0/2.0,1,108,6,756,378,1,800,94.5},
412 {2,1,-76,Modulation_QPSK,1.0/2.0,2,108,6,1512,756,1,800,189.0},
413 {3,2,-74,Modulation_QPSK,3.0/4.0,2,108,6,1512,1134,1,800,283.5},
414 {4,3,-71,Modulation_16_QAM,1.0/2.0,4,108,6,3024,1512,1,800,378.0},
415 {5,4,-67,Modulation_16_QAM,3.0/4.0,4,108,6,3024,2268,1,800,567.0},
416 {6,5,-63,Modulation_64_QAM,2.0/3.0,6,108,6,4536,3024,1,800,756.0},
417 {7,6,-62,Modulation_64_QAM,3.0/4.0,6,108,6,4536,3402,2,800,850.5},
418 {8,7,-61,Modulation_64_QAM,5.0/6.0,6,108,6,4536,3780,2,800,945.0},
419 {9,8,-56,Modulation_256_QAM,3.0/4.0,8,108,6,6048,4536,3,800,1134.0},
420 {10,9,-54,Modulation_256_QAM,5.0/6.0,8,108,6,6048,5040,3,800,1260.0},
421 {11,0,-79,Modulation_BPSK,1.0/2.0,1,108,6,756,378,1,400,105.0},
422 {12,1,-76,Modulation_QPSK,1.0/2.0,2,108,6,1512,756,1,400,210.0},
423 {13,2,-74,Modulation_QPSK,3.0/4.0,2,108,6,1512,1134,1,400,315.0},
424 {14,3,-71,Modulation_16_QAM,1.0/2.0,4,108,6,3024,1512,1,400,420.0},
425 {15,4,-67,Modulation_16_QAM,3.0/4.0,4,108,6,3024,2268,1,400,630.0},
426 {16,5,-63,Modulation_64_QAM,2.0/3.0,6,108,6,4536,3024,1,400,840.0},
427 {17,6,-62,Modulation_64_QAM,3.0/4.0,6,108,6,4536,3402,2,400,945.0},
428 {18,7,-61,Modulation_64_QAM,5.0/6.0,6,108,6,4536,3780,2,400,1050.0},
429 {19,8,-56,Modulation_256_QAM,3.0/4.0,8,108,6,6048,4536,3,400,1260.0},
430 {20,9,-54,Modulation_256_QAM,5.0/6.0,8,108,6,6048,5040,3,400,1400.0},
431
432};
433
434static struct stru_802_11_Phy_Parameters_HT struPhyParameters_40MHz_8NSS[20] =
435{
436 //IEEE802.11-HT Phy 40 MHz
437 {1,0,-79,Modulation_BPSK,1.0/2.0,1,108,6,864,432,1,800,108.0},
438 {2,1,-76,Modulation_QPSK,1.0/2.0,2,108,6,1728,864,1,800,216.0},
439 {3,2,-74,Modulation_QPSK,3.0/4.0,2,108,6,1728,1296,1,800,324.0},
440 {4,3,-71,Modulation_16_QAM,1.0/2.0,4,108,6,3456,1728,1,800,432.0},
441 {5,4,-67,Modulation_16_QAM,3.0/4.0,4,108,6,3456,2592,1,800,648.0},
442 {6,5,-63,Modulation_64_QAM,2.0/3.0,6,108,6,5184,3456,1,800,864.0},
443 {7,6,-62,Modulation_64_QAM,3.0/4.0,6,108,6,5184,3888,2,800,972.0},
444 {8,7,-61,Modulation_64_QAM,5.0/6.0,6,108,6,5184,4320,2,800,1080.0},
445 {9,8,-56,Modulation_256_QAM,3.0/4.0,8,108,6,6912,5184,3,800,1296.0},
446 {10,9,-54,Modulation_256_QAM,5.0/6.0,8,108,6,6912,5760,3,800,1440.0},
447 {11,0,-79,Modulation_BPSK,1.0/2.0,1,108,6,864,432,1,400,120.0},
448 {12,1,-76,Modulation_QPSK,1.0/2.0,2,108,6,1728,864,1,400,240.0},
449 {13,2,-74,Modulation_QPSK,3.0/4.0,2,108,6,1728,1296,1,400,360.0},
450 {14,3,-71,Modulation_16_QAM,1.0/2.0,4,108,6,3456,1728,1,400,480.0},
451 {15,4,-67,Modulation_16_QAM,3.0/4.0,4,108,6,3456,2592,1,400,720.0},
452 {16,5,-63,Modulation_64_QAM,2.0/3.0,6,108,6,5184,3456,1,400,960.0},
453 {17,6,-62,Modulation_64_QAM,3.0/4.0,6,108,6,5184,3888,2,400,1080.0},
454 {18,7,-61,Modulation_64_QAM,5.0/6.0,6,108,6,5184,4320,2,400,1200.0},
455 {19,8,-56,Modulation_256_QAM,3.0/4.0,8,108,6,6912,5184,3,400,1440.0},
456 {20,9,-54,Modulation_256_QAM,5.0/6.0,8,108,6,6912,5760,3,400,1600.0},
457
458};
459
460static struct stru_802_11_Phy_Parameters_HT struPhyParameters_80MHz_1NSS[20] =
461{
462 //IEEE802.11-VHT Phy 80 MHz
463 {1,0,-76,Modulation_BPSK,1.0/2.0,1,234,8,234,117,1,800,29.3},
464 {2,1,-73,Modulation_QPSK,1.0/2.0,2,234,8,468,234,1,800,58.5},
465 {3,2,-71,Modulation_QPSK,3.0/4.0,2,264,8,468,351,1,800,87.8},
466 {4,3,-68,Modulation_16_QAM,1.0/2.0,4,234,8,936,468,1,800,117.0},
467 {5,4,-64,Modulation_16_QAM,3.0/4.0,4,234,8,936,702,1,800,175.5},
468 {6,5,-60,Modulation_64_QAM,2.0/3.0,6,234,8,1404,936,1,800,234.0},
469 {7,6,-59,Modulation_64_QAM,3.0/4.0,6,234,8,1404,1053,1,800,263.3},
470 {8,7,-58,Modulation_64_QAM,5.0/6.0,6,234,8,1404,1170,1,800,292.5},
471 {9,8,-53,Modulation_256_QAM,3.0/4.0,8,234,8,1872,1404,1,800,351.0},
472 {10,9,-51,Modulation_256_QAM,5.0/6.0,8,234,8,1872,1560,1,800,390.0},
473 {11,0,-76,Modulation_BPSK,1.0/2.0,1,234,8,234,117,1,400,32.5},
474 {12,1,-73,Modulation_QPSK,1.0/2.0,2,234,8,468,234,1,400,65.0},
475 {13,2,-71,Modulation_QPSK,3.0/4.0,2,264,8,468,351,1,400,97.5},
476 {14,3,-68,Modulation_16_QAM,1.0/2.0,4,234,8,936,468,1,400,130.0},
477 {15,4,-64,Modulation_16_QAM,3.0/4.0,4,234,8,936,702,1,400,195.0},
478 {16,5,-60,Modulation_64_QAM,2.0/3.0,6,234,8,1404,936,1,400,260.0},
479 {17,6,-59,Modulation_64_QAM,3.0/4.0,6,234,8,1404,1053,1,400,292.5},
480 {18,7,-58,Modulation_64_QAM,5.0/6.0,6,234,8,1404,1170,1,400,325.0},
481 {19,8,-53,Modulation_256_QAM,3.0/4.0,8,234,8,1872,1404,1,400,390.0},
482 {20,9,-51,Modulation_256_QAM,5.0/6.0,8,234,8,1872,1560,1,400,433.3},
483
484};
485
486static struct stru_802_11_Phy_Parameters_HT struPhyParameters_80MHz_2NSS[20] =
487{
488 //IEEE802.11-VHT Phy 80 MHz
489 {1,0,-76,Modulation_BPSK,1.0/2.0,1,234,8,468,234,1,800,58.5},
490 {2,1,-73,Modulation_QPSK,1.0/2.0,2,234,8,936,468,1,800,117.0},
491 {3,2,-71,Modulation_QPSK,3.0/4.0,2,264,8,936,702,1,800,175.5},
492 {4,3,-68,Modulation_16_QAM,1.0/2.0,4,234,8,1872,936,1,800,234.0},
493 {5,4,-64,Modulation_16_QAM,3.0/4.0,4,234,8,1872,1404,1,800,351.0},
494 {6,5,-60,Modulation_64_QAM,2.0/3.0,6,234,8,2808,1872,1,800,468.0},
495 {7,6,-59,Modulation_64_QAM,3.0/4.0,6,234,8,2808,2106,1,800,526.5},
496 {8,7,-58,Modulation_64_QAM,5.0/6.0,6,234,8,2808,2340,2,800,585.0},
497 {9,8,-53,Modulation_256_QAM,3.0/4.0,8,234,8,3744,2808,2,800,702.0},
498 {10,9,-51,Modulation_256_QAM,5.0/6.0,8,234,8,3744,3120,2,800,780.0},
499 {11,0,-76,Modulation_BPSK,1.0/2.0,1,234,8,468,234,1,400,65.0},
500 {12,1,-73,Modulation_QPSK,1.0/2.0,2,234,8,936,468,1,400,130.0},
501 {13,2,-71,Modulation_QPSK,3.0/4.0,2,264,8,936,702,1,400,195.0},
502 {14,3,-68,Modulation_16_QAM,1.0/2.0,4,234,8,1872,936,1,400,260.0},
503 {15,4,-64,Modulation_16_QAM,3.0/4.0,4,234,8,1872,1404,1,400,390.0},
504 {16,5,-60,Modulation_64_QAM,2.0/3.0,6,234,8,2808,1872,1,400,520.0},
505 {17,6,-59,Modulation_64_QAM,3.0/4.0,6,234,8,2808,2106,1,400,585.0},
506 {18,7,-58,Modulation_64_QAM,5.0/6.0,6,234,8,2808,2340,2,400,650.0},
507 {19,8,-53,Modulation_256_QAM,3.0/4.0,8,234,8,3744,2808,2,400,780.0},
508 {20,9,-51,Modulation_256_QAM,5.0/6.0,8,234,8,3744,3120,2,400,866.7},
509
510};
511
512static struct stru_802_11_Phy_Parameters_HT struPhyParameters_80MHz_3NSS[20] =
513{
514 //IEEE802.11-VHT Phy 80 MHz
515 {1,0,-76,Modulation_BPSK,1.0/2.0,1,234,8,702,351,1,800,87.8},
516 {2,1,-73,Modulation_QPSK,1.0/2.0,2,234,8,1404,702,1,800,175.5},
517 {3,2,-71,Modulation_QPSK,3.0/4.0,2,264,8,1404,1053,1,800,263.3},
518 {4,3,-68,Modulation_16_QAM,1.0/2.0,4,234,8,2808,1404,1,800,351.0},
519 {5,4,-64,Modulation_16_QAM,3.0/4.0,4,234,8,2808,2106,1,800,526.5},
520 {6,5,-60,Modulation_64_QAM,2.0/3.0,6,264,8,4212,2808,2,800,702.0},
521 {7,6,-59,Modulation_64_QAM,3.0/4.0,6,0,0,0,0,0,0,-1},
522 {8,7,-58,Modulation_64_QAM,5.0/6.0,6,234,8,4212,3510,2,800,877.5},
523 {9,8,-53,Modulation_256_QAM,3.0/4.0,8,234,8,5616,4212,2,800,1053.0},
524 {10,9,-51,Modulation_256_QAM,5.0/6.0,8,234,8,5616,4680,3,800,1170.0},
525 {11,0,-76,Modulation_BPSK,1.0/2.0,1,234,8,702,351,1,400,97.5},
526 {12,1,-73,Modulation_QPSK,1.0/2.0,2,234,8,1404,702,1,400,195.0},
527 {13,2,-71,Modulation_QPSK,3.0/4.0,2,264,8,1404,1053,1,400,292.5},
528 {14,3,-68,Modulation_16_QAM,1.0/2.0,4,234,8,2808,1404,1,400,390.0},
529 {15,4,-64,Modulation_16_QAM,3.0/4.0,4,234,8,2808,2106,1,400,585.0},
530 {16,5,-60,Modulation_64_QAM,2.0/3.0,6,264,8,4212,2808,2,400,780.0},
531 {17,6,-59,Modulation_64_QAM,3.0/4.0,6,0,0,0,0,0,0,-1},
532 {18,7,-58,Modulation_64_QAM,5.0/6.0,6,234,8,4212,3510,2,400,975.0},
533 {19,8,-53,Modulation_256_QAM,3.0/4.0,8,234,8,5616,4212,2,400,1170.0},
534 {20,9,-51,Modulation_256_QAM,5.0/6.0,8,234,8,5616,4680,3,400,1300.0},
535
536};
537
538static struct stru_802_11_Phy_Parameters_HT struPhyParameters_80MHz_4NSS[20] =
539{
540 //IEEE802.11-VHT Phy 80 MHz
541 {1,0,-76,Modulation_BPSK,1.0/2.0,1,234,8,936,468,1,800,117.0},
542 {2,1,-73,Modulation_QPSK,1.0/2.0,2,234,8,1872,936,1,800,234.0},
543 {3,2,-71,Modulation_QPSK,3.0/4.0,2,264,8,1872,1404,1,800,351.0},
544 {4,3,-68,Modulation_16_QAM,1.0/2.0,4,234,8,3744,1872,1,800,468.0},
545 {5,4,-64,Modulation_16_QAM,3.0/4.0,4,234,8,3744,2808,2,800,702.0},
546 {6,5,-60,Modulation_64_QAM,2.0/3.0,6,264,8,5616,3744,2,800,936.0},
547 {7,6,-59,Modulation_64_QAM,3.0/4.0,6,234,8,5616,4212,2,800,1053.0},
548 {8,7,-58,Modulation_64_QAM,5.0/6.0,6,234,8,5616,4680,3,800,1170.0},
549 {9,8,-53,Modulation_256_QAM,3.0/4.0,8,234,8,7488,5616,3,800,1404.0},
550 {10,9,-51,Modulation_256_QAM,5.0/6.0,8,234,8,7488,6240,3,800,1560.0},
551 {11,0,-76,Modulation_BPSK,1.0/2.0,1,234,8,936,468,1,400,130.0},
552 {12,1,-73,Modulation_QPSK,1.0/2.0,2,234,8,1872,936,1,400,260.0},
553 {13,2,-71,Modulation_QPSK,3.0/4.0,2,264,8,1872,1404,1,400,390.0},
554 {14,3,-68,Modulation_16_QAM,1.0/2.0,4,234,8,3744,1872,1,400,520.0},
555 {15,4,-64,Modulation_16_QAM,3.0/4.0,4,234,8,3744,2808,2,400,780.0},
556 {16,5,-60,Modulation_64_QAM,2.0/3.0,6,264,8,5616,3744,2,400,1040.0},
557 {17,6,-59,Modulation_64_QAM,3.0/4.0,6,234,8,5616,4212,2,400,1170.0},
558 {18,7,-58,Modulation_64_QAM,5.0/6.0,6,234,8,5616,4680,3,400,1300.0},
559 {19,8,-53,Modulation_256_QAM,3.0/4.0,8,234,8,7488,5616,3,400,1560.0},
560 {20,9,-51,Modulation_256_QAM,5.0/6.0,8,234,8,7488,6240,3,400,1733.3},
561
562};
563
564static struct stru_802_11_Phy_Parameters_HT struPhyParameters_80MHz_5NSS[20] =
565{
566 //IEEE802.11-VHT Phy 80 MHz
567 {1,0,-76,Modulation_BPSK,1.0/2.0,1,234,8,1170,585,1,800,146.3},
568 {2,1,-73,Modulation_QPSK,1.0/2.0,2,234,8,2340,1170,1,800,292.5},
569 {3,2,-71,Modulation_QPSK,3.0/4.0,2,264,8,2340,1755,1,800,438.8},
570 {4,3,-68,Modulation_16_QAM,1.0/2.0,4,234,8,4680,2340,2,800,585.0},
571 {5,4,-64,Modulation_16_QAM,3.0/4.0,4,234,8,4680,3510,2,800,877.5},
572 {6,5,-60,Modulation_64_QAM,2.0/3.0,6,264,8,7020,4680,3,800,1170.0},
573 {7,6,-59,Modulation_64_QAM,3.0/4.0,6,234,8,7020,5265,3,800,1316.3},
574 {8,7,-58,Modulation_64_QAM,5.0/6.0,6,234,8,7020,5850,3,800,1462.5},
575 {9,8,-53,Modulation_256_QAM,3.0/4.0,8,234,8,9360,7020,4,800,1755.0},
576 {10,9,-51,Modulation_256_QAM,5.0/6.0,8,234,8,9360,7800,4,800,1950.0},
577 {11,0,-76,Modulation_BPSK,1.0/2.0,1,234,8,1170,585,1,400,162.5},
578 {12,1,-73,Modulation_QPSK,1.0/2.0,2,234,8,2340,1170,1,400,325.0},
579 {13,2,-71,Modulation_QPSK,3.0/4.0,2,264,8,2340,1755,1,400,487.5},
580 {14,3,-68,Modulation_16_QAM,1.0/2.0,4,234,8,4680,2340,2,400,650.0},
581 {15,4,-64,Modulation_16_QAM,3.0/4.0,4,234,8,4680,3510,2,400,975.0},
582 {16,5,-60,Modulation_64_QAM,2.0/3.0,6,264,8,7020,4680,3,400,1300.0},
583 {17,6,-59,Modulation_64_QAM,3.0/4.0,6,234,8,7020,5265,3,400,1462.5},
584 {18,7,-58,Modulation_64_QAM,5.0/6.0,6,234,8,7020,5850,3,400,1625.0},
585 {19,8,-53,Modulation_256_QAM,3.0/4.0,8,234,8,9360,7020,4,400,1950.0},
586 {20,9,-51,Modulation_256_QAM,5.0/6.0,8,234,8,9360,7800,4,400,2166.7},
587
588};
589
590static struct stru_802_11_Phy_Parameters_HT struPhyParameters_80MHz_6NSS[20] =
591{
592 //IEEE802.11-VHT Phy 80 MHz
593 {1,0,-76,Modulation_BPSK,1.0/2.0,1,234,8,1404,702,1,800,175.5},
594 {2,1,-73,Modulation_QPSK,1.0/2.0,2,234,8,2808,1404,1,800,351.0},
595 {3,2,-71,Modulation_QPSK,3.0/4.0,2,264,8,2808,2106,1,800,526.5},
596 {4,3,-68,Modulation_16_QAM,1.0/2.0,4,234,8,5616,2808,2,800,702.0},
597 {5,4,-64,Modulation_16_QAM,3.0/4.0,4,234,8,5616,4212,2,800,1053.0},
598 {6,5,-60,Modulation_64_QAM,2.0/3.0,6,264,8,8424,5616,3,800,1404.0},
599 {7,6,-59,Modulation_64_QAM,3.0/4.0,6,234,8,8424,6318,3,800,1579.5},
600 {8,7,-58,Modulation_64_QAM,5.0/6.0,6,234,8,8424,7020,4,800,1755.0},
601 {9,8,-53,Modulation_256_QAM,3.0/4.0,8,234,8,11232,8424,4,800,2106.0},
602 {10,9,-51,Modulation_256_QAM,5.0/6.0,8,0,0,0,0,0,0,-1},//Not valid
603 {11,0,-76,Modulation_BPSK,1.0/2.0,1,234,8,1404,702,1,400,195.0},
604 {12,1,-73,Modulation_QPSK,1.0/2.0,2,234,8,2808,1404,1,400,390.0},
605 {13,2,-71,Modulation_QPSK,3.0/4.0,2,264,8,2808,2106,1,400,585.0},
606 {14,3,-68,Modulation_16_QAM,1.0/2.0,4,234,8,5616,2808,2,400,780.0},
607 {15,4,-64,Modulation_16_QAM,3.0/4.0,4,234,8,5616,4212,2,400,1170.0},
608 {16,5,-60,Modulation_64_QAM,2.0/3.0,6,264,8,8424,5616,3,400,1560.0},
609 {17,6,-59,Modulation_64_QAM,3.0/4.0,6,234,8,8424,6318,3,400,1755.0},
610 {18,7,-58,Modulation_64_QAM,5.0/6.0,6,234,8,8424,7020,4,400,1950.0},
611 {19,8,-53,Modulation_256_QAM,3.0/4.0,8,234,8,11232,8424,4,400,2340.0},
612 {20,9,-51,Modulation_256_QAM,5.0/6.0,8,0,0,0,0,0,0,-1},//Not valid
613
614};
615
616static struct stru_802_11_Phy_Parameters_HT struPhyParameters_80MHz_7NSS[20] =
617{
618 //IEEE802.11-VHT Phy 80 MHz
619 {1,0,-76,Modulation_BPSK,1.0/2.0,1,234,8,1638,819,1,800,204.8},
620 {2,1,-73,Modulation_QPSK,1.0/2.0,2,234,8,3276,1638,1,800,409.5},
621 {3,2,-71,Modulation_QPSK,3.0/4.0,2,264,8,3276,2457,3,800,614.3},
622 {4,3,-68,Modulation_16_QAM,1.0/2.0,4,234,8,6552,3276,2,800,819.0},
623 {5,4,-64,Modulation_16_QAM,3.0/4.0,4,234,8,6552,4914,3,800,1228.5},
624 {6,5,-60,Modulation_64_QAM,2.0/3.0,6,264,8,9828,6552,4,800,1638.0},
625 {7,6,-59,Modulation_64_QAM,3.0/4.0,6,0,0,0,0,0,0,-1},//Not valid
626 {8,7,-58,Modulation_64_QAM,5.0/6.0,6,234,8,9828,8190,6,800,2047.5},
627 {9,8,-53,Modulation_256_QAM,3.0/4.0,8,234,8,13104,9828,6,800,2457.0},
628 {10,9,-51,Modulation_256_QAM,5.0/6.0,8,234,8,13104,10920,6,800,2730},
629 {11,0,-76,Modulation_BPSK,1.0/2.0,1,234,8,1638,819,1,400,227.5},
630 {12,1,-73,Modulation_QPSK,1.0/2.0,2,234,8,3276,1638,1,400,455.0},
631 {13,2,-71,Modulation_QPSK,3.0/4.0,2,264,8,3276,2457,3,400,682.5},
632 {14,3,-68,Modulation_16_QAM,1.0/2.0,4,234,8,6552,3276,2,400,910.0},
633 {15,4,-64,Modulation_16_QAM,3.0/4.0,4,234,8,6552,4914,3,400,1365.0},
634 {16,5,-60,Modulation_64_QAM,2.0/3.0,6,264,8,9828,6552,4,400,1820.0},
635 {17,6,-59,Modulation_64_QAM,3.0/4.0,6,0,0,0,0,0,0,-1},//Not valid
636 {18,7,-58,Modulation_64_QAM,5.0/6.0,6,234,8,9828,8190,6,400,2275.0},
637 {19,8,-53,Modulation_256_QAM,3.0/4.0,8,234,8,13104,9828,6,400,2730.0},
638 {20,9,-51,Modulation_256_QAM,5.0/6.0,8,234,8,13104,10920,6,400,3033.3},
639
640};
641
642static struct stru_802_11_Phy_Parameters_HT struPhyParameters_80MHz_8NSS[20] =
643{
644 //IEEE802.11-VHT Phy 80 MHz
645 {1,0,-76,Modulation_BPSK,1.0/2.0,1,234,8,1872,936,1,800,234.0},
646 {2,1,-73,Modulation_QPSK,1.0/2.0,2,234,8,3744,1872,1,800,468.0},
647 {3,2,-71,Modulation_QPSK,3.0/4.0,2,264,8,3744,2808,2,800,702.0},
648 {4,3,-68,Modulation_16_QAM,1.0/2.0,4,234,8,7488,3744,2,800,936.0},
649 {5,4,-64,Modulation_16_QAM,3.0/4.0,4,234,8,7488,5616,3,800,1404.0},
650 {6,5,-60,Modulation_64_QAM,2.0/3.0,6,264,8,11232,7488,4,800,1872.0},
651 {7,6,-59,Modulation_64_QAM,3.0/4.0,6,234,8,11232,8424,4,800,2106.0},
652 {8,7,-58,Modulation_64_QAM,5.0/6.0,6,234,8,11232,9360,6,800,2340.0},
653 {9,8,-53,Modulation_256_QAM,3.0/4.0,8,234,8,14976,11232,6,800,2808.0},
654 {10,9,-51,Modulation_256_QAM,5.0/6.0,8,234,8,14976,12480,6,800,3120.0},
655 {11,0,-76,Modulation_BPSK,1.0/2.0,1,234,8,1872,936,1,400,260.0},
656 {12,1,-73,Modulation_QPSK,1.0/2.0,2,234,8,3744,1872,1,400,520.0},
657 {13,2,-71,Modulation_QPSK,3.0/4.0,2,264,8,3744,2808,2,400,780.0},
658 {14,3,-68,Modulation_16_QAM,1.0/2.0,4,234,8,7488,3744,2,400,1040.0},
659 {15,4,-64,Modulation_16_QAM,3.0/4.0,4,234,8,7488,5616,3,400,1560.0},
660 {16,5,-60,Modulation_64_QAM,2.0/3.0,6,264,8,11232,7488,4,400,2080.0},
661 {17,6,-59,Modulation_64_QAM,3.0/4.0,6,234,8,11232,8424,4,400,2340.0},
662 {18,7,-58,Modulation_64_QAM,5.0/6.0,6,234,8,11232,9360,6,400,2600.0},
663 {19,8,-53,Modulation_256_QAM,3.0/4.0,8,234,8,14976,11232,6,400,3120.0},
664 {20,9,-51,Modulation_256_QAM,5.0/6.0,8,234,8,14976,12480,6,400,3466.7},
665
666};
667
668static struct stru_802_11_Phy_Parameters_HT struPhyParameters_160MHz_1NSS[20] =
669{
670 //IEEE802.11-VHT Phy 160 MHz
671 {1,0,-73,Modulation_BPSK,1.0/2.0,1,468,16,468,234,1,800,58.5},
672 {2,1,-70,Modulation_QPSK,1.0/2.0,2,468,16,936,468,1,800,117.0},
673 {3,2,-68,Modulation_QPSK,3.0/4.0,2,468,16,936,702,1,800,175.5},
674 {4,3,-65,Modulation_16_QAM,1.0/2.0,4,468,16,1872,936,1,800,234.0},
675 {5,4,-61,Modulation_16_QAM,3.0/4.0,4,468,16,1872,1404,1,800,351.0},
676 {6,5,-57,Modulation_64_QAM,2.0/3.0,6,468,16,2808,1872,1,800,468.0},
677 {7,6,-56,Modulation_64_QAM,3.0/4.0,6,468,16,2808,2106,1,800,526.5},
678 {8,7,-55,Modulation_64_QAM,5.0/6.0,6,268,16,2808,2340,2,800,585.0},
679 {9,8,-50,Modulation_256_QAM,3.0/4.0,8,468,16,3744,2808,2,800,702.0},
680 {10,9,-48,Modulation_256_QAM,5.0/6.0,8,468,16,3744,3120,2,800,780.0},
681 {11,0,-73,Modulation_BPSK,1.0/2.0,1,468,16,468,234,1,400,65.0},
682 {12,1,-70,Modulation_QPSK,1.0/2.0,2,468,16,936,468,1,400,130.0},
683 {13,2,-68,Modulation_QPSK,3.0/4.0,2,468,16,936,702,1,400,195.0},
684 {14,3,-65,Modulation_16_QAM,1.0/2.0,4,468,16,1872,936,1,400,260.0},
685 {15,4,-61,Modulation_16_QAM,3.0/4.0,4,468,16,1872,1404,1,400,390.0},
686 {16,5,-57,Modulation_64_QAM,2.0/3.0,6,468,16,2808,1872,1,400,520.0},
687 {17,6,-56,Modulation_64_QAM,3.0/4.0,6,468,16,2808,2106,1,400,585.0},
688 {18,7,-55,Modulation_64_QAM,5.0/6.0,6,268,16,2808,2340,2,400,650.0},
689 {19,8,-50,Modulation_256_QAM,3.0/4.0,8,468,16,3744,2808,2,400,780.0},
690 {20,9,-48,Modulation_256_QAM,5.0/6.0,8,468,16,3744,3120,2,400,866.7},
691
692};
693
694static struct stru_802_11_Phy_Parameters_HT struPhyParameters_160MHz_2NSS[20] =
695{
696 //IEEE802.11-VHT Phy 160 MHz
697 {1,0,-73,Modulation_BPSK,1.0/2.0,1,468,16,936,468,1,800,117.0},
698 {2,1,-70,Modulation_QPSK,1.0/2.0,2,468,16,1872,936,1,800,234.0},
699 {3,2,-68,Modulation_QPSK,3.0/4.0,2,468,16,1872,1404,1,800,351.0},
700 {4,3,-65,Modulation_16_QAM,1.0/2.0,4,468,16,3744,1872,1,800,468.0},
701 {5,4,-61,Modulation_16_QAM,3.0/4.0,4,468,16,3744,2808,2,800,702.0},
702 {6,5,-57,Modulation_64_QAM,2.0/3.0,6,468,16,5616,3744,2,800,936.0},
703 {7,6,-56,Modulation_64_QAM,3.0/4.0,6,468,16,5616,4212,2,800,1053.0},
704 {8,7,-55,Modulation_64_QAM,5.0/6.0,6,268,16,5616,4680,3,800,1170.0},
705 {9,8,-50,Modulation_256_QAM,3.0/4.0,8,468,16,7488,5616,3,800,1404.0},
706 {10,9,-48,Modulation_256_QAM,5.0/6.0,8,468,16,7488,6240,3,800,1560.0},
707 {11,0,-73,Modulation_BPSK,1.0/2.0,1,468,16,936,468,1,400,130.0},
708 {12,1,-70,Modulation_QPSK,1.0/2.0,2,468,16,1872,936,1,400,260.0},
709 {13,2,-68,Modulation_QPSK,3.0/4.0,2,468,16,1872,1404,1,400,390.0},
710 {14,3,-65,Modulation_16_QAM,1.0/2.0,4,468,16,3744,1872,1,400,520.0},
711 {15,4,-61,Modulation_16_QAM,3.0/4.0,4,468,16,3744,2808,2,400,780.0},
712 {16,5,-57,Modulation_64_QAM,2.0/3.0,6,468,16,5616,3744,2,400,1040.0},
713 {17,6,-56,Modulation_64_QAM,3.0/4.0,6,468,16,5616,4212,2,400,1170.0},
714 {18,7,-55,Modulation_64_QAM,5.0/6.0,6,268,16,5616,4680,3,400,1300.0},
715 {19,8,-50,Modulation_256_QAM,3.0/4.0,9,468,16,7488,5616,3,400,1560.0},
716 {20,9,-48,Modulation_256_QAM,5.0/6.0,8,468,16,7488,6240,3,400,1733.3}
717
718};
719
720static struct stru_802_11_Phy_Parameters_HT struPhyParameters_160MHz_3NSS[20] =
721{
722 //IEEE802.11-VHT Phy 160 MHz
723 {1,0,-73,Modulation_BPSK,1.0/2.0,1,468,16,1404,702,1,800,175.5},
724 {2,1,-70,Modulation_QPSK,1.0/2.0,2,468,16,2808,1404,1,800,351.0},
725 {3,2,-68,Modulation_QPSK,3.0/4.0,2,468,16,2808,2106,1,800,526.5},
726 {4,3,-65,Modulation_16_QAM,1.0/2.0,4,468,16,5616,2808,2,800,702.0},
727 {5,4,-61,Modulation_16_QAM,3.0/4.0,4,468,16,5616,4212,2,800,1053.0},
728 {6,5,-57,Modulation_64_QAM,2.0/3.0,6,468,16,8424,5616,3,800,1404.0},
729 {7,6,-56,Modulation_64_QAM,3.0/4.0,6,468,16,8424,6318,3,800,1579.5},
730 {8,7,-55,Modulation_64_QAM,5.0/6.0,6,268,16,8424,7020,4,800,1755.0},
731 {9,8,-50,Modulation_256_QAM,3.0/4.0,8,468,16,11232,8424,4,800,2106.0},
732 {10,9,-48,Modulation_256_QAM,5.0/6.0,8,0,0,0,0,0,0,-1},//Not valid
733 {11,0,-73,Modulation_BPSK,1.0/2.0,1,468,16,1404,702,1,400,195.0},
734 {12,1,-70,Modulation_QPSK,1.0/2.0,2,468,16,2808,1404,1,400,390.0},
735 {13,2,-68,Modulation_QPSK,3.0/4.0,2,468,16,2808,2106,1,400,585.0},
736 {14,3,-65,Modulation_16_QAM,1.0/2.0,4,468,16,5616,2808,2,400,780.0},
737 {15,4,-61,Modulation_16_QAM,3.0/4.0,4,468,16,5616,4212,2,400,1170.0},
738 {16,5,-57,Modulation_64_QAM,2.0/3.0,6,468,16,8424,5616,3,400,1560.0},
739 {17,6,-56,Modulation_64_QAM,3.0/4.0,6,468,16,8424,6318,3,400,1755.0},
740 {18,7,-55,Modulation_64_QAM,5.0/6.0,6,268,16,8424,7020,4,400,1950.0},
741 {19,8,-50,Modulation_256_QAM,3.0/4.0,8,468,16,11232,8424,4,400,2340.0},
742 {20,9,-48,Modulation_256_QAM,5.0/6.0,8,0,0,0,0,0,0,-1},//Not valid
743
744};
745
746static struct stru_802_11_Phy_Parameters_HT struPhyParameters_160MHz_4NSS[20] =
747{
748 //IEEE802.11-VHT Phy 160 MHz
749 {1,0,-73,Modulation_BPSK,1.0/2.0,1,468,16,1872,936,1,800,234.0},
750 {2,1,-70,Modulation_QPSK,1.0/2.0,2,468,16,3744,1872,1,800,468.0},
751 {3,2,-68,Modulation_QPSK,3.0/4.0,2,468,16,3744,2808,2,800,702.0},
752 {4,3,-65,Modulation_16_QAM,1.0/2.0,4,468,16,7488,3744,2,800,936.0},
753 {5,4,-61,Modulation_16_QAM,3.0/4.0,4,468,16,7488,5616,3,800,1404.0},
754 {6,5,-57,Modulation_64_QAM,2.0/3.0,6,468,16,11232,7488,4,800,1872.0},
755 {7,6,-56,Modulation_64_QAM,3.0/4.0,6,468,16,11232,8424,4,800,2106.0},
756 {8,7,-55,Modulation_64_QAM,5.0/6.0,6,468,16,11232,9360,6,800,2340.0},
757 {9,8,-50,Modulation_256_QAM,3.0/4.0,8,468,16,14976,11232,6,800,2808.0},
758 {10,9,-48,Modulation_256_QAM,5.0/6.0,8,468,16,14976,12480,6,800,3120.0},
759 {11,0,-73,Modulation_BPSK,1.0/2.0,1,468,16,1872,936,1,400,260.0},
760 {12,1,-70,Modulation_QPSK,1.0/2.0,2,468,16,3744,1872,1,400,520.0},
761 {13,2,-68,Modulation_QPSK,3.0/4.0,2,468,16,3744,2808,2,400,780.0},
762 {14,3,-65,Modulation_16_QAM,1.0/2.0,4,468,16,7488,3744,2,400,1040.0},
763 {15,4,-61,Modulation_16_QAM,3.0/4.0,4,468,16,7488,5616,3,400,1560.0},
764 {16,5,-57,Modulation_64_QAM,2.0/3.0,6,468,16,11232,7488,4,400,2080.0},
765 {17,6,-56,Modulation_64_QAM,3.0/4.0,6,468,16,11232,8424,4,400,2340.0},
766 {18,7,-55,Modulation_64_QAM,5.0/6.0,6,468,16,11232,9360,6,400,2600.0},
767 {19,8,-50,Modulation_256_QAM,3.0/4.0,8,468,16,14976,11232,6,400,3120.0},
768 {20,9,-48,Modulation_256_QAM,5.0/6.0,8,468,16,14976,12480,6,400,3466.7},
769
770};
771
772static struct stru_802_11_Phy_Parameters_HT struPhyParameters_160MHz_5NSS[20] =
773{
774 //IEEE802.11-VHT Phy 160 MHz
775 {1,0,-73,Modulation_BPSK,1.0/2.0,1,468,16,2340,1170,1,800,292.5},
776 {2,1,-70,Modulation_QPSK,1.0/2.0,2,468,16,4680,2340,2,800,585.0},
777 {3,2,-68,Modulation_QPSK,3.0/4.0,2,468,16,4680,3510,2,800,877.5},
778 {4,3,-65,Modulation_16_QAM,1.0/2.0,4,468,16,9360,4680,3,800,1170.0},
779 {5,4,-61,Modulation_16_QAM,3.0/4.0,4,468,16,9360,7020,4,800,1755.0},
780 {6,5,-57,Modulation_64_QAM,2.0/3.0,6,468,16,14040,9360,5,800,2340.0},
781 {7,6,-56,Modulation_64_QAM,3.0/4.0,6,468,16,14040,10530,5,800,2632.5},
782 {8,7,-55,Modulation_64_QAM,5.0/6.0,6,468,16,14040,11700,6,800,2925.0},
783 {9,8,-50,Modulation_256_QAM,3.0/4.0,8,468,16,18720,14040,8,800,3510.0},
784 {10,9,-48,Modulation_256_QAM,5.0/6.0,8,468,16,18720,15600,8,800,3900.0},
785 {11,0,-73,Modulation_BPSK,1.0/2.0,1,468,16,2340,1170,1,400,325.0},
786 {12,1,-70,Modulation_QPSK,1.0/2.0,2,468,16,4680,2340,2,400,650.0},
787 {13,2,-68,Modulation_QPSK,3.0/4.0,2,468,16,4680,3510,2,400,975.0},
788 {14,3,-65,Modulation_16_QAM,1.0/2.0,4,468,16,9360,4680,3,400,1300.0},
789 {15,4,-61,Modulation_16_QAM,3.0/4.0,4,468,16,9360,7020,4,400,1950.0},
790 {16,5,-57,Modulation_64_QAM,2.0/3.0,6,468,16,14040,9360,5,400,2600.0},
791 {17,6,-56,Modulation_64_QAM,3.0/4.0,6,468,16,14040,10530,5,400,2925.0},
792 {18,7,-55,Modulation_64_QAM,5.0/6.0,6,468,16,14040,11700,6,400,3250.0},
793 {19,8,-50,Modulation_256_QAM,3.0/4.0,8,468,16,18720,14040,8,400,3900.0},
794 {20,9,-48,Modulation_256_QAM,5.0/6.0,8,468,16,18720,15600,8,400,4333.3},
795
796};
797
798
799static struct stru_802_11_Phy_Parameters_HT struPhyParameters_160MHz_6NSS[20] =
800{
801 //IEEE802.11-VHT Phy 160 MHz
802 {1,0,-73,Modulation_BPSK,1.0/2.0,1,468,16,2808,1404,1,800,351.0},
803 {2,1,-70,Modulation_QPSK,1.0/2.0,2,468,16,5616,2808,2,800,702.0},
804 {3,2,-68,Modulation_QPSK,3.0/4.0,2,468,16,5616,4212,2,800,1053.0},
805 {4,3,-65,Modulation_16_QAM,1.0/2.0,4,468,16,11232,5616,3,800,1404.0},
806 {5,4,-61,Modulation_16_QAM,3.0/4.0,4,468,16,11232,8424,4,800,2106.0},
807 {6,5,-57,Modulation_64_QAM,2.0/3.0,6,468,16,16848,11232,6,800,2808.0},
808 {7,6,-56,Modulation_64_QAM,3.0/4.0,6,468,16,16848,12636,6,800,3159.0},
809 {8,7,-55,Modulation_64_QAM,5.0/6.0,6,468,16,16848,14040,8,800,3510.0},
810 {9,8,-50,Modulation_256_QAM,3.0/4.0,8,468,16,22464,16848,8,800,4212.0},
811 {10,9,-48,Modulation_256_QAM,5.0/6.0,8,468,16,22464,18720,9,800,4680.0},
812 {11,0,-73,Modulation_BPSK,1.0/2.0,1,468,16,2808,1404,1,400,390.0},
813 {12,1,-70,Modulation_QPSK,1.0/2.0,2,468,16,5616,2808,2,400,780.0},
814 {13,2,-68,Modulation_QPSK,3.0/4.0,2,468,16,5616,4212,2,400,1170.0},
815 {14,3,-65,Modulation_16_QAM,1.0/2.0,4,468,16,11232,5616,3,400,1560.0},
816 {15,4,-61,Modulation_16_QAM,3.0/4.0,4,468,16,11232,8424,4,400,2340.0},
817 {16,5,-57,Modulation_64_QAM,2.0/3.0,6,468,16,16848,11232,6,400,3120.0},
818 {17,6,-56,Modulation_64_QAM,3.0/4.0,6,468,16,16848,12636,6,400,3510.0},
819 {18,7,-55,Modulation_64_QAM,5.0/6.0,6,468,16,16848,14040,8,400,3900.0},
820 {19,8,-50,Modulation_256_QAM,3.0/4.0,8,468,16,22464,16848,8,400,4680.0},
821 {20,9,-48,Modulation_256_QAM,5.0/6.0,8,468,16,22464,18720,9,400,5200.0},
822
823};
824
825static struct stru_802_11_Phy_Parameters_HT struPhyParameters_160MHz_7NSS[20] =
826{
827 //IEEE802.11-VHT Phy 160 MHz
828 {1,0,-73,Modulation_BPSK,1.0/2.0,1,468,16,3276,1638,1,800,409.5},
829 {2,1,-70,Modulation_QPSK,1.0/2.0,2,468,16,6552,3276,2,800,819.0},
830 {3,2,-68,Modulation_QPSK,3.0/4.0,2,468,16,6552,4914,3,800,1228.5},
831 {4,3,-65,Modulation_16_QAM,1.0/2.0,4,468,16,13104,6552,4,800,1638.0},
832 {5,4,-61,Modulation_16_QAM,3.0/4.0,4,468,16,13104,9828,6,800,2457.0},
833 {6,5,-57,Modulation_64_QAM,2.0/3.0,6,468,16,19656,13104,7,800,3276.0},
834 {7,6,-56,Modulation_64_QAM,3.0/4.0,6,468,16,19656,14742,7,800,3685.5},
835 {8,7,-55,Modulation_64_QAM,5.0/6.0,6,468,16,19656,16380,9,800,4095.0},
836 {9,8,-50,Modulation_256_QAM,3.0/4.0,8,468,16,26208,19656,12,800,4914.0},
837 {10,9,-48,Modulation_256_QAM,5.0/6.0,8,468,16,26208,21840,12,800,5460.0},
838 {11,0,-73,Modulation_BPSK,1.0/2.0,1,468,16,3276,1638,1,400,455.0},
839 {12,1,-70,Modulation_QPSK,1.0/2.0,2,468,16,6552,3276,2,400,910.0},
840 {13,2,-68,Modulation_QPSK,3.0/4.0,2,468,16,6552,4914,3,400,1365.0},
841 {14,3,-65,Modulation_16_QAM,1.0/2.0,4,468,16,13104,6552,4,400,1820.0},
842 {15,4,-61,Modulation_16_QAM,3.0/4.0,4,468,16,13104,9828,6,400,2730.0},
843 {16,5,-57,Modulation_64_QAM,2.0/3.0,6,468,16,19656,13104,7,400,3640.0},
844 {17,6,-56,Modulation_64_QAM,3.0/4.0,6,468,16,19656,14742,7,400,4095.0},
845 {18,7,-55,Modulation_64_QAM,5.0/6.0,6,468,16,19656,16380,9,400,4550.0},
846 {19,8,-50,Modulation_256_QAM,3.0/4.0,8,468,16,26208,19656,12,400,5460.0},
847 {20,9,-48,Modulation_256_QAM,5.0/6.0,8,468,16,26208,21840,12,400,6066.7},
848
849};
850
851static struct stru_802_11_Phy_Parameters_HT struPhyParameters_160MHz_8NSS[20] =
852{
853 //IEEE802.11-VHT Phy 160 MHz
854 {1,0,-73,Modulation_BPSK,1.0/2.0,1,468,16,3744,1872,1,800,468.0},
855 {2,1,-70,Modulation_QPSK,1.0/2.0,2,468,16,7488,3744,2,800,936.0},
856 {3,2,-68,Modulation_QPSK,3.0/4.0,2,468,16,7488,5616,3,800,1404.0},
857 {4,3,-65,Modulation_16_QAM,1.0/2.0,4,468,16,14976,7488,4,800,1872.0},
858 {5,4,-61,Modulation_16_QAM,3.0/4.0,4,468,16,14976,11232,6,800,2808.0},
859 {6,5,-57,Modulation_64_QAM,2.0/3.0,6,468,16,22464,14976,8,800,3744.0},
860 {7,6,-56,Modulation_64_QAM,3.0/4.0,6,468,16,22464,16848,8,800,4212.0},
861 {8,7,-55,Modulation_64_QAM,5.0/6.0,6,468,16,22464,18720,9,800,4680.0},
862 {9,8,-50,Modulation_256_QAM,3.0/4.0,8,468,16,29952,22464,12,800,5616.0},
863 {10,9,-48,Modulation_256_QAM,5.0/6.0,8,468,16,29952,24960,12,800,6240.0},
864 {11,0,-73,Modulation_BPSK,1.0/2.0,1,468,16,3744,1872,1,400,520.0},
865 {12,1,-70,Modulation_QPSK,1.0/2.0,2,468,16,7488,3744,2,400,1040.0},
866 {13,2,-68,Modulation_QPSK,3.0/4.0,2,468,16,7488,5616,3,400,1560.0},
867 {14,3,-65,Modulation_16_QAM,1.0/2.0,4,468,16,14976,7488,4,400,2080.0},
868 {15,4,-61,Modulation_16_QAM,3.0/4.0,4,468,16,14976,11232,6,400,3120.0},
869 {16,5,-57,Modulation_64_QAM,2.0/3.0,6,468,16,22464,14976,8,400,4160.0},
870 {17,6,-56,Modulation_64_QAM,3.0/4.0,6,468,16,22464,16848,8,400,4680.0},
871 {18,7,-55,Modulation_64_QAM,5.0/6.0,6,468,16,22464,18720,9,400,5200.0},
872 {19,8,-50,Modulation_256_QAM,3.0/4.0,8,468,16,29952,22464,12,400,6240.0},
873 {20,9,-48,Modulation_256_QAM,5.0/6.0,8,468,16,29952,24960,12,400,6933.3},
874
875};
876
877
878// Done till here .....................
879#define MAX_RATE_INDEX_11n_800 7
880#define MAX_RATE_INDEX_11n_400 17
881#define MAX_RATE_INDEX_11ac_800 9
882#define MAX_RATE_INDEX_11ac_400 19
883#define MIN_RATE_INDEX_800 0
884#define MIN_RATE_INDEX_400 10
885
886#define get_max_index_n(phy) phy->nGuardInterval==400?MAX_RATE_INDEX_11n_400:MAX_RATE_INDEX_11n_800
887#define get_max_index_ac(phy) phy->nGuardInterval==400?MAX_RATE_INDEX_11ac_400:MAX_RATE_INDEX_11ac_800
888#define get_max_index(phy) phy->PhyProtocol==IEEE_802_11n?get_max_index_n(phy):get_max_index_ac(phy)
889//#define MIN_RATE_INDEX pstruPhy->NSS==400?MIN_RATE_INDEX_400:MIN_RATE_INDEX_800;
890
891/*
89220.3.21.1 Receiver minimum input sensitivity
893The packet error ratio (PER) shall be less than 10% for a PSDU length of 4096 octets
894*/
895#define TARGET_PEP 0.1
896#define REF_PACKET_SIZE 4096 //Bytes
897
898unsigned int get_ht_phy_max_index(IEEE802_11_PROTOCOL protocol,UINT dGI)
899{
900 switch(protocol)
901 {
902 case IEEE_802_11n:
903 if(dGI==400)
904 return MAX_RATE_INDEX_11n_400;
905 else if(dGI==800)
906 return MAX_RATE_INDEX_11n_800;
907 else
908 fnNetSimError("Unknown Guard Interval %d in %s.",dGI,__FUNCTION__);
909 return 0;
910 case IEEE_802_11ac:
911 if(dGI==400)
912 return MAX_RATE_INDEX_11ac_400;
913 else if(dGI==800)
914 return MAX_RATE_INDEX_11ac_800;
915 else
916 fnNetSimError("Unknown Guard Interval %d in %s.",dGI,__FUNCTION__);
917 return 0;
918 default:
919 fnNetSimError("Unknown phy protocol %d in %s.",protocol,__FUNCTION__);
920 return 0;
921 }
922}
923
924unsigned int get_ht_phy_min_index(IEEE802_11_PROTOCOL protocol,UINT dGI)
925{
926 switch(protocol)
927 {
928 case IEEE_802_11n:
929 if(dGI==400)
930 return MIN_RATE_INDEX_400;
931 else if(dGI==800)
932 return MIN_RATE_INDEX_800;
933 else
934 fnNetSimError("Unknown Guard Interval %d in %s.",dGI,__FUNCTION__);
935 return 0;
936 case IEEE_802_11ac:
937 if(dGI==400)
938 return MIN_RATE_INDEX_400;
939 else if(dGI==800)
940 return MIN_RATE_INDEX_800;
941 else
942 fnNetSimError("Unknown Guard Interval %d in %s.",dGI,__FUNCTION__);
943 return 0;
944 default:
945 fnNetSimError("Unknown phy protocol %d in %s.",protocol,__FUNCTION__);
946 return 0;
947 }
948}
949
950struct stru_802_11_Phy_Parameters_HT* get_phy_parameter_HT(double dChannelBandwidth,UINT NSS)
951{
952 switch((int)dChannelBandwidth)
953 {
954 case 20:
955 switch(NSS)
956 {
957 case 1:
958 return struPhyParameters_20MHz_1NSS;
959 case 2:
960 return struPhyParameters_20MHz_2NSS;
961 case 3:
962 return struPhyParameters_20MHz_3NSS;
963 case 4:
964 return struPhyParameters_20MHz_4NSS;
965 case 5:
966 return struPhyParameters_20MHz_5NSS;
967 case 6:
968 return struPhyParameters_20MHz_6NSS;
969 case 7:
970 return struPhyParameters_20MHz_7NSS;
971 case 8:
972 return struPhyParameters_20MHz_8NSS;
973 default:
974 fnNetSimError("Unknown No: of spatial streams %d in %s\n",NSS,__FUNCTION__);
975 return NULL;
976
977 }
978
979 case 40:
980 switch(NSS)
981 {
982 case 1:
983 return struPhyParameters_40MHz_1NSS;
984 case 2:
985 return struPhyParameters_40MHz_2NSS;
986 case 3:
987 return struPhyParameters_40MHz_3NSS;
988 case 4:
989 return struPhyParameters_40MHz_4NSS;
990 case 5:
991 return struPhyParameters_40MHz_5NSS;
992 case 6:
993 return struPhyParameters_40MHz_6NSS;
994 case 7:
995 return struPhyParameters_40MHz_7NSS;
996 case 8:
997 return struPhyParameters_40MHz_8NSS;
998 default:
999 fnNetSimError("Unknown No: of spatial streams %d in %s\n",NSS,__FUNCTION__);
1000 return NULL;
1001
1002 }
1003 case 80:
1004 switch(NSS)
1005 {
1006 case 1:
1007 return struPhyParameters_80MHz_1NSS;
1008 case 2:
1009 return struPhyParameters_80MHz_2NSS;
1010 case 3:
1011 return struPhyParameters_80MHz_3NSS;
1012 case 4:
1013 return struPhyParameters_80MHz_4NSS;
1014 case 5:
1015 return struPhyParameters_80MHz_5NSS;
1016 case 6:
1017 return struPhyParameters_80MHz_6NSS;
1018 case 7:
1019 return struPhyParameters_80MHz_7NSS;
1020 case 8:
1021 return struPhyParameters_80MHz_8NSS;
1022 default:
1023 fnNetSimError("Unknown No: of spatial streams %d in %s\n",NSS,__FUNCTION__);
1024 return NULL;
1025
1026 }
1027 case 160:
1028 switch(NSS)
1029 {
1030 case 1:
1031 return struPhyParameters_160MHz_1NSS;
1032 case 2:
1033 return struPhyParameters_160MHz_2NSS;
1034 case 3:
1035 return struPhyParameters_160MHz_3NSS;
1036 case 4:
1037 return struPhyParameters_160MHz_4NSS;
1038 case 5:
1039 return struPhyParameters_160MHz_5NSS;
1040 case 6:
1041 return struPhyParameters_160MHz_6NSS;
1042 case 7:
1043 return struPhyParameters_160MHz_7NSS;
1044 case 8:
1045 return struPhyParameters_160MHz_8NSS;
1046 default:
1047 fnNetSimError("Unknown No: of spatial streams %d in %s\n",NSS,__FUNCTION__);
1048 return NULL;
1049
1050 }
1051 default:
1052 fnNetSimError("Unknown channel bandwidth %lf in %s\n",dChannelBandwidth,__FUNCTION__);
1053 return NULL;
1054 }
1055}
1056
1057#define CALCULATE_PARALLEL
1058#ifdef CALCULATE_PARALLEL
1059#include <omp.h>
1060#endif
1061int fn_NetSim_IEEE802_11_HTPhy_UpdateParameter()
1062{
1063#ifdef _RECALCULATE_RX_SENSITIVITY_BASED_ON_PEP_
1064 UINT64 t1, t2;
1065
1066 t1 = GetTickCount64();
1067 fprintf(stderr, "Calculating Bandwidth, NSS, Modulation, Coding Rate, Phy Datarate \n"
1068 "and Receiver sensitivity and populating BER Table for 802.11 HT Phy..\n"
1069 "Please wait as this may take some time..... usually 30s to 1 min\n");
1070
1071 char s[BUFSIZ];
1072 sprintf(s, "%s\\%s", pszIOLogPath, "rx_sensitivity_wlan_HTPhy.csv");
1073 FILE* fp = fopen(s, "w");
1074 fprintf(fp,"Bandwidth,NSS,Modulation,codingRate,Datarate,receiversensitivity\n");
1075
1076#ifdef CALCULATE_PARALLEL
1077 int loop;
1078#pragma omp parallel for num_threads(4)
1079 for (loop = 0; loop < 4; loop++)
1080 {
1081 int b;
1082 int n;
1083 int i;
1084 b = (int)(20 * pow(2, loop));
1085#else
1086 int b;
1087 int n;
1088 int i;
1089 for (b = 20; b <= 160; b*=2)
1090 {
1091#endif
1092 for (n = 1; n <= 8; n++)
1093 {
1094 struct stru_802_11_Phy_Parameters_HT* pht = get_phy_parameter_HT((double)b, n);
1095 for (i = 0; i < 20; i++)
1096 {
1097 if (pht[i].dDataRate > 0)
1098 {
1099 pht[i].dRxSensitivity = calculate_rxpower_by_per(TARGET_PEP, REF_PACKET_SIZE,
1100 pht[i].nModulation,
1101 pht[i].dDataRate/n,
1102 (double)b);
1103#ifdef CALCULATE_PARALLEL
1104 #pragma omp critical
1105#endif
1106 {
1107 fprintf(fp, "%d,%d,%s,%lf,%lf,%lf\n",
1108 b, n,
1109 strPHY_MODULATION[pht[i].nModulation],
1110 pht[i].dCodingRate, pht[i].dDataRate, pht[i].dRxSensitivity);
1111 fflush(fp);
1112 }
1113 }
1114 }
1115
1116 }
1117 }
1118 fclose(fp);
1119 t2 = GetTickCount64();
1120 fprintf(stderr, "Time taken = %lld ms\n", t2 - t1);
1121#endif //_RECALCULATE_RX_SENSITIVITY_BASED_ON_PEP_
1122 return 0;
1123}
1124
1125void fn_NetSim_IEEE802_11_HTPhy_SetEDThreshold(PIEEE802_11_PHY_VAR phy)
1126{
1127 struct stru_802_11_Phy_Parameters_HT *struPhyParameters = get_phy_parameter_HT(phy->dChannelBandwidth, phy->NSS);
1128 int MIN_RATE_INDEX = phy->nGuardInterval == 400 ? MIN_RATE_INDEX_400 : MIN_RATE_INDEX_800;
1129 phy->dEDThreshold = struPhyParameters[MIN_RATE_INDEX].dRxSensitivity + CSRANGEDIFF;
1130}
1131
1132/**
1133~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1134This function is used to set the data rate for a frame. Using this we are
1135calculating the transmission time.
1136Data rate set based on the received power.
1137Select the receiver sensitivity as per below table assigned
1138in PMD_RX_Specification_802_11abgn.c
1139page 1745 Table 20-23—Receiver minimum input level sensitivity 802.11-2012.pdf
1140Page 319 Table 20-22—Receiver minimum input level sensitivity 802.11n-2009.pdf
1141These Data rates are as per table
1142page 345 Table 20-29 to Table 20-36 802.11n-2009.pdf
1143~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1144*/
1145int fn_NetSim_IEEE802_11_HTPhy_DataRate(NETSIM_ID nDeviceId, NETSIM_ID nInterfaceId, NETSIM_ID nReceiverId,NetSim_PACKET* packet,double time)
1146{
1147 int mcs=0;
1148 PIEEE802_11_MAC_VAR mac = IEEE802_11_MAC(nDeviceId,nInterfaceId);
1149 PIEEE802_11_PHY_VAR pstruPhy = IEEE802_11_PHY(nDeviceId,nInterfaceId);
1150 struct stru_802_11_Phy_Parameters_HT *struPhyParameters = get_phy_parameter_HT(pstruPhy->dChannelBandwidth,pstruPhy->NSS);
1151 int MIN_RATE_INDEX = pstruPhy->nGuardInterval==400?MIN_RATE_INDEX_400:MIN_RATE_INDEX_800;
1152
1153 if(mac->rate_adaptationAlgo== RATEADAPTATION_GENERIC)
1154 {
1155 unsigned int index = get_rate_index(nDeviceId,nInterfaceId,nReceiverId);
1156 if(isIEEE802_11_CtrlPacket(packet))
1157 goto CONTROL_RATE;
1158 if(struPhyParameters[index].dDataRate<=0)
1159 index--;
1160 if(nReceiverId)
1161 {
1162 pstruPhy->PHY_TYPE.ofdmPhy_11n.dDataRate = struPhyParameters[index].dDataRate;
1163 pstruPhy->dCurrentRxSensitivity_dbm = struPhyParameters[index].dRxSensitivity;
1164 pstruPhy->PHY_TYPE.ofdmPhy_11n.modulation = struPhyParameters[index].nModulation;
1165 pstruPhy->PHY_TYPE.ofdmPhy_11n.dCodingRate = struPhyParameters[index].dCodingRate;
1166 pstruPhy->PHY_TYPE.ofdmPhy_11n.nNBPSC = struPhyParameters[index].nNBPSC;
1167 mcs = struPhyParameters[index].MCS;
1168 pstruPhy->MCS = mcs;
1169 }
1170 else // Broadcast packets
1171 {
1172 goto BROADCAST_RATE;
1173 }
1174 }
1175 else if(mac->rate_adaptationAlgo== RATEADAPTATION_MINSTREL)
1176 {
1177 struct stru_802_11_Phy_Parameters_HT struPhyParametersi = getTxRate(nDeviceId,nInterfaceId,nReceiverId);
1178 if(isIEEE802_11_CtrlPacket(packet))
1179 goto CONTROL_RATE;
1180 if(struPhyParametersi.dDataRate<=0)
1181 fnNetSimError("Data rate <= 0 in Minstrel.\n");
1182 if(nReceiverId)
1183 {
1184 pstruPhy->PHY_TYPE.ofdmPhy_11n.dDataRate = struPhyParametersi.dDataRate;
1185 pstruPhy->dCurrentRxSensitivity_dbm = struPhyParametersi.dRxSensitivity;
1186 pstruPhy->PHY_TYPE.ofdmPhy_11n.modulation = struPhyParametersi.nModulation;
1187 pstruPhy->PHY_TYPE.ofdmPhy_11n.dCodingRate = struPhyParametersi.dCodingRate;
1188 pstruPhy->PHY_TYPE.ofdmPhy_11n.nNBPSC = struPhyParametersi.nNBPSC;
1189 mcs = struPhyParametersi.MCS;
1190 pstruPhy->MCS = mcs;
1191 pstruPhy->dControlFrameDataRate = struPhyParameters[MIN_RATE_INDEX].dDataRate;
1192 }
1193 else // Broadcast packets
1194 {
1195 goto BROADCAST_RATE;
1196 }
1197 }
1198 else
1199 {
1200 if(nReceiverId)
1201 {
1202 if(isIEEE802_11_CtrlPacket(packet))
1203 {
1204CONTROL_RATE:
1205 pstruPhy->PHY_TYPE.ofdmPhy_11n.dDataRate = struPhyParameters[MIN_RATE_INDEX].dDataRate;
1206 pstruPhy->dCurrentRxSensitivity_dbm = struPhyParameters[MIN_RATE_INDEX].dRxSensitivity;
1207 pstruPhy->PHY_TYPE.ofdmPhy_11n.modulation = struPhyParameters[MIN_RATE_INDEX].nModulation;
1208 pstruPhy->PHY_TYPE.ofdmPhy_11n.dCodingRate = struPhyParameters[MIN_RATE_INDEX].dCodingRate;
1209 pstruPhy->PHY_TYPE.ofdmPhy_11n.nNBPSC = struPhyParameters[MIN_RATE_INDEX].nNBPSC;
1210 pstruPhy->MCS = struPhyParameters[MIN_RATE_INDEX].MCS;
1211 pstruPhy->dControlFrameDataRate = struPhyParameters[MIN_RATE_INDEX].dDataRate;
1212 pstruPhy->MCS = mcs;
1213 }
1214 else
1215 {
1216 NETSIM_ID in = fn_NetSim_Stack_GetConnectedInterface(nDeviceId, nInterfaceId, nReceiverId);
1217
1218 double power = GET_RX_POWER_dbm(nDeviceId, nInterfaceId, nReceiverId, in, time);
1219 int i;
1220 for(i=get_max_index(pstruPhy);i>=MIN_RATE_INDEX;i--)
1221 {
1222 if(struPhyParameters[i].dDataRate<=0)
1223 continue; //Invalid
1224 if(power >= struPhyParameters[i].dRxSensitivity || i==MIN_RATE_INDEX)
1225 {
1226 pstruPhy->PHY_TYPE.ofdmPhy_11n.dDataRate = struPhyParameters[i].dDataRate;
1227 pstruPhy->dCurrentRxSensitivity_dbm = struPhyParameters[i].dRxSensitivity;
1228 pstruPhy->PHY_TYPE.ofdmPhy_11n.modulation = struPhyParameters[i].nModulation;
1229 pstruPhy->PHY_TYPE.ofdmPhy_11n.dCodingRate = struPhyParameters[i].dCodingRate;
1230 pstruPhy->PHY_TYPE.ofdmPhy_11n.nNBPSC = struPhyParameters[i].nNBPSC;
1231 pstruPhy->MCS = struPhyParameters[i].MCS;
1232 pstruPhy->dControlFrameDataRate = struPhyParameters[MIN_RATE_INDEX].dDataRate;
1233 break;
1234 }
1235 }
1236 //FIXED_MCS_DATA_RATE
1237 if (pstruPhy->Fixed_MCS)
1238 {
1239 if (struPhyParameters[MIN_RATE_INDEX + pstruPhy->Fixed_Data_Rate_MCS].dDataRate <= 0)
1240 fnNetSimError("\nInvalid MCS %u detected.\n", struPhyParameters[MIN_RATE_INDEX + pstruPhy->Fixed_Data_Rate_MCS].MCS);
1241
1242 pstruPhy->PHY_TYPE.ofdmPhy_11n.dDataRate = struPhyParameters[MIN_RATE_INDEX + pstruPhy->Fixed_Data_Rate_MCS].dDataRate;
1243 pstruPhy->dCurrentRxSensitivity_dbm = struPhyParameters[MIN_RATE_INDEX + pstruPhy->Fixed_Data_Rate_MCS].dRxSensitivity;
1244 pstruPhy->PHY_TYPE.ofdmPhy_11n.modulation = struPhyParameters[MIN_RATE_INDEX + pstruPhy->Fixed_Data_Rate_MCS].nModulation;
1245 pstruPhy->PHY_TYPE.ofdmPhy_11n.dCodingRate = struPhyParameters[MIN_RATE_INDEX + pstruPhy->Fixed_Data_Rate_MCS].dCodingRate;
1246 pstruPhy->PHY_TYPE.ofdmPhy_11n.nNBPSC = struPhyParameters[MIN_RATE_INDEX + pstruPhy->Fixed_Data_Rate_MCS].nNBPSC;
1247 pstruPhy->MCS = struPhyParameters[MIN_RATE_INDEX + pstruPhy->Fixed_Data_Rate_MCS].MCS;
1248 pstruPhy->dControlFrameDataRate = struPhyParameters[MIN_RATE_INDEX].dDataRate;
1249 }
1250 }
1251 }
1252 else // Broadcast packets
1253 {
1254BROADCAST_RATE:
1255 pstruPhy->PHY_TYPE.ofdmPhy_11n.dDataRate = struPhyParameters[MIN_RATE_INDEX].dDataRate;
1256 pstruPhy->dCurrentRxSensitivity_dbm = struPhyParameters[MIN_RATE_INDEX].dRxSensitivity;
1257 pstruPhy->PHY_TYPE.ofdmPhy_11n.modulation = struPhyParameters[MIN_RATE_INDEX].nModulation;
1258 pstruPhy->PHY_TYPE.ofdmPhy_11n.dCodingRate = struPhyParameters[MIN_RATE_INDEX].dCodingRate;
1259 pstruPhy->PHY_TYPE.ofdmPhy_11n.nNBPSC = struPhyParameters[MIN_RATE_INDEX].nNBPSC;
1260 mcs = struPhyParameters[MIN_RATE_INDEX].MCS;
1261 pstruPhy->MCS = mcs;
1262 pstruPhy->dControlFrameDataRate = struPhyParameters[MIN_RATE_INDEX].dDataRate;
1263 }
1264 }
1265 return 0;
1266}
1267
1268double fn_NetSim_IEEE802_11_HTPhy_getCtrlFrameDataRate(PIEEE802_11_PHY_VAR pstruPhy)
1269{
1270 struct stru_802_11_Phy_Parameters_HT *struPhyParameters = get_phy_parameter_HT(pstruPhy->dChannelBandwidth,pstruPhy->NSS);
1271 int MIN_RATE_INDEX = pstruPhy->nGuardInterval==400?MIN_RATE_INDEX_400:MIN_RATE_INDEX_800;
1272 return struPhyParameters[MIN_RATE_INDEX].dDataRate;
1273}
1274
1275double HTPhy_get_min_rxSensitivity(double bandwidth, UINT NSS)
1276{
1277 struct stru_802_11_Phy_Parameters_HT* struPhyParameters = get_phy_parameter_HT(bandwidth, NSS);
1278 return struPhyParameters[0].dRxSensitivity;
1279}
Data structure for physical layer parameters.