LteFeedback.h Source File

Simu5G: LteFeedback.h Source File
Simu5G
LteFeedback.h
1//
2// Simu5G
3//
4// Copyright (C) 2012-2021 Giovanni Nardini, Giovanni Stea, Antonio Virdis et al. (University of Pisa)
5// Copyright (C) 2022-2026 Giovanni Nardini, Giovanni Stea et al. (University of Pisa)
6//
7// This file is part of a software released under the license included in file
8// "license.pdf". Please read LICENSE and README files before using it.
9// The above files and the present reference are part of the software itself,
10// and cannot be removed from it.
11//
12
13#ifndef _LTE_LTEFEEDBACK_H_
14#define _LTE_LTEFEEDBACK_H_
15
16#include <map>
17#include <vector>
18
19#include "simu5g/common/LteCommon.h"
20#include "simu5g/stack/mac/amc/UserTxParams.h"
21#include "simu5g/stack/phy/feedback/LteSummaryFeedback.h"
22
23namespace simu5g {
24
25class LteFeedback;
26typedef std::vector<LteFeedback> LteFeedbackVector;
27typedef std::vector<LteFeedbackVector> LteFeedbackDoubleVector;
28
31{
32 protected:
34 enum
35 {
36 EMPTY = 0x0000,
37 RANK_INDICATION = 0x0001,
38 WB_CQI = 0x0002,
39 WB_PMI = 0x0004, // unused, PMI not modeled
40 BAND_CQI = 0x0008,
41 BAND_PMI = 0x0010, // unused, PMI not modeled
42 PREFERRED_CQI = 0x0020,
43 PREFERRED_PMI = 0x0040 // unused, PMI not modeled
44 };
45
48
50 CqiVector wideBandCqi_;
51
53 std::vector<CqiVector> perBandCqi_;
54
56 CqiVector preferredCqi_;
59
61 unsigned int status_ = EMPTY;
63 TxMode txMode_ = UNKNOWN_TX_MODE;
64
66 bool periodicFeedback_ = true;
68 Remote remoteAntennaId_ = MACRO;
69
70 public:
71
73
75 void reset();
76
78 bool isEmptyFeedback() const
79 {
80 return txMode_ == UNKNOWN_TX_MODE || status_ == EMPTY;
81 }
82
84 bool isPeriodicFeedback() const
85 {
86 return periodicFeedback_;
87 }
88
90 bool hasRankIndicator() const
91 {
92 return status_ & RANK_INDICATION;
93 }
94
95 bool hasWbCqi() const
96 {
97 return status_ & WB_CQI;
98 }
99
100 bool hasBandCqi() const
101 {
102 return status_ & BAND_CQI;
103 }
104
105 bool hasPreferredCqi() const
106 {
107 return status_ & PREFERRED_CQI;
108 }
109
110 // **************** GETTERS ****************
113 {
114 return rank_;
115 }
116
118 CqiVector getWbCqi() const
119 {
120 return wideBandCqi_;
121 }
122
125 {
126 return wideBandCqi_[cw];
127 }
128
129
131 std::vector<CqiVector> getBandCqi() const
132 {
133 return perBandCqi_;
134 }
135
137 CqiVector getBandCqi(Codeword cw) const
138 {
139 return perBandCqi_[cw];
140 }
141
142
144 CqiVector getPreferredCqi() const
145 {
146 return preferredCqi_;
147 }
148
151 {
152 return preferredCqi_[cw];
153 }
154
155
157 BandSet getPreferredBands() const
158 {
159 return preferredBands_;
160 }
161
163 TxMode getTxMode() const
164 {
165 return txMode_;
166 }
167
169 Remote getAntennaId() const
170 {
171 return remoteAntennaId_;
172 }
173
174 // *****************************************
175
176 // **************** SETTERS ****************
178 void setRankIndicator(const Rank rank)
179 {
180 rank_ = rank;
181 status_ |= RANK_INDICATION;
182 }
183
185 void setWideBandCqi(const CqiVector wbCqi)
186 {
187 wideBandCqi_ = wbCqi;
188 status_ |= WB_CQI;
189 }
190
192 void setWideBandCqi(const Cqi cqi, const Codeword cw)
193 {
194 if (wideBandCqi_.size() == cw)
195 wideBandCqi_.push_back(cqi);
196 else
197 wideBandCqi_[cw] = cqi;
198
199 status_ |= WB_CQI;
200 }
201
202
204 void setPerBandCqi(const std::vector<CqiVector> bandCqi)
205 {
206 perBandCqi_ = bandCqi;
207 status_ |= BAND_CQI;
208 }
209
211 void setPerBandCqi(const CqiVector bandCqi, const Codeword cw)
212 {
213 if (perBandCqi_.size() == cw)
214 perBandCqi_.push_back(bandCqi);
215 else
216 perBandCqi_[cw] = bandCqi;
217
218 status_ |= BAND_CQI;
219 }
220
221
223 void setPreferredCqi(const CqiVector preferredCqi)
224 {
225 preferredCqi_ = preferredCqi;
226 status_ |= PREFERRED_CQI;
227 }
228
230 void setPreferredCqi(const Cqi preferredCqi, const Codeword cw)
231 {
232 if (preferredCqi_.size() == cw)
233 preferredCqi_.push_back(preferredCqi);
234 else
235 preferredCqi_[cw] = preferredCqi;
236
237 status_ |= PREFERRED_CQI;
238 }
239
240
242 void setPreferredBands(const BandSet preferredBands)
243 {
244 preferredBands_ = preferredBands;
245 }
246
248 void setTxMode(const TxMode txMode)
249 {
250 txMode_ = txMode;
251 }
252
254 void setAntenna(const Remote antenna)
255 {
256 remoteAntennaId_ = antenna;
257 }
258
260 void setPeriodicity(const bool type)
261 {
262 periodicFeedback_ = type;
263 }
264
265 // *****************************************
266
273 void print(MacCellId cellId, MacNodeId nodeId, Direction dir, const char *s) const;
274};
275
276} //namespace
277
278#endif
LTE feedback message exchanged between PHY and AMC.
Definition LteFeedback.h:31
CqiVector getWbCqi() const
Get the wide-band CQI. Does not check if valid.
Definition LteFeedback.h:118
void setTxMode(const TxMode txMode)
Set the transmission mode.
Definition LteFeedback.h:248
TxMode txMode_
Current transmission mode.
Definition LteFeedback.h:63
bool hasRankIndicator() const
check existence of elements
Definition LteFeedback.h:90
Rank getRankIndicator() const
Get the rank indication. Does not check if valid.
Definition LteFeedback.h:112
void setAntenna(const Remote antenna)
Definition LteFeedback.h:254
std::vector< CqiVector > perBandCqi_
Per-band CQI. (bandCqi_[cw][band])
Definition LteFeedback.h:53
Cqi getWbCqi(Codeword cw) const
Get the wide-band CQI for one codeword. Does not check if valid.
Definition LteFeedback.h:124
bool isPeriodicFeedback() const
Return true if it is periodic.
Definition LteFeedback.h:84
CqiVector wideBandCqi_
Wide-band CQI, one per codeword.
Definition LteFeedback.h:50
void setPerBandCqi(const CqiVector bandCqi, const Codeword cw)
Set the per-band CQI for one codeword. Does not check if valid.
Definition LteFeedback.h:211
CqiVector getPreferredCqi() const
Get the per preferred band CQI. Does not check if valid.
Definition LteFeedback.h:144
void setPreferredCqi(const CqiVector preferredCqi)
Set the per preferred band CQI.
Definition LteFeedback.h:223
Remote getAntennaId() const
Definition LteFeedback.h:169
TxMode getTxMode() const
Get the transmission mode.
Definition LteFeedback.h:163
bool isEmptyFeedback() const
Return true if feedback is empty.
Definition LteFeedback.h:78
void setPreferredCqi(const Cqi preferredCqi, const Codeword cw)
Set the per preferred band CQI for one codeword. Does not check if valid.
Definition LteFeedback.h:230
BandSet preferredBands_
Set of preferred bands.
Definition LteFeedback.h:58
Remote remoteAntennaId_
Definition LteFeedback.h:68
void setPeriodicity(const bool type)
Set the periodicity type.
Definition LteFeedback.h:260
void setWideBandCqi(const CqiVector wbCqi)
Set the wide-band CQI.
Definition LteFeedback.h:185
void setPreferredBands(const BandSet preferredBands)
Set the per preferred bands. Invoke this function every time you invoke setPreferredCqi().
Definition LteFeedback.h:242
void setPerBandCqi(const std::vector< CqiVector > bandCqi)
Set the per-band CQI.
Definition LteFeedback.h:204
BandSet getPreferredBands() const
Get the set of preferred bands. Does not check if valid.
Definition LteFeedback.h:157
Rank rank_
Rank indicator.
Definition LteFeedback.h:47
void setRankIndicator(const Rank rank)
Set the rank indicator.
Definition LteFeedback.h:178
CqiVector preferredCqi_
Per subset of preferred bands CQI.
Definition LteFeedback.h:56
CqiVector getBandCqi(Codeword cw) const
Get the per-band CQI for one codeword. Does not check if valid.
Definition LteFeedback.h:137
void reset()
Create an empty feedback message.
unsigned int status_
Current status.
Definition LteFeedback.h:61
bool periodicFeedback_
Periodicity of the feedback message.
Definition LteFeedback.h:66
std::vector< CqiVector > getBandCqi() const
Get the per-band CQI. Does not check if valid.
Definition LteFeedback.h:131
void setWideBandCqi(const Cqi cqi, const Codeword cw)
Set the wide-band CQI for one codeword. Does not check if valid.
Definition LteFeedback.h:192
Cqi getPreferredCqi(Codeword cw) const
Get the per preferred band CQI for one codeword. Does not check if valid.
Definition LteFeedback.h:150
void print(MacCellId cellId, MacNodeId nodeId, Direction dir, const char *s) const
Definition AlertReceiver.h:24
unsigned short Codeword
Codeword.
Definition LteCommon.h:202
MacNodeId MacCellId
Cell node ID. It is numerically equal to eNodeB MAC node ID.
Definition LteTypes.h:66
unsigned short Cqi
Channel Quality Indicator.
Definition LteTypes.h:133
unsigned short Rank
Connection Identifier: <MacNodeId,LogicalCid>
Definition LteTypes.h:130