81 LongBer *pre =
nullptr;
82 LongBer *pos =
nullptr;
84 for (j = 0; j < berlist->size(); j++) {
85 pos = *(berlist->begin() + j);
86 if (pos->longpkt >= tlen) {
93 if (j == berlist->size())
94 pre = *(berlist->begin() + j - 2);
96 pre = *(berlist->begin() + j - 1);
111 if (pos->snrlist.size() < 1)
112 throw cRuntimeError(
"model error: pos->snrlist is empty");
113 if (tsnr > pos->snrlist[pos->snrlist.size() - 1].snr) {
114 snrdata1 = pos->snrlist[pos->snrlist.size() - 1];
115 snrdata2 = pos->snrlist[pos->snrlist.size() - 1];
118 for (j = 0; j < pos->snrlist.size(); j++) {
119 snrdata1 = pos->snrlist[j];
120 if (tsnr <= snrdata1.snr)
128 if (j == pos->snrlist.size()) {
130 throw cRuntimeError(
"model error: pos->snrlist is too short, should be 2 or more elements");
131 snrdata2 = pos->snrlist[j - 2];
134 snrdata2 = pos->snrlist[j - 1];
140 if (tsnr > pre->snrlist[pre->snrlist.size() - 1].snr) {
141 snrdata3 = pre->snrlist[pre->snrlist.size() - 1];
142 snrdata4 = pre->snrlist[pre->snrlist.size() - 1];
145 for (j = 0; j < pre->snrlist.size(); j++) {
146 snrdata3 = pre->snrlist[j];
147 if (tsnr <= snrdata3.snr)
151 if (j == pre->snrlist.size())
152 snrdata4 = pre->snrlist[j - 2];
154 snrdata4 = pre->snrlist[j - 1];
157 if (snrdata2.snr == -1) {
158 snrdata2.snr = snrdata1.snr;
159 snrdata2.ber = snrdata1.ber;
161 if (snrdata4.snr == -1) {
162 snrdata4.snr = snrdata3.snr;
163 snrdata4.ber = snrdata3.ber;
165 double per1, per2, per;
169 if (tsnr <= snrdata1.snr) {
170 if (snrdata2.snr != snrdata1.snr)
171 per1 = snrdata1.ber + (snrdata2.ber - snrdata1.ber) / (snrdata2.snr - snrdata1.snr) * (tsnr - snrdata1.snr);
173 if (tsnr <= snrdata3.snr) {
174 if (snrdata3.snr != snrdata4.snr)
175 per2 = snrdata3.ber + (snrdata4.ber - snrdata3.ber) / (snrdata4.snr - snrdata3.snr) * (tsnr - snrdata3.snr);
177 if (per1 != -1 && per2 != -1) {
178 if (pos->longpkt != pre->longpkt)
179 per = per2 + (per1 - per2) / (pos->longpkt - pre->longpkt) * (tlen - pre->longpkt);
192 EV <<
"No PER available";