PBCH generation layout
This commit is contained in:
@@ -6,12 +6,22 @@
|
||||
% Amplitude for BPSK (\f$ 2^15 \times 1/\sqrt{2}\f$)
|
||||
BPSK = 23170;
|
||||
|
||||
% Amplitude for QPSK (\f$ 2^15 \times 1/\sqrt{2}\f$)
|
||||
QPSK = 23170;
|
||||
|
||||
% BPSK
|
||||
for b = 0:1
|
||||
bpsk_table(b+1) = (1 - 2*b)*BPSK + 1j*(1-2*b)*BPSK;
|
||||
end
|
||||
|
||||
table = [ 0; bpsk_table(:) ];
|
||||
%% QPSK
|
||||
for r=0:1 %0 -- 1 LS
|
||||
for j=0:1 %0 -- 1 MS
|
||||
qpsk_table(2*r+j+1) = ((1-r*2)*QPSK + 1j*(1-2*j)*QPSK);
|
||||
end
|
||||
end
|
||||
|
||||
table = [ 0; bpsk_table(:); qpsk_table(:) ];
|
||||
|
||||
save mod_table.mat table
|
||||
|
||||
@@ -20,10 +30,10 @@ table2(1:2:end) = real(table);
|
||||
table2(2:2:end) = imag(table);
|
||||
|
||||
fd = fopen("nr_mod_table.h","w");
|
||||
fprintf(fd,"#define MOD_TABLE_SIZE_SHORT %d\n", length(table)*2);
|
||||
fprintf(fd,"#define MOD_TABLE_BPSK_OFFSET %d\n", 1);
|
||||
fprintf(fd,"#define NR_MOD_TABLE_SIZE_SHORT %d\n", length(table)*2);
|
||||
fprintf(fd,"#define NR_MOD_TABLE_BPSK_OFFSET %d\n", 1);
|
||||
fprintf(fd,"#define NR_MOD_TABLE_QPSK_OFFSET %d\n", 3);
|
||||
fprintf(fd,"short nr_mod_table[MOD_TABLE_SIZE_SHORT] = {");
|
||||
fprintf(fd,"%d,",table2(1:end-1));
|
||||
fprintf(fd,"%d};\n",table2(end));
|
||||
fclose(fd);
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#define MOD_TABLE_SIZE_SHORT 6
|
||||
#define MOD_TABLE_BPSK_OFFSET 1
|
||||
short nr_mod_table[MOD_TABLE_SIZE_SHORT] = {0,0,23170,23170,-23170,-23170};
|
||||
#define NR_MOD_TABLE_SIZE_SHORT 14
|
||||
#define NR_MOD_TABLE_BPSK_OFFSET 1
|
||||
#define NR_MOD_TABLE_QPSK_OFFSET 3
|
||||
short nr_mod_table[MOD_TABLE_SIZE_SHORT] = {0,0,23170,23170,-23170,-23170,23170,23170,23170,-23170,-23170,23170,-23170,-23170};
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
*/
|
||||
|
||||
/*! \file PHY/NR_TRANSPORT/nr_pbch.c
|
||||
* \brief Top-level routines for generating and decoding the PBCH/BCH physical/transport channel V15.1 03/2018
|
||||
* \brief Top-level routines for generating the PBCH/BCH physical/transport channel V15.1 03/2018
|
||||
* \author Guy De Souza
|
||||
* \date 2018
|
||||
* \version 0.1
|
||||
@@ -35,7 +35,7 @@
|
||||
|
||||
//#define DEBUG_PBCH
|
||||
|
||||
short nr_mod_table[MOD_TABLE_SIZE_SHORT] = {0,0,23170,23170,-23170,-23170};
|
||||
extern short *nr_mod_table;
|
||||
|
||||
int nr_generate_pbch_dmrs(uint32_t *gold_pbch_dmrs,
|
||||
int32_t **txdataF,
|
||||
@@ -53,8 +53,8 @@ int nr_generate_pbch_dmrs(uint32_t *gold_pbch_dmrs,
|
||||
|
||||
/// BPSK modulation
|
||||
for (m=0; m<NR_PBCH_DMRS_LENGTH; m++) {
|
||||
mod_dmrs[m<<1] = nr_mod_table[((1 + ((gold_pbch_dmrs[m>>5]&(1<<(m&0x1f)))>>(m&0x1f)))<<1)];
|
||||
mod_dmrs[(m<<1)+1] = nr_mod_table[((1 + ((gold_pbch_dmrs[m>>5]&(1<<(m&0x1f)))>>(m&0x1f)))<<1) + 1];
|
||||
mod_dmrs[m<<1] = nr_mod_table[((NR_MOD_TABLE_BPSK_OFFSET + ((gold_pbch_dmrs[m>>5]&(1<<(m&0x1f)))>>(m&0x1f)))<<1)];
|
||||
mod_dmrs[(m<<1)+1] = nr_mod_table[((NR_MOD_TABLE_BPSK_OFFSET + ((gold_pbch_dmrs[m>>5]&(1<<(m&0x1f)))>>(m&0x1f)))<<1) + 1];
|
||||
#ifdef DEBUG_PBCH
|
||||
printf("m %d mod_dmrs %d %d\n", m, mod_dmrs[2*m], mod_dmrs[2*m+1]);
|
||||
#endif
|
||||
@@ -121,5 +121,26 @@ int nr_generate_pbch_dmrs(uint32_t *gold_pbch_dmrs,
|
||||
#ifdef DEBUG_PBCH
|
||||
write_output("txdataF.m", "txdataF", txdataF[0], frame_parms->samples_per_frame_wCP>>1, 1, 1);
|
||||
#endif
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define NR_PBCH_LENGTH 1000
|
||||
|
||||
int nr_generate_pbch(NR_gNB_PBCH *pbch,
|
||||
uint8_t *pbch_pdu,
|
||||
int32_t **txdataF,
|
||||
int16_t amp,
|
||||
uint8_t ssb_start_symbol,
|
||||
uint8_t nu,
|
||||
nfapi_config_request_t* config,
|
||||
NR_DL_FRAME_PARMS *frame_parms)
|
||||
{
|
||||
|
||||
int m,k,l;
|
||||
int a, aa;
|
||||
int16_t mod_payload[2 * NR_PBCH_LENGTH];
|
||||
|
||||
LOG_I(PHY, "PBCH generation started\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -23,8 +23,6 @@
|
||||
|
||||
//#define NR_PSS_DEBUG
|
||||
|
||||
//short nr_mod_table[MOD_TABLE_SIZE_SHORT] = {0,0,768,768,-768,-768};
|
||||
|
||||
int nr_generate_pss( int16_t *d_pss,
|
||||
int32_t **txdataF,
|
||||
int16_t amp,
|
||||
|
||||
@@ -21,8 +21,6 @@
|
||||
|
||||
#include "PHY/defs_gNB.h"
|
||||
|
||||
extern short nr_mod_table[MOD_TABLE_SIZE_SHORT];
|
||||
|
||||
//#define NR_SSS_DEBUG
|
||||
|
||||
int nr_generate_sss( int16_t *d_sss,
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
|
||||
|
||||
#define MAX_BANDS_PER_RRU 4
|
||||
#define MAX_NUM_RU_PER_gNB MAX_NUM_RU_PER_eNB
|
||||
|
||||
|
||||
#ifdef OCP_FRAMEWORK
|
||||
|
||||
+14
-10
@@ -36,6 +36,10 @@
|
||||
#include "defs_nr_common.h"
|
||||
|
||||
|
||||
typedef struct {
|
||||
uint8_t pbch_d[100];
|
||||
} NR_gNB_PBCH;
|
||||
|
||||
typedef struct {
|
||||
/// \brief Pointers (dynamic) to the received data in the time domain.
|
||||
/// - first index: rx antenna [0..nb_antennas_rx[
|
||||
@@ -169,9 +173,9 @@ typedef struct gNB_proc_t_s {
|
||||
typedef struct {
|
||||
// common measurements
|
||||
//! estimated noise power (linear)
|
||||
unsigned int n0_power[MAX_NUM_RU_PER_eNB];
|
||||
unsigned int n0_power[MAX_NUM_RU_PER_gNB];
|
||||
//! estimated noise power (dB)
|
||||
unsigned short n0_power_dB[MAX_NUM_RU_PER_eNB];
|
||||
unsigned short n0_power_dB[MAX_NUM_RU_PER_gNB];
|
||||
//! total estimated noise power (linear)
|
||||
unsigned int n0_power_tot;
|
||||
//! estimated avg noise power (dB)
|
||||
@@ -179,9 +183,9 @@ typedef struct {
|
||||
//! estimated avg noise power (dB)
|
||||
short n0_power_tot_dBm;
|
||||
//! estimated avg noise power per RB per RX ant (lin)
|
||||
unsigned short n0_subband_power[MAX_NUM_RU_PER_eNB][100];
|
||||
unsigned short n0_subband_power[MAX_NUM_RU_PER_gNB][100];
|
||||
//! estimated avg noise power per RB per RX ant (dB)
|
||||
unsigned short n0_subband_power_dB[MAX_NUM_RU_PER_eNB][100];
|
||||
unsigned short n0_subband_power_dB[MAX_NUM_RU_PER_gNB][100];
|
||||
//! estimated avg noise power per RB (dB)
|
||||
short n0_subband_power_tot_dB[100];
|
||||
//! estimated avg noise power per RB (dBm)
|
||||
@@ -199,17 +203,17 @@ typedef struct {
|
||||
int rx_correlation_dB[NUMBER_OF_UE_MAX][2];
|
||||
|
||||
/// Wideband CQI (= SINR)
|
||||
int wideband_cqi[NUMBER_OF_UE_MAX][MAX_NUM_RU_PER_eNB];
|
||||
int wideband_cqi[NUMBER_OF_UE_MAX][MAX_NUM_RU_PER_gNB];
|
||||
/// Wideband CQI in dB (= SINR dB)
|
||||
int wideband_cqi_dB[NUMBER_OF_UE_MAX][MAX_NUM_RU_PER_eNB];
|
||||
int wideband_cqi_dB[NUMBER_OF_UE_MAX][MAX_NUM_RU_PER_gNB];
|
||||
/// Wideband CQI (sum of all RX antennas, in dB)
|
||||
char wideband_cqi_tot[NUMBER_OF_UE_MAX];
|
||||
/// Subband CQI per RX antenna and RB (= SINR)
|
||||
int subband_cqi[NUMBER_OF_UE_MAX][MAX_NUM_RU_PER_eNB][100];
|
||||
int subband_cqi[NUMBER_OF_UE_MAX][MAX_NUM_RU_PER_gNB][100];
|
||||
/// Total Subband CQI and RB (= SINR)
|
||||
int subband_cqi_tot[NUMBER_OF_UE_MAX][100];
|
||||
/// Subband CQI in dB and RB (= SINR dB)
|
||||
int subband_cqi_dB[NUMBER_OF_UE_MAX][MAX_NUM_RU_PER_eNB][100];
|
||||
int subband_cqi_dB[NUMBER_OF_UE_MAX][MAX_NUM_RU_PER_gNB][100];
|
||||
/// Total Subband CQI and RB
|
||||
int subband_cqi_tot_dB[NUMBER_OF_UE_MAX][100];
|
||||
/// PRACH background noise level
|
||||
@@ -226,7 +230,7 @@ typedef struct PHY_VARS_gNB_s {
|
||||
int single_thread_flag;
|
||||
int abstraction_flag;
|
||||
int num_RU;
|
||||
RU_t *RU_list[MAX_NUM_RU_PER_eNB];
|
||||
RU_t *RU_list[MAX_NUM_RU_PER_gNB];
|
||||
/// Ethernet parameters for northbound midhaul interface
|
||||
eth_params_t eth_params_n;
|
||||
/// Ethernet parameters for fronthaul interface
|
||||
@@ -262,7 +266,7 @@ typedef struct PHY_VARS_gNB_s {
|
||||
NR_gNB_COMMON common_vars;
|
||||
LTE_eNB_UCI uci_vars[NUMBER_OF_UE_MAX];
|
||||
LTE_eNB_SRS srs_vars[NUMBER_OF_UE_MAX];
|
||||
LTE_eNB_PBCH pbch;
|
||||
NR_gNB_PBCH pbch;
|
||||
LTE_eNB_PUSCH *pusch_vars[NUMBER_OF_UE_MAX];
|
||||
LTE_eNB_PRACH prach_vars;
|
||||
LTE_eNB_DLSCH_t *dlsch[NUMBER_OF_UE_MAX][2]; // Nusers times two spatial streams
|
||||
|
||||
@@ -51,8 +51,9 @@
|
||||
#define ONE_OVER_SQRT2_Q15 23170
|
||||
#define ONE_OVER_TWO_Q15 16384
|
||||
|
||||
#define MOD_TABLE_SIZE_SHORT 6
|
||||
#define MOD_TABLE_BPSK_OFFSET 1
|
||||
#define NR_MOD_TABLE_SIZE_SHORT 14
|
||||
#define NR_MOD_TABLE_BPSK_OFFSET 1
|
||||
#define NR_MOD_TABLE_QPSK_OFFSET 3
|
||||
|
||||
typedef enum {
|
||||
NR_MU_0=0,
|
||||
|
||||
@@ -138,6 +138,7 @@ void nr_common_signal_procedures (PHY_VARS_gNB *gNB,int frame, int subframe) {
|
||||
nr_generate_pss(gNB->d_pss, txdataF, AMP, ssb_start_symbol, cfg, fp);
|
||||
nr_generate_sss(gNB->d_sss, txdataF, AMP_OVER_2, ssb_start_symbol, cfg, fp);
|
||||
nr_generate_pbch_dmrs(gNB->nr_gold_pbch_dmrs[n_hf][ssb_index],txdataF, AMP_OVER_2, ssb_start_symbol, nu, cfg, fp);
|
||||
nr_generate_pbch(&gNB->pbch, pbch_pdu, txdataF, AMP_OVER_2, ssb_start_symbol, nu, cfg, fp);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -94,6 +94,8 @@ unsigned short config_frames[4] = {2,9,11,13};
|
||||
// current status is that every UE has a DL scope for a SINGLE eNB (gnb_id=0)
|
||||
// at eNB 0, an UL scope for every UE
|
||||
|
||||
short nr_mod_table[NR_MOD_TABLE_SIZE_SHORT] = {0,0,23170,23170,-23170,-23170,23170,23170,23170,-23170,-23170,23170,-23170,-23170};
|
||||
|
||||
FD_lte_phy_scope_ue *form_ue[NUMBER_OF_UE_MAX];
|
||||
FD_lte_phy_scope_enb *form_enb[MAX_NUM_CCs][NUMBER_OF_UE_MAX];
|
||||
FD_stats_form *form_stats=NULL,*form_stats_l2=NULL;
|
||||
|
||||
Reference in New Issue
Block a user