Compare commits

...

8 Commits

Author SHA1 Message Date
Raymond Knopp
d44060b9ad small bugfix in pucch3 receiver 2026-03-19 21:56:28 +01:00
Raymond Knopp
77d8590a6c Merge branch 'pucch2_debug' into PUCCH3 2026-03-18 08:34:45 +01:00
Raymond Knopp
629dbcfcc0 intermediate commit to change machines 2026-03-13 21:32:49 +00:00
Raymond Knopp
59a76e7722 some small fixes to nr_pucchsim, nr_gNB_measurements.c, pucch_rx.c pertaining to
PUCCH format 2 reception. There was an overflow scenario in the noise measurements used for PUCCH
thresholding and potentially other uplink receivers.
2026-03-13 21:32:25 +01:00
Raymond Knopp
3d1423ac50 temporary commit 2026-03-12 12:25:36 +01:00
Karim Boutiba
7fc3a153df Adding unit tests for PUCCH Format 1 2026-03-05 17:03:47 +01:00
Karim Boutiba
59962f178c This commit completes the PUCCH Format 1 decoder implementation using maximum-likelihood detection with RE averaging across symbols/RB (and hop-wise averaging for intra-slot hopping). It also updates the PUCCH simulation/test flow to align with the decoder changes, including payload and logging consistency fixes needed for correct validation. 2026-03-05 17:03:39 +01:00
Raymond Knopp
ea0bd8b955 Adding PUCCH Format 1 configuation to pucchsim 2026-03-04 15:24:20 +01:00
11 changed files with 1848 additions and 1047 deletions

View File

@@ -130,7 +130,7 @@ void phy_init_nr_gNB(PHY_VARS_gNB *gNB)
crcTableInit();
init_byte2m128i();
init_pucch2_luts();
init_pucch2_3_luts();
nr_init_fde(); // Init array for frequency equalization of transform precoding of PUSCH

View File

