25#include "IEEE802_11.h"
26#include "IEEE802_11_Phy.h"
35void fn_NetSim_IEEE802_11n_OFDM_MIMO_init(NETSIM_ID nDeviceId,NETSIM_ID nInterfaceId)
39 PIEEE802_11_PHY_VAR phy = IEEE802_11_PHY(nDeviceId,nInterfaceId);
43 if(phy->dChannelBandwidth == 20)
45 phy->PHY_TYPE.ofdmPhy_11n.nCH_BANDWIDTH = HT_CBW20;
46 phy->PHY_TYPE.ofdmPhy_11n.
nNSD = 52;
47 phy->PHY_TYPE.ofdmPhy_11n.
nNSP = 4;
48 phy->PHY_TYPE.ofdmPhy_11n.
nNST = 56;
49 phy->PHY_TYPE.ofdmPhy_11n.
nNSR = 28;
50 phy->PHY_TYPE.ofdmPhy_11n.
nFFT = 64;
54 phy->PHY_TYPE.ofdmPhy_11n.nCH_BANDWIDTH = HT_CBW40;
55 phy->PHY_TYPE.ofdmPhy_11n.
nNSD = 108;
56 phy->PHY_TYPE.ofdmPhy_11n.
nNSP = 6;
57 phy->PHY_TYPE.ofdmPhy_11n.
nNST = 114;
58 phy->PHY_TYPE.ofdmPhy_11n.
nNSR = 58;
59 phy->PHY_TYPE.ofdmPhy_11n.
nFFT = 128;
63 phy->PHY_TYPE.ofdmPhy_11n.
dDeltaF = phy->dChannelBandwidth/ (phy->PHY_TYPE.ofdmPhy_11n.
nFFT * 1.0);
64 phy->PHY_TYPE.ofdmPhy_11n.
dTDFT = 3.2;
65 phy->PHY_TYPE.ofdmPhy_11n.
dTGI = phy->PHY_TYPE.ofdmPhy_11n.
dTDFT/4;
66 phy->PHY_TYPE.ofdmPhy_11n.
dTGI2 = phy->PHY_TYPE.ofdmPhy_11n.
dTGI * 2;
67 phy->PHY_TYPE.ofdmPhy_11n.
dTGIS = phy->PHY_TYPE.ofdmPhy_11n.
dTDFT/8;
68 phy->PHY_TYPE.ofdmPhy_11n.
nTL_STF = 8;
70 phy->PHY_TYPE.ofdmPhy_11n.
nTL_LTF = 8;
71 phy->PHY_TYPE.ofdmPhy_11n.
dTSYM = 4.0;
72 phy->PHY_TYPE.ofdmPhy_11n.
dTSYMS = 3.6;
73 phy->PHY_TYPE.ofdmPhy_11n.
nTL_SIG = 4;
74 phy->PHY_TYPE.ofdmPhy_11n.
nTHT_SIG = 8;
75 phy->PHY_TYPE.ofdmPhy_11n.
nTHT_STF = 4;
79 if(phy->nGuardInterval == 400)
80 phy->PHY_TYPE.ofdmPhy_11n.nGI_TYPE = SHORT_GI;
82 phy->PHY_TYPE.ofdmPhy_11n.nGI_TYPE = LONG_GI;
85 phy->PHY_TYPE.ofdmPhy_11n.nSTBC = 0;
87 phy->NSS = min((phy->nNTX < phy->nNRX ? phy->nNTX: phy->nNRX),nNSS_MAX);
90 phy->NSTS = min(phy->NSS + phy->PHY_TYPE.ofdmPhy_11n.nSTBC,nNSTS_MAX);
93 phy->N_HT_DLTF = phy->NSTS;
98 phy->NESS = nNSTS_MAX - phy->NSTS;
101 phy->N_HT_ELTF = phy->NESS;
106 phy->N_HT_LTF = phy->N_HT_DLTF + phy->N_HT_ELTF;
107 if(phy->N_HT_LTF > 5)
110 phy->dControlFrameDataRate = fn_NetSim_IEEE802_11_HTPhy_getCtrlFrameDataRate(phy);
111 phy->dBroadcastFrameDataRate= fn_NetSim_IEEE802_11_HTPhy_getCtrlFrameDataRate(phy);
114double get_11n_preamble_time(PIEEE802_11_PHY_VAR phy)
116 double dTGF_HT_PREAMBLE;
117 int nSignalExtension = 0;
119 dTGF_HT_PREAMBLE = phy->PHY_TYPE.ofdmPhy_11n.
nTHT_GF_STF \
121 + ((phy->N_HT_LTF - 1) * phy->PHY_TYPE.ofdmPhy_11n.
nTHT_LTFs);
123 return dTGF_HT_PREAMBLE +
124 phy->PHY_TYPE.ofdmPhy_11n.
nTHT_SIG +
int nTHT_STF
HT short training field duration 4.
int nNSR
NSR Highest data subcarrier index.
double dTGI2
Double guard interval 1.6.
int nTHT_LTF1
First HT long training field duration 4 in HT-mixed format, 8 in HTgreenfield format.
double dTGI
Guard interval duration 0.8 = TDFT/4.
double dTSYM
TSYM: Symbol interval 4 = TDFT + TGI.
int nNSD
NSD Number of complex data numbers.
int nNST
NST Total number of subcarriers.
double dDeltaF
dSubcarrierFrequencySpacing; // 312.5KHz (20 MHz/64) or (40 MHz/128)
int nTL_STF
Non-HT short training sequence duration 8 = 10*TDFT/4.
int nNSP
NSP Number of pilot values.
double dTGIS
Short guard interval duration dDFT/8 0.4.
double dTSYMS
dShortGIsymbolInterval; // TSYMS: Short GI symbol interval N/A 3.6 = TDFT+TGIS 3.6
int nTHT_SIG
HT SIGNAL field duration 8 = 2TSYM 8.
int nTHT_GF_STF
HT-greenfield short training field duration 8 =10* TDFT/4.
int nTL_LTF
Non-HT long training field duration 8 =2 * TDFT + TGI2.
int nTHT_LTFs
Second, and subsequent, HT long training fields duration 4.
double dTDFT
IDFT/DFT period 3.2.
int nTL_SIG
Non-HT SIGNAL field duration 4.