NetSim Source Code Help
Loading...
Searching...
No Matches
OFDMA.c
Go to the documentation of this file.
1#include "main.h"
2#include "802_22.h"
3
4/* Constant Value */
5
6/* Phy Mode- corresponding modulation, coding rate, data rate and spectral effieciency
7 * Source - IEEE802.22-2011, table 202, page 310
8 */
9struct stru_802_22_Phy_Mode struPhyMode[MAX_PHY_MODE] = /* 16 + 1(for 0 mode) */
10{
11 {0,0,0,0,0},
12 {1,Modulation_BPSK,Coding_UNCODED,6,6}, //Used only for CDMA burst
13 {2,Modulation_QPSK,Coding_1_2_REP4,6,6}, //Used only for SCH transmission
14 {3,Modulation_QPSK,Coding_1_2_REP3,6,6}, //Used only for CBP transmission
15 {4,Modulation_QPSK,Coding_1_2_REP2,6,6}, //Used only for FCH transmission
16 {5,Modulation_QPSK,Coding_1_2,4.54,0.76},
17 {6,Modulation_QPSK,Coding_2_3,6.05,1.01},
18 {7,Modulation_QPSK,Coding_3_4,6.81,1.13},
19 {8,Modulation_QPSK,Coding_5_6,7.56,1.26},
20 {9,Modulation_16_QAM,Coding_1_2,9.08,1.51},
21 {10,Modulation_16_QAM,Coding_2_3,12.10,2.02},
22 {11,Modulation_16_QAM,Coding_3_4,13.61,2.27},
23 {12,Modulation_16_QAM,Coding_5_6,15.13,2.52},
24 {13,Modulation_64_QAM,Coding_1_2,13.61,2.27},
25 {14,Modulation_64_QAM,Coding_2_3,18.15,3.03},
26 {15,Modulation_64_QAM,Coding_3_4,20.42,3.40},
27 {16,Modulation_64_QAM,Coding_5_6,22.69,3.78}
28};
29/** The PHY specification is based on an orthogonal frequency division multiple access (OFDMA)
30scheme where information to (downstream) or from (upstream) multiple CPEs are modulated
31on orthogonal subcarriers using Inverse Fourier Transforms. */
33{
34 double dCoding;
35 int nBits;
36 SYMBOL_PARAMETER* pstruSymbol;
37 pstruBSPhy->pstruSymbolParameter = fnpAllocateMemory(1,sizeof *pstruBSPhy->pstruSymbolParameter);
38 pstruSymbol = pstruBSPhy->pstruSymbolParameter;
39 pstruSymbol->nChannelBandwidth = pstruBSPhy->nChannelBandwidth;
40 switch(pstruBSPhy->nChannelBandwidth)
41 {
42 case 6:
43 pstruSymbol->dBasicSamplingFrequency = 6.856;
44 pstruBSPhy->dRTG=561;
45 pstruBSPhy->dTTG=1439;
46 break;
47 case 7:
48 pstruSymbol->dBasicSamplingFrequency = 8;
49 pstruBSPhy->dRTG=1520;
50 pstruBSPhy->dTTG=1680;
51 break;
52 case 8:
53 pstruSymbol->dBasicSamplingFrequency = 9.136;
54 pstruBSPhy->dRTG=2402;
55 pstruBSPhy->dTTG=1918;
56 break;
57 default:
58 pstruSymbol->dBasicSamplingFrequency = 6.856;
59 pstruBSPhy->dRTG=561;
60 pstruBSPhy->dTTG=1439;
61 break;
62 }
63 /* Ref Table 201 page 310 IEEE802.22-2011 */
64 pstruSymbol->nSubcarrierCount = 2048;
65 pstruSymbol->nDataSubCarrierCount = 1440;
66 pstruSymbol->nGuardSubcarrierCount = 368;
67 pstruSymbol->nPilotSubCarrierCount = 240;
68 pstruSymbol->nUsedSubCarrierCount = 1680;
69 pstruSymbol->nSubChannelCount = 60; //Consist of 28 subcarrier ( 24 Data + 4 pilot)
70 pstruSymbol->nOFDMSlots = 60; //1 symbol * 1 subchannel
71
72 pstruSymbol->dIntercarrierSpacing = (pstruSymbol->dBasicSamplingFrequency/pstruSymbol->nSubcarrierCount)*1000000;
73 pstruSymbol->dSubCarrierSpacing = 1000000/pstruSymbol->dIntercarrierSpacing;
74 pstruSymbol->dTimeUnit = (pstruSymbol->dSubCarrierSpacing /pstruSymbol->nSubcarrierCount)*1000;
75
76 pstruBSPhy->dRTG=pstruBSPhy->dRTG*pstruSymbol->dTimeUnit/1000;
77 pstruBSPhy->dTTG=pstruBSPhy->dTTG*pstruSymbol->dTimeUnit/1000;
78
79 switch(pstruBSPhy->nCP)
80 {
81 case B2_00:
82 pstruSymbol->nCP = 4;
83 break;
84 case B2_01:
85 pstruSymbol->nCP = 8;
86 break;
87 case B2_10:
88 pstruSymbol->nCP = 16;
89 break;
90 case B2_11:
91 pstruSymbol->nCP = 32;
92 break;
93 }
94 pstruSymbol->dCPDuration = pstruSymbol->dSubCarrierSpacing/pstruSymbol->nCP;
95 pstruSymbol->dSymbolDuration = pstruSymbol->dSubCarrierSpacing + pstruSymbol->dCPDuration;
96
97 //Calculate number of bits per symbol
98 switch(pstruBSPhy->nCodingRate)
99 {
100 case Coding_1_2:
101 case Coding_1_2_REP2:
102 case Coding_1_2_REP3:
103 case Coding_1_2_REP4:
104 dCoding = 1/2.0;
105 break;
106 case Coding_2_3:
107 dCoding = 2/3.0;
108 break;
109 case Coding_3_4:
110 dCoding = 3/4.0;
111 break;
112 case Coding_5_6:
113 dCoding = 5/6.0;
114 break;
115 default:
116 dCoding = 1/2.0;
117 break;
118 }
119 switch(pstruBSPhy->nModulation)
120 {
121 case Modulation_BPSK:
122 nBits = 1;
123 break;
124 case Modulation_QPSK:
125 nBits = 2;
126 break;
128 nBits = 4;
129 break;
131 nBits = 6;
132 break;
133 default:
134 nBits = 2;
135 break;
136 }
137 pstruSymbol->nBitsCountInOneSymbol = (int)(pstruSymbol->nDataSubCarrierCount*nBits*dCoding);
138 pstruSymbol->nBitsCountInOneSlot = pstruSymbol->nBitsCountInOneSymbol/pstruSymbol->nOFDMSlots;
139 pstruSymbol->dDataRate = pstruSymbol->nBitsCountInOneSymbol/pstruSymbol->dSymbolDuration;
140 {
141 double dDLTime = (10000-pstruBSPhy->dTTG-pstruBSPhy->dRTG)*pstruBSPhy->dDlUlRatio;//Approximation: We have considered TTG as a part of US subframe & Us subframe ~ US subframe + TTG
142 double dULTime = (10000-pstruBSPhy->dTTG-pstruBSPhy->dRTG) - dDLTime;
143 pstruSymbol->nDownLinkSymbol = (int)(dDLTime/pstruSymbol->dSymbolDuration);
144 pstruSymbol->nUPlinkSymbol = (int)(dULTime/pstruSymbol->dSymbolDuration);// This includes a symbol, BW, ranging etc
145 }
146 //pstruSymbol->nUPlinkFrameStartSymbol = pstruSymbol->nDownLinkSymbol + (int)ceil(pstruBSPhy->dTTG/pstruSymbol->dSymbolDuration);
147 pstruSymbol->nUPlinkFrameStartSymbol = pstruSymbol->nDownLinkSymbol ;
148 return 1;
149}
150
#define MAX_PHY_MODE
Definition: 802_22.h:128
#define B2_11
Definition: 802_22.h:28
#define B2_10
Definition: 802_22.h:27
#define B2_01
Definition: 802_22.h:26
@ Coding_1_2_REP4
Definition: 802_22.h:241
@ Coding_3_4
Definition: 802_22.h:246
@ Coding_1_2
Definition: 802_22.h:244
@ Coding_1_2_REP3
Definition: 802_22.h:242
@ Coding_2_3
Definition: 802_22.h:245
@ Coding_UNCODED
Definition: 802_22.h:240
@ Coding_1_2_REP2
Definition: 802_22.h:243
@ Coding_5_6
Definition: 802_22.h:247
#define B2_00
Definition: 802_22.h:25
#define fnpAllocateMemory(count, size)
Definition: Memory.h:34
struct stru_802_22_Phy_Mode struPhyMode[MAX_PHY_MODE]
Definition: OFDMA.c:9
int fn_NetSim_Init_OFDMA(BS_PHY *pstruBSPhy)
Definition: OFDMA.c:32
@ Modulation_BPSK
Definition: Wireless.h:35
@ Modulation_64_QAM
Definition: Wireless.h:40
@ Modulation_QPSK
Definition: Wireless.h:36
@ Modulation_16_QAM
Definition: Wireless.h:38
double dDlUlRatio
Definition: 802_22.h:853
double dTTG
Transmit Transition Gap. 105-333 micro sec. default 210 microsec.
Definition: 802_22.h:851
unsigned int nCP
Definition: 802_22.h:838
CODING_RATE nCodingRate
Definition: 802_22.h:835
PHY_MODULATION nModulation
Definition: 802_22.h:834
double dRTG
Receive Transition Gap.
Definition: 802_22.h:852
SYMBOL_PARAMETER * pstruSymbolParameter
Definition: 802_22.h:854
unsigned int nChannelBandwidth
! Minimum frequency >=54 MHz
Definition: 802_22.h:832
double dIntercarrierSpacing
Inter carrier spacing ^f (Hz) = Fs/2048 Hz.
Definition: 802_22.h:956
int nCP
Symbol duration.
Definition: 802_22.h:962
int nBitsCountInOneSymbol
Data subCarrier count*Bits based on modulation * coding rate.
Definition: 802_22.h:985
unsigned int nUPlinkFrameStartSymbol
Definition: 802_22.h:990
unsigned int nUPlinkSymbol
Definition: 802_22.h:988
unsigned int nDownLinkSymbol
Definition: 802_22.h:989
double dDataRate
Number of uncoded bits/OFDM symbol duration.
Definition: 802_22.h:987
int nUsedSubCarrierCount
Used Sub-carrier count Nt = 1680.
Definition: 802_22.h:974
int nDataSubCarrierCount
Data Sub-carrier count Nd = 1440.
Definition: 802_22.h:976
int nOFDMSlots
OFDM Slot = 1 symbol * 1 subChannel.
Definition: 802_22.h:982
int nChannelBandwidth
Channel Bandwidth in MHz.
Definition: 802_22.h:951
double dSubCarrierSpacing
Sub carrier spacing Tfft (micro sec) = 1/^f.
Definition: 802_22.h:958
double dTimeUnit
Time Unit TU = Tfft/2048.
Definition: 802_22.h:960
double dSymbolDuration
Tsym = Tfft + Tcp in microsec.
Definition: 802_22.h:966
int nPilotSubCarrierCount
Pilot Sub-carrier count Np = 240.
Definition: 802_22.h:978
int nGuardSubcarrierCount
Guard Sub-carrier count Ng = 368.
Definition: 802_22.h:972
double dBasicSamplingFrequency
Sampling Frequency Fs (in MHz)
Definition: 802_22.h:954
double dCPDuration
Tcp In micro sec.
Definition: 802_22.h:964