@@ -184,9 +184,8 @@ void gNB_I0_measurements(PHY_VARS_gNB *gNB, int slot, int first_symb, int num_sy
} //rb
} // symb
int nb_rb=0;
int32_t n0_subband_tot_perANT[frame_parms->nb_antennas_rx];
int64_t n0_subband_tot_perANT[frame_parms->nb_antennas_rx];
memset(n0_subband_tot_perANT, 0, sizeof(n0_subband_tot_perANT));
allocCast2D(n0_subband_power,
unsigned int,
measurements->n0_subband_power,
@@ -195,7 +194,7 @@ void gNB_I0_measurements(PHY_VARS_gNB *gNB, int slot, int first_symb, int num_sy
false);
for (int rb = 0 ; rb<frame_parms->N_RB_UL;rb++) {
int32_t n0_subband_tot_perPRB=0;
int64_t n0_subband_tot_perPRB=0;
if (nb_symb[rb] > 0) {
for (int aarx = 0; aarx < frame_parms->nb_antennas_rx; aarx++) {
tmp_n0_subband[aarx][rb] /= nb_symb[rb];
@@ -213,9 +212,9 @@ void gNB_I0_measurements(PHY_VARS_gNB *gNB, int slot, int first_symb, int num_sy
if (nb_rb>0) {
int64_t n0_subband_tot = 0;
for (int aarx = 0; aarx < frame_parms->nb_antennas_rx; aarx++) {
measurements->n0_subband_power_avg_perANT_dB[aarx] = dB_fixed(n0_subband_tot_perANT[aarx] / nb_rb);
n0_subband_tot += n0_subband_tot_perANT[aarx];
measurements->n0_subband_power_avg_perANT_dB[aarx] = dB_fixed((int32_t)(n0_subband_tot_perANT[aarx] / nb_rb));
n0_subband_tot += (int32_t)(n0_subband_tot_perANT[aarx]/nb_rb);
}
measurements->n0_subband_power_avg_dB = dB_fixed(n0_subband_tot / nb_rb);
measurements->n0_subband_power_avg_dB = dB_fixed(n0_subband_tot/frame_parms->nb_antennas_rx);
}
}

View File

@@ -81,6 +81,6 @@ void nr_codeword_unscrambling_init(int16_t *s, uint32_t size, uint8_t q, uint32_
/**@}*/
void init_pucch2_luts(void);
void init_pucch2_3_luts(void);
void set_prach_tables(int N_ZC, c16_t** ru, uint32_t** zc_inv);
#endif

View File

@@ -245,27 +245,20 @@ int get_nr_prach_duration(uint8_t prach_format);
void free_nr_prach_entry(prach_list_t *, prach_item_t *);
void nr_decode_pucch1(c16_t **rxdataF,
pucch_GroupHopping_t pucch_GroupHopping,
uint32_t n_id, // hoppingID higher layer parameter
uint64_t *payload,
NR_DL_FRAME_PARMS *frame_parms,
int16_t amp,
int nr_tti_tx,
uint8_t m0,
uint8_t nrofSymbols,
uint8_t startingSymbolIndex,
uint16_t startingPRB,
uint16_t startingPRB_intraSlotHopping,
uint8_t timeDomainOCC,
uint8_t nr_bit);
void nr_decode_pucch2(PHY_VARS_gNB *gNB,
void nr_decode_pucch1(PHY_VARS_gNB *gNB,
c16_t **rxdataF,
int frame,
int slot,
nfapi_nr_uci_pucch_pdu_format_2_3_4_t* uci_pdu,
nfapi_nr_pucch_pdu_t* pucch_pdu);
nfapi_nr_uci_pucch_pdu_format_0_1_t *uci_pdu,
nfapi_nr_pucch_pdu_t *pucch_pdu);
void nr_decode_pucch2_3(PHY_VARS_gNB *gNB,
c16_t **rxdataF,
int frame,
int slot,
nfapi_nr_uci_pucch_pdu_format_2_3_4_t* uci_pdu,
nfapi_nr_pucch_pdu_t* pucch_pdu);
void nr_decode_pucch0(PHY_VARS_gNB *gNB,
c16_t **rxdataF,

File diff suppressed because it is too large Load Diff

View File

@@ -190,7 +190,7 @@ void nr_generate_pucch1(c16_t **txdataF,
d = qpskSymbols[tmp];
}
#ifdef DEBUG_NR_PUCCH_TX
printf("\t [nr_generate_pucch1] sequence modulation: payload=%lx \tde_re=%d \tde_im=%d\n", payload, d.r, d.i);
printf("\t [nr_generate_pucch1] sequence modulation (amp %d/%d): payload=%lx \tde_re=%d \tde_im=%d\n", amp, baseVal,payload, d.r, d.i);
#endif
/*
* Defining cyclic shift hopping TS 38.211 Subclause 6.3.2.2.2
@@ -273,13 +273,14 @@ void nr_generate_pucch1(c16_t **txdataF,
#ifdef DEBUG_NR_PUCCH_TX
printf(
"\t [nr_generate_pucch1] sequence generation \tu=%d \tv=%d \talpha=%lf \tr_u_v_alpha_delta[n=%d]=(%d,%d) "
"\ty_n[n=%d]=(%d,%d)\n",
"\td=(%d,%d)\ty_n[n=%d]=(%d,%d)\n",
u,
v,
alpha,
n,
r_u_v_alpha_delta[n].r,
r_u_v_alpha_delta[n].i,
d.r,d.i,
n,
y_n[n].r,
y_n[n].i);
@@ -443,7 +444,7 @@ void nr_generate_pucch1(c16_t **txdataF,
}
if ((startingPRB > (frame_parms->N_RB_DL>>1)) && ((frame_parms->N_RB_DL & 1) == 1)) { // if number RBs in bandwidth is odd and current PRB is upper band
re_offset = ((l+startingSymbolIndex)*frame_parms->ofdm_symbol_size) + (12*(startingPRB-(frame_parms->N_RB_DL>>1))) + 6;
re_offset = ((l+startingSymbolIndex)*frame_parms->ofdm_symbol_size) + (12*(startingPRB-(frame_parms->N_RB_DL>>1))) - 6;
}
if ((startingPRB == (frame_parms->N_RB_DL>>1)) && ((frame_parms->N_RB_DL & 1) == 1)) { // if number RBs in bandwidth is odd and current PRB contains DC
@@ -860,7 +861,7 @@ void nr_generate_pucch2(c16_t **txdataF,
if (baseRB < halfRBs) // if number RBs in bandwidth is odd and current PRB is lower band
re_offset += frame_parms->first_carrier_offset;
else if (baseRB > halfRBs) // if number RBs in bandwidth is odd and current PRB is upper band
re_offset += -halfRBs + 6;
re_offset += -12*halfRBs - 6;
else
re_offset += frame_parms->first_carrier_offset;
}
@@ -973,6 +974,10 @@ void nr_generate_pucch3_4(c16_t **txdataF,
uint16_t startingPRB = pucch_pdu->prb_start + pucch_pdu->bwp_start;
uint8_t add_dmrs = pucch_pdu->add_dmrs_flag;
#ifdef DEBUG_NR_PUCCH_TX
printf("\t [nr_generate_pucch3_4] nrofSymbols %d, nrofPRB %d, startingPRB %d, add_dmrs %d is_pi_over_2_bpsk_enabled %d\n",nrofSymbols,nrofPRB,startingPRB,add_dmrs,is_pi_over_2_bpsk_enabled);
#endif
M_bit = nr_pucch_output_sequence_length(pucch_pdu->format_type,
nrofSymbols,
nrofPRB,
@@ -980,6 +985,9 @@ void nr_generate_pucch3_4(c16_t **txdataF,
is_pi_over_2_bpsk_enabled,
add_dmrs);
#ifdef DEBUG_NR_PUCCH_TX
printf("\t [nr_generate_pucch3_4] nrofSymbols %d, nrofPRB %d, startingPRB %d, add_dmrs %d is_pi_over_2_bpsk_enabled %d, M_bit %d\n",nrofSymbols,nrofPRB,startingPRB,add_dmrs,is_pi_over_2_bpsk_enabled,M_bit);
#endif
nr_uci_encoding(pucch_pdu->payload, pucch_pdu->n_bit, nrofPRB, false, M_bit, 0, b);
/*
* Implementing TS 38.211
@@ -1020,7 +1028,7 @@ void nr_generate_pucch3_4(c16_t **txdataF,
if (is_pi_over_2_bpsk_enabled == 0) {
// using QPSK if PUCCH format 3,4 and pi/2-BPSK is not configured, according to subclause 6.3.2.6.2
c16_t qpskSymbols[4] = {{baseVal, baseVal}, {-baseVal, baseVal}, {-baseVal, baseVal}, {-baseVal, -baseVal}};
c16_t qpskSymbols[4] = {{baseVal, baseVal}, {baseVal, -baseVal}, {-baseVal, baseVal}, {-baseVal, -baseVal}};
for (int i=0; i < m_symbol; i++) { // QPSK modulation subclause 5.1.3
int tmp = (btilde[2 * i] & 1) * 2 + (btilde[(2 * i) + 1] & 1);
d[i] = qpskSymbols[tmp];
@@ -1164,9 +1172,10 @@ void nr_generate_pucch3_4(c16_t **txdataF,
c16_t *yPtr = y_n + l * 12 * nrofPRB;
c16_t *zPtr = z + l * 12 * nrofPRB + k;
*zPtr = (c16_t){0};
for (int m = l * 12 * nrofPRB; m < (l + 1) * 12 * nrofPRB; m++) {
// for (int m = l * 12 * nrofPRB; m < (l + 1) * 12 * nrofPRB; m++) {
for (int m = 0; m < (12 * nrofPRB); m++) {
const c16_t angle = {lround(32767 * cos(2 * M_PI * m * k / (12 * nrofPRB))),
lround(32767 * sin(2 * M_PI * m * k / (12 * nrofPRB)))};
lround(-32767 * sin(2 * M_PI * m * k / (12 * nrofPRB)))};
c16_t tmp = c16mulShift(yPtr[m], angle, 15);
csum(*zPtr, *zPtr, c16mulRealShift(tmp, base, 15));
}
@@ -1241,7 +1250,7 @@ void nr_generate_pucch3_4(c16_t **txdataF,
nr_group_sequence_hopping(pucch_GroupHopping,pucch_pdu->hopping_id,n_hop,nr_slot_tx,&u,&v); // calculating u and v value
// Next we proceed to calculate base sequence for DM-RS signal, according to TS 38.211 subclause 6.4.1.33
if (nrofPRB >= 3) { // TS 38.211 subclause 5.2.2.1 (Base sequences of length 36 or larger) applies
if (l==0 && nrofPRB >= 3) { // TS 38.211 subclause 5.2.2.1 (Base sequences of length 36 or larger) applies
int i = 4;
while (list_of_prime_numbers[i] < (12*nrofPRB)) i++;
@@ -1265,7 +1274,7 @@ void nr_generate_pucch3_4(c16_t **txdataF,
}
}
if (nrofPRB == 2) { // TS 38.211 subclause 5.2.2.2 (Base sequences of length less than 36 using table 5.2.2.2-4) applies
if (l==0 && nrofPRB == 2) { // TS 38.211 subclause 5.2.2.2 (Base sequences of length less than 36 using table 5.2.2.2-4) applies
for (int n = 0; n < 12 * nrofPRB; n++) {
c16_t table = {table_5_2_2_2_4_Re[u][n], table_5_2_2_2_4_Im[u][n]};
r_u_v_base[n] = c16mulRealShift(table, amp, 15);
@@ -1279,7 +1288,7 @@ void nr_generate_pucch3_4(c16_t **txdataF,
}
}
if (nrofPRB == 1) { // TS 38.211 subclause 5.2.2.2 (Base sequences of length less than 36 using table 5.2.2.2-2) applies
if (l==0 && nrofPRB == 1) { // TS 38.211 subclause 5.2.2.2 (Base sequences of length less than 36 using table 5.2.2.2-2) applies
for (int n = 0; n < 12 * nrofPRB; n++) {
c16_t table = {table_5_2_2_2_2_Re[u][n], table_5_2_2_2_2_Im[u][n]};
r_u_v_base[n] = c16mulRealShift(table, amp, 15);
@@ -1298,12 +1307,12 @@ void nr_generate_pucch3_4(c16_t **txdataF,
alpha = nr_cyclic_shift_hopping(pucch_pdu->hopping_id,m0,mcs,l,startingSymbolIndex,nr_slot_tx);
for (int rb=0; rb<nrofPRB; rb++) {
const bool nb_rb_is_even = frame_parms->N_RB_DL & 1;
const bool nb_rb_is_even = (frame_parms->N_RB_DL & 1)==0;
const int halfRBs = frame_parms->N_RB_DL / 2;
const int baseRB = rb + startingPRB;
if ((intraSlotFrequencyHopping == 1) && (l<floor(nrofSymbols/2))) { // intra-slot hopping enabled, we need to calculate new offset PRB
startingPRB = startingPRB + pucch_pdu->second_hop_prb;
if ((intraSlotFrequencyHopping == 1) && (l>=floor(nrofSymbols/2))) { // intra-slot hopping enabled, we need to calculate new offset PRB
startingPRB = pucch_pdu->second_hop_prb;
}
const int baseRB = rb + startingPRB;
re_offset = ((l + startingSymbolIndex) * frame_parms->ofdm_symbol_size);
//startingPRB = startingPRB + rb;
if (nb_rb_is_even) {
@@ -1327,7 +1336,7 @@ void nr_generate_pucch3_4(c16_t **txdataF,
printf("3 ");
#endif
} else if (baseRB > halfRBs) { // if number RBs in bandwidth is odd and current PRB is upper band
re_offset += 12 * (baseRB - halfRBs) + 6;
re_offset += 12 * (baseRB - halfRBs) - 6;
#ifdef DEBUG_NR_PUCCH_TX
printf("4 ");
#endif
@@ -1340,7 +1349,7 @@ void nr_generate_pucch3_4(c16_t **txdataF,
}
#ifdef DEBUG_NR_PUCCH_TX
printf("re_offset=%u,baseRB=%d\n", re_offset, baseRB);
printf("re_offset=%u,baseRB=%d\n", re_offset-((l + startingSymbolIndex) * frame_parms->ofdm_symbol_size), baseRB);
#endif
//txptr = &txdataF[0][re_offset];
@@ -1355,10 +1364,10 @@ void nr_generate_pucch3_4(c16_t **txdataF,
txdataF[0][re_offset] = z[n + k];
#ifdef DEBUG_NR_PUCCH_TX
printf(
"\t [nr_generate_pucch3_4] (l=%d,rb=%d,n=%d,k=%d) mapping PUCCH to RE \t amp=%d \tofdm_symbol_size=%d \tN_RB_DL=%d "
"\tfirst_carrier_offset=%d \tz_pucch[%d]=txptr(%u)=(z(l=%d,n=%d)=(%d,%d))\n",
"\t [nr_generate_pucch3_4] (l=%d,rb=%d,n=%d,k=%d) mapping PUCCH DATA to RE \t amp=%d \tofdm_symbol_size=%d \tN_RB_DL=%d "
"\tfirst_carrier_offset=%d \tz_pucch[%d]=txptr(%u)=(z(l=%d,n=%d)=(%d,%d))[%d]\n",
l,
rb,
startingPRB+rb,
n,
k,
amp,
@@ -1370,7 +1379,8 @@ void nr_generate_pucch3_4(c16_t **txdataF,
l,
n,
txdataF[0][re_offset].r,
txdataF[0][re_offset].i);
txdataF[0][re_offset].i,
re_offset-(l + startingSymbolIndex) * frame_parms->ofdm_symbol_size);
#endif
}
if (table_6_4_1_3_3_2_1_dmrs_positions[nrofSymbols-4][l] == 1) { // mapping DM-RS signal according to TS38.211 subclause 6.4.1.3.2
@@ -1378,12 +1388,13 @@ void nr_generate_pucch3_4(c16_t **txdataF,
txdataF[0][re_offset] = c16mulShift(angle, r_u_v_base[n + j], 15);
#ifdef DEBUG_NR_PUCCH_TX
printf(
"\t [nr_generate_pucch3_4] (l=%d,rb=%d,n=%d,j=%d) mapping DM-RS to RE \t amp=%d \tofdm_symbol_size=%d \tN_RB_DL=%d "
"\t [nr_generate_pucch3_4] (l=%d,rb=%d,n=%d,j=%d,alpha %f) mapping PUCCH DM-RS to RE \t amp=%d \tofdm_symbol_size=%d \tN_RB_DL=%d "
"\tfirst_carrier_offset=%d \tz_dm-rs[%d]=txptr(%u)=(r_u_v(l=%d,n=%d)=(%d,%d))\n",
l,
rb,
rb+startingPRB,
n,
j,
alpha,
amp,
frame_parms->ofdm_symbol_size,
frame_parms->N_RB_DL,
@@ -1393,7 +1404,8 @@ void nr_generate_pucch3_4(c16_t **txdataF,
l,
n,
txdataF[0][re_offset].r,
txdataF[0][re_offset].i);
txdataF[0][re_offset].i,
re_offset-(l + startingSymbolIndex) * frame_parms->ofdm_symbol_size);
#endif
}

View File

@@ -82,6 +82,9 @@ typedef struct {
int pucch01_DTX;
int pucch02_trials;
int pucch02_DTX;
int pucch1_sr_trials;
int pucch1_positive_SR;
int pucch11_trials;
int pucch2_trials;
int pucch2_DTX;
} NR_gNB_UCI_STATS_t;

View File

@@ -1021,27 +1021,33 @@ int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx, N
UL_INFO->uci_ind.slot = slot_rx;
switch (pucch_pdu->format_type) {
case 0:
case 1:
uci->pdu_type = NFAPI_NR_UCI_FORMAT_0_1_PDU_TYPE;
uci->pdu_size = sizeof(nfapi_nr_uci_pucch_pdu_format_0_1_t);
nfapi_nr_uci_pucch_pdu_format_0_1_t *uci_pdu_format0 = &uci->pucch_pdu_format_0_1;
nfapi_nr_uci_pucch_pdu_format_0_1_t *uci_pdu_format0_1 = &uci->pucch_pdu_format_0_1;
int offset =
pucch_pdu->start_symbol_index * ofdm_symbol_size + (frame_parms->first_carrier_offset + pucch_pdu->prb_start * 12);
LOG_D(NR_PHY,
"frame %d, slot %d: PUCCH signal energy %d\n",
"frame %d, slot %d: PUCCH %d signal energy %d\n",
frame_rx,
slot_rx,
pucch_pdu->format_type,
signal_energy_nodc(&rxdataF[0][soffset + offset], 12));
nr_decode_pucch0(gNB, rxdataF, frame_rx, slot_rx, uci_pdu_format0, pucch_pdu);
if (pucch_pdu->format_type == 0)
nr_decode_pucch0(gNB, rxdataF, frame_rx, slot_rx, uci_pdu_format0_1, pucch_pdu);
else
nr_decode_pucch1(gNB, rxdataF, frame_rx, slot_rx, uci_pdu_format0_1, pucch_pdu);
break;
case 2:
case 3:
uci->pdu_type = NFAPI_NR_UCI_FORMAT_2_3_4_PDU_TYPE;
uci->pdu_size = sizeof(nfapi_nr_uci_pucch_pdu_format_2_3_4_t);
nfapi_nr_uci_pucch_pdu_format_2_3_4_t *uci_pdu_format2 = &uci->pucch_pdu_format_2_3_4;
nfapi_nr_uci_pucch_pdu_format_2_3_4_t *uci_pdu_format2_3_4 = &uci->pucch_pdu_format_2_3_4;
LOG_D(PHY, "%d.%d Calling nr_decode_pucch2\n", frame_rx, slot_rx);
nr_decode_pucch2(gNB, rxdataF, frame_rx, slot_rx, uci_pdu_format2, pucch_pdu);
nr_decode_pucch2_3(gNB, rxdataF, frame_rx, slot_rx, uci_pdu_format2_3_4, pucch_pdu);
break;
default:
AssertFatal(1 == 0, "Only PUCCH formats 0 and 2 are currently supported\n");
AssertFatal(1 == 0, "Only PUCCH formats 0-3 are currently supported\n");
}
UL_INFO->uci_ind.num_ucis += 1;
pucch->active = false;

File diff suppressed because it is too large Load Diff

View File

@@ -649,7 +649,7 @@ channel_desc_t *new_channel_desc_scm(uint8_t nb_tx,
chan_desc->ch[i] = calloc(chan_desc->channel_length, sizeof(struct complexd));
for (i = 0; i<nb_tx*nb_rx; i++)
chan_desc->chF[i] = calloc(1200, sizeof(struct complexd));
chan_desc->chF[i] = calloc(273*12, sizeof(struct complexd));
for (i = 0; i<chan_desc->nb_taps; i++)
chan_desc->a[i] = calloc(nb_tx*nb_rx, sizeof(struct complexd));
@@ -711,7 +711,7 @@ channel_desc_t *new_channel_desc_scm(uint8_t nb_tx,
chan_desc->ch[i] = (struct complexd *) malloc(chan_desc->channel_length * sizeof(struct complexd));
for (i = 0; i<nb_tx*nb_rx; i++)
chan_desc->chF[i] = (struct complexd *) malloc(1200 * sizeof(struct complexd));
chan_desc->chF[i] = (struct complexd *) malloc(273*12 * sizeof(struct complexd));
for (i = 0; i<chan_desc->nb_taps; i++)
chan_desc->a[i] = (struct complexd *) malloc(nb_tx*nb_rx * sizeof(struct complexd));
@@ -808,7 +808,7 @@ channel_desc_t *new_channel_desc_scm(uint8_t nb_tx,
chan_desc->ch[i] = (struct complexd *) malloc(chan_desc->channel_length * sizeof(struct complexd));
for (i = 0; i<nb_tx*nb_rx; i++)
chan_desc->chF[i] = (struct complexd *) malloc(1200 * sizeof(struct complexd));
chan_desc->chF[i] = (struct complexd *) malloc(273*12 * sizeof(struct complexd));
for (i = 0; i<chan_desc->nb_taps; i++)
chan_desc->a[i] = (struct complexd *) malloc(nb_tx*nb_rx * sizeof(struct complexd));
@@ -864,7 +864,7 @@ channel_desc_t *new_channel_desc_scm(uint8_t nb_tx,
chan_desc->ch[i] = (struct complexd *) malloc(chan_desc->channel_length * sizeof(struct complexd));
for (i = 0; i<nb_tx*nb_rx; i++)
chan_desc->chF[i] = (struct complexd *) malloc(1200 * sizeof(struct complexd));
chan_desc->chF[i] = (struct complexd *) malloc(273*12 * sizeof(struct complexd));
for (i = 0; i<chan_desc->nb_taps; i++)
chan_desc->a[i] = (struct complexd *) malloc(nb_tx*nb_rx * sizeof(struct complexd));
@@ -919,7 +919,7 @@ channel_desc_t *new_channel_desc_scm(uint8_t nb_tx,
chan_desc->ch[i] = (struct complexd *) malloc(chan_desc->channel_length * sizeof(struct complexd));
for (i = 0; i<nb_tx*nb_rx; i++)
chan_desc->chF[i] = (struct complexd *) malloc(1200 * sizeof(struct complexd));
chan_desc->chF[i] = (struct complexd *) malloc(273*12 * sizeof(struct complexd));
for (i = 0; i<chan_desc->nb_taps; i++)
chan_desc->a[i] = (struct complexd *) malloc(nb_tx*nb_rx * sizeof(struct complexd));
@@ -974,7 +974,7 @@ channel_desc_t *new_channel_desc_scm(uint8_t nb_tx,
chan_desc->ch[i] = (struct complexd *) malloc(chan_desc->channel_length * sizeof(struct complexd));
for (i = 0; i<nb_tx*nb_rx; i++)
chan_desc->chF[i] = (struct complexd *) malloc(1200 * sizeof(struct complexd));
chan_desc->chF[i] = (struct complexd *) malloc(273*12 * sizeof(struct complexd));
for (i = 0; i<chan_desc->nb_taps; i++)
chan_desc->a[i] = (struct complexd *) malloc(nb_tx*nb_rx * sizeof(struct complexd));
@@ -1029,7 +1029,7 @@ channel_desc_t *new_channel_desc_scm(uint8_t nb_tx,
chan_desc->ch[i] = (struct complexd *) malloc(chan_desc->channel_length * sizeof(struct complexd));
for (i = 0; i<nb_tx*nb_rx; i++)
chan_desc->chF[i] = (struct complexd *) malloc(1200 * sizeof(struct complexd));
chan_desc->chF[i] = (struct complexd *) malloc(273*12 * sizeof(struct complexd));
for (i = 0; i<chan_desc->nb_taps; i++)
chan_desc->a[i] = (struct complexd *) malloc(nb_tx*nb_rx * sizeof(struct complexd));
@@ -1085,7 +1085,7 @@ channel_desc_t *new_channel_desc_scm(uint8_t nb_tx,
chan_desc->ch[i] = (struct complexd *) malloc(chan_desc->channel_length * sizeof(struct complexd));
for (i = 0; i<nb_tx*nb_rx; i++)
chan_desc->chF[i] = (struct complexd *) malloc(1200 * sizeof(struct complexd));
chan_desc->chF[i] = (struct complexd *) malloc(273*12 * sizeof(struct complexd));
for (i = 0; i<chan_desc->nb_taps; i++)
chan_desc->a[i] = (struct complexd *) malloc(nb_tx*nb_rx * sizeof(struct complexd));
@@ -1141,7 +1141,7 @@ channel_desc_t *new_channel_desc_scm(uint8_t nb_tx,
chan_desc->ch[i] = (struct complexd *) malloc(chan_desc->channel_length * sizeof(struct complexd));
for (i = 0; i<nb_tx*nb_rx; i++)
chan_desc->chF[i] = (struct complexd *) malloc(1200 * sizeof(struct complexd));
chan_desc->chF[i] = (struct complexd *) malloc(273*12 * sizeof(struct complexd));
for (i = 0; i<chan_desc->nb_taps; i++)
chan_desc->a[i] = (struct complexd *) malloc(nb_tx*nb_rx * sizeof(struct complexd));

View File

@@ -262,6 +262,25 @@ add_physim_test(physim.5g.nr_pucchsim.test26 "Format 2 12-bit 8/273 PRB" nr_pucc
add_physim_test(physim.5g.nr_pucchsim.test27 "Format 2 19-bit 8/273 PRB" nr_pucchsim -R 273 -z8 -i 1 -P 2 -q8 -b 19 -s-3 -n3000)
add_physim_test(physim.5g.nr_pucchsim.test28 "Format 2 64-bit 16/273 PRB" nr_pucchsim -R 273 -z8 -i 1 -P 2 -q16 -b 64 -s-3 -n3000)
add_physim_test(physim.5g.nr_pucchsim.test29 "Format 2 64-bit 16/273 PRB Delay 2us" nr_pucchsim -R 273 -z8 -i 1 -P 2 -q16 -b 64 -s0 -S7 -d 2 -n3000)
add_physim_test(physim.5g.nr_pucchsim.test30 "Format 1 NACK number of symbols = 4 273PRB" nr_pucchsim -R 273 -z8 -i 4 -P 1 -b 1 -B 0 -s-14 -n3000)
add_physim_test(physim.5g.nr_pucchsim.test31 "Format 1 ACK number of symbols = 4 273PRB" nr_pucchsim -R 273 -z8 -i 4 -P 1 -b 1 -B 1 -s-14 -n3000)
add_physim_test(physim.5g.nr_pucchsim.test32 "Format 1 (NACK,NACK) number of symbols = 4 273PRB" nr_pucchsim -R 273 -z8 -i 4 -P 1 -b 2 -B 0 -s-14 -n3000)
add_physim_test(physim.5g.nr_pucchsim.test33 "Format 1 (ACK,NACK) number of symbols = 4 273PRB with SR" nr_pucchsim -R 273 -z8 -i 4 -P 1 -b 2 -B 1 -s-14 -c -n3000)
add_physim_test(physim.5g.nr_pucchsim.test34 "Format 1 (NACK,ACK) number of symbols = 4 273PRB" nr_pucchsim -R 273 -z8 -i 4 -P 1 -b 2 -B 2 -s-14 -n3000)
add_physim_test(physim.5g.nr_pucchsim.test35 "Format 1 (ACK,ACK) number of symbols = 4 273PRB" nr_pucchsim -R 273 -z8 -i 4 -P 1 -b 2 -B 3 -s-14 -n3000)
add_physim_test(physim.5g.nr_pucchsim.test36 "Format 1 NACK number of symbols = 8 273PRB" nr_pucchsim -R 273 -z8 -i 8 -P 1 -b 1 -B 0 -s-14 -n3000)
add_physim_test(physim.5g.nr_pucchsim.test37 "Format 1 ACK number of symbols = 8 273PRB" nr_pucchsim -R 273 -z8 -i 8 -P 1 -b 1 -B 1 -s-14 -n3000)
add_physim_test(physim.5g.nr_pucchsim.test38 "Format 1 (NACK,NACK) number of symbols = 8 273PRB" nr_pucchsim -R 273 -z8 -i 8 -P 1 -b 2 -B 0 -s-14 -n3000)
add_physim_test(physim.5g.nr_pucchsim.test39 "Format 1 (ACK,NACK) number of symbols = 8 273PRB" nr_pucchsim -R 273 -z8 -i 8 -P 1 -b 2 -B 1 -s-14 -n3000)
add_physim_test(physim.5g.nr_pucchsim.test40 "Format 1 (NACK,ACK) number of symbols = 8 273PRB with SR" nr_pucchsim -R 273 -z8 -i 8 -P 1 -b 2 -B 2 -s-14 -c -n3000)
add_physim_test(physim.5g.nr_pucchsim.test41 "Format 1 (ACK,ACK) number of symbols = 8 273PRB" nr_pucchsim -R 273 -z8 -i 8 -P 1 -b 2 -B 3 -s-14 -n3000)
add_physim_test(physim.5g.nr_pucchsim.test42 "Format 1 NACK number of symbols = 14 273PRB" nr_pucchsim -R 273 -z8 -i 14 -P 1 -b 1 -B 0 -s-14 -n3000)
add_physim_test(physim.5g.nr_pucchsim.test43 "Format 1 ACK number of symbols = 14 273PRB" nr_pucchsim -R 273 -z8 -i 14 -P 1 -b 1 -B 1 -s-14 -n3000)
add_physim_test(physim.5g.nr_pucchsim.test44 "Format 1 (NACK,NACK) number of symbols = 14 273PRB" nr_pucchsim -R 273 -z8 -i 14 -P 1 -b 2 -B 0 -s-14 -n3000)
add_physim_test(physim.5g.nr_pucchsim.test45 "Format 1 (ACK,NACK) number of symbols = 14 273PRB" nr_pucchsim -R 273 -z8 -i 14 -P 1 -b 2 -B 1 -s-14 -n3000)
add_physim_test(physim.5g.nr_pucchsim.test46 "Format 1 (NACK,ACK) number of symbols = 14 273PRB with SR" nr_pucchsim -R 273 -z8 -i 14 -P 1 -b 2 -B 2 -s-14 -c -n3000)
add_physim_test(physim.5g.nr_pucchsim.test47 "Format 1 (ACK,ACK) number of symbols = 14 273PRB" nr_pucchsim -R 273 -z8 -i 14 -P 1 -b 2 -B 3 -s-14 -n3000)
####################################################################################
###### nr_ulsim unit test ######