-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathphy-stats-calculator.h
250 lines (205 loc) · 7.07 KB
/
phy-stats-calculator.h
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation;
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Author: Jaume Nin <jnin@cttc.es>
*/
#ifndef PHY_STATS_CALCULATOR_H_
#define PHY_STATS_CALCULATOR_H_
#include "ns3/lte-stats-calculator.h"
#include "ns3/nstime.h"
#include "ns3/uinteger.h"
#include "ns3/spectrum-value.h"
#include <string>
#include <fstream>
#include <ns3/traced-callback.h>
namespace ns3 {
/**
* \ingroup lte
*
* Takes care of storing the information generated at PHY layer. Metrics saved are:
* - RSRP and average SINR for DL
* - Timestamp (in seconds)
* - IMSI
* - C-RNTI
* - RSRP
* - SINR
* - UE SINR
* - Timestamp (in seconds)
* - Cell ID of the reported Enb
* - IMSI
* - C-RNTI
* - measured and reported SINR value in linear
* - Interference for UL
* - Cell ID of the reported Enb
* - IMSI of the scheduled UE
* - C-RNTI scheduled
* - Measured interference for each RB
*/
class PhyStatsCalculator : public LteStatsCalculator
{
public:
/**
* Constructor
*/
PhyStatsCalculator ();
/**
* Destructor
*/
virtual ~PhyStatsCalculator ();
// Inherited from ns3::Object
/**
* Register this type.
* @return The object TypeId.
*/
static TypeId GetTypeId (void);
/**
* Set the name of the file where the RSRP/SINR statistics will be stored.
*
* @param filename string with the name of the file
*/
void SetCurrentCellRsrpSinrFilename (std::string filename);
/**
* Get the name of the file where the RSRP/SINR statistics will be stored.
* @return the name of the file where the RSRP/SINR statistics will be stored
*/
std::string GetCurrentCellRsrpSinrFilename (void);
/**
* Set the name of the file where the UE SINR statistics will be stored.
*
* @param filename string with the name of the file
*/
void SetUeSinrFilename (std::string filename);
/**
* Get the name of the file where the UE SINR statistics will be stored.
* @return the name of the file where the UE SINR statistics will be stored
*/
std::string GetUeSinrFilename (void);
/**
* Set the name of the file where the interference statistics will be stored.
*
* @param filename string with the name of the file
*/
void SetInterferenceFilename (std::string filename);
/**
* Get the name of the file where the interference statistics will be stored.
* @return the name of the file where the interference statistics will be stored
*/
std::string GetInterferenceFilename (void);
/**
* Notifies the stats calculator that an RSRP and SINR report has occurred.
* @param cellId CellId for which stats are generated
* @param imsi IMSI of the scheduled UE
* @param rnti C-RNTI scheduled
* @param rsrp Reference Signal Received Power
* @param sinr SINR averaged among RBs
*/
void ReportCurrentCellRsrpSinr (uint16_t cellId, uint64_t imsi, uint16_t rnti, double rsrp, double sinr);
/**
* Notifies the stats calculator that an UE SINR report has occurred.
* @param cellId Cell ID of the reported Enb
* @param imsi IMSI of the scheduled UE
* @param rnti C-RNTI scheduled
* @param sinrLinear measured and reported SINR value in linear
*/
void ReportUeSinr (uint16_t cellId, uint64_t imsi, uint16_t rnti, double sinrLinear);
/**
* Notifies the stats calculator that an interference report has occurred.
* @param cellId Cell ID of the reported Enb
* @param interference Measured interference for each RB
*/
void ReportInterference (uint16_t cellId, Ptr<SpectrumValue> interference);
/**
* trace sink
*
* \param phyStats
* \param path
* \param cellId
* \param rnti
* \param rsrp
* \param sinr
*/
static void ReportCurrentCellRsrpSinrCallback (Ptr<PhyStatsCalculator> phyStats,
std::string path, uint16_t cellId, uint16_t rnti,
double rsrp, double sinr);
/**
* trace sink
*
* \param phyStats
* \param path
* \param cellId
* \param rnti
* \param sinrLinear
*/
static void ReportUeSinr (Ptr<PhyStatsCalculator> phyStats, std::string path,
uint16_t cellId, uint16_t rnti, double sinrLinear);
/**
* trace sink
*
* \param phyStats
* \param path
* \param cellId
* \param interference
*/
static void ReportInterference (Ptr<PhyStatsCalculator> phyStats, std::string path,
uint16_t cellId, Ptr<SpectrumValue> interference);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
TracedCallback<double, uint64_t, uint16_t, double> m_SinrTrace;
typedef void (* SinrCallback)
(double time, uint64_t imsi, uint16_t cellId, double sinr);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
TracedCallback<double, uint64_t, uint16_t, double> m_SinrEnbTrace;
typedef void (* SinrEnbCallback)
(double time, uint64_t imsi, uint16_t cellId, double sinr);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
private:
/**
* When writing RSRP SINR statistics first time to file,
* columns description is added. Then next lines are
* appended to file. This value is true if output
* files have not been opened yet
*/
bool m_RsrpSinrFirstWrite;
/**
* When writing UE SINR statistics first time to file,
* columns description is added. Then next lines are
* appended to file. This value is true if output
* files have not been opened yet
*/
bool m_UeSinrFirstWrite;
/**
* When writing interference statistics first time to file,
* columns description is added. Then next lines are
* appended to file. This value is true if output
* files have not been opened yet
*/
bool m_InterferenceFirstWrite;
/**
* Name of the file where the RSRP/SINR statistics will be saved
*/
std::string m_RsrpSinrFilename;
/**
* Name of the file where the UE SINR statistics will be saved
*/
std::string m_ueSinrFilename;
/**
* Name of the file where the interference statistics will be saved
*/
std::string m_interferenceFilename;
};
} // namespace ns3
#endif /* PHY_STATS_CALCULATOR_H_ */