Commit 47658e56 authored by Raymond Knopp's avatar Raymond Knopp

addition of SLDCH transmission, SPSS table

parent 219ddeed
...@@ -935,45 +935,55 @@ int init_lte_ue_signal(PHY_VARS_UE *ue, ...@@ -935,45 +935,55 @@ int init_lte_ue_signal(PHY_VARS_UE *ue,
init_prach_tables(839); init_prach_tables(839);
ue->pusch_slsch = (LTE_eNB_PUSCH*)malloc(sizeof(LTE_eNB_PUSCH));
ue->pusch_slcch = (LTE_eNB_PUSCH*)malloc(sizeof(LTE_eNB_PUSCH));
ue->pusch_slcch = (LTE_eNB_PUSCH*)malloc(sizeof(LTE_eNB_PUSCH));
ue->pusch_slcch->rxdataF_ext = (int32_t **)malloc(2*sizeof(int32_t*));
ue->pusch_slcch->drs_ch_estimates = (int32_t **)malloc(2*sizeof(int32_t*));
ue->pusch_slcch->rxdataF_comp = (int32_t **)malloc(2*sizeof(int32_t*));
ue->pusch_slcch->ul_ch_mag = (int32_t **)malloc(2*sizeof(int32_t*));
ue->pusch_slsch = (LTE_eNB_PUSCH*)malloc(sizeof(LTE_eNB_PUSCH));
ue->pusch_slsch->rxdataF_ext = (int32_t **)malloc(2*sizeof(int32_t*)); ue->pusch_slsch->rxdataF_ext = (int32_t **)malloc(2*sizeof(int32_t*));
ue->pusch_slsch->drs_ch_estimates = (int32_t **)malloc(2*sizeof(int32_t*)); ue->pusch_slsch->drs_ch_estimates = (int32_t **)malloc(2*sizeof(int32_t*));
ue->pusch_slsch->rxdataF_comp = (int32_t **)malloc(2*sizeof(int32_t*)); ue->pusch_slsch->rxdataF_comp = (int32_t **)malloc(2*sizeof(int32_t*));
ue->pusch_slsch->ul_ch_mag = (int32_t **)malloc(2*sizeof(int32_t*)); ue->pusch_slsch->ul_ch_mag = (int32_t **)malloc(2*sizeof(int32_t*));
ue->slsch_rxdata_7_5kHz = (int16_t **)malloc(2*sizeof(int32_t*));
ue->slsch_rxdataF = (int16_t **)malloc(2*sizeof(int32_t*)); ue->pusch_sldch = (LTE_eNB_PUSCH*)malloc(sizeof(LTE_eNB_PUSCH));
ue->pusch_sldch->rxdataF_ext = (int32_t **)malloc(2*sizeof(int32_t*));
ue->pusch_sldch->drs_ch_estimates = (int32_t **)malloc(2*sizeof(int32_t*));
ue->pusch_sldch->rxdataF_comp = (int32_t **)malloc(2*sizeof(int32_t*));
ue->pusch_sldch->ul_ch_mag = (int32_t **)malloc(2*sizeof(int32_t*));
ue->sl_rxdata_7_5kHz = (int16_t **)malloc(2*sizeof(int32_t*));
ue->sl_rxdataF = (int16_t **)malloc(2*sizeof(int32_t*));
for (int aa=0;aa<ue->frame_parms.nb_antennas_rx;aa++) { for (int aa=0;aa<ue->frame_parms.nb_antennas_rx;aa++) {
ue->sl_rxdataF[aa] = (int16_t*)malloc16_clear(ue->frame_parms.ofdm_symbol_size*14*sizeof(int32_t));
ue->sl_rxdata_7_5kHz[aa] = (int16_t*)malloc16_clear(ue->frame_parms.samples_per_tti*sizeof(int32_t));
ue->pusch_slcch->rxdataF_ext[aa] = (int32_t*)malloc16_clear(ue->frame_parms.N_RB_DL*12*14*sizeof(int32_t));
ue->pusch_slcch->drs_ch_estimates[aa] = (int32_t*)malloc16_clear(ue->frame_parms.N_RB_DL*12*14*sizeof(int32_t));
ue->pusch_slcch->rxdataF_comp[aa] = (int32_t*)malloc16_clear(ue->frame_parms.N_RB_DL*12*14*sizeof(int32_t));
ue->pusch_slcch->ul_ch_mag[aa] = (int32_t*)malloc16_clear(ue->frame_parms.N_RB_DL*12*14*sizeof(int32_t));
ue->pusch_slsch->rxdataF_ext[aa] = (int32_t*)malloc16_clear(ue->frame_parms.N_RB_DL*12*14*sizeof(int32_t)); ue->pusch_slsch->rxdataF_ext[aa] = (int32_t*)malloc16_clear(ue->frame_parms.N_RB_DL*12*14*sizeof(int32_t));
ue->pusch_slsch->drs_ch_estimates[aa] = (int32_t*)malloc16_clear(ue->frame_parms.N_RB_DL*12*14*sizeof(int32_t)); ue->pusch_slsch->drs_ch_estimates[aa] = (int32_t*)malloc16_clear(ue->frame_parms.N_RB_DL*12*14*sizeof(int32_t));
ue->pusch_slsch->rxdataF_comp[aa] = (int32_t*)malloc16_clear(ue->frame_parms.N_RB_DL*12*14*sizeof(int32_t)); ue->pusch_slsch->rxdataF_comp[aa] = (int32_t*)malloc16_clear(ue->frame_parms.N_RB_DL*12*14*sizeof(int32_t));
ue->pusch_slsch->ul_ch_mag[aa] = (int32_t*)malloc16_clear(ue->frame_parms.N_RB_DL*12*14*sizeof(int32_t)); ue->pusch_slsch->ul_ch_mag[aa] = (int32_t*)malloc16_clear(ue->frame_parms.N_RB_DL*12*14*sizeof(int32_t));
ue->slsch_rxdataF[aa] = (int16_t*)malloc16_clear(ue->frame_parms.ofdm_symbol_size*14*sizeof(int32_t)); ue->pusch_sldch->rxdataF_ext[aa] = (int32_t*)malloc16_clear(ue->frame_parms.N_RB_DL*12*14*sizeof(int32_t));
ue->slsch_rxdata_7_5kHz[aa] = (int16_t*)malloc16_clear(ue->frame_parms.samples_per_tti*sizeof(int32_t)); ue->pusch_sldch->drs_ch_estimates[aa] = (int32_t*)malloc16_clear(ue->frame_parms.N_RB_DL*12*14*sizeof(int32_t));
ue->pusch_sldch->rxdataF_comp[aa] = (int32_t*)malloc16_clear(ue->frame_parms.N_RB_DL*12*14*sizeof(int32_t));
ue->pusch_sldch->ul_ch_mag[aa] = (int32_t*)malloc16_clear(ue->frame_parms.N_RB_DL*12*14*sizeof(int32_t));
} }
ue->slsch_dlsch_llr = (int16_t **)malloc(2*6*12*1200*sizeof(int16_t*)); ue->slsch_dlsch_llr = (int16_t **)malloc(2*6*12*1200*sizeof(int16_t*));
ue->slsch_ulsch_llr = (int16_t **)malloc(2*6*12*1200*sizeof(int16_t*)); ue->slsch_ulsch_llr = (int16_t **)malloc(2*6*12*1200*sizeof(int16_t*));
ue->sldch_dlsch_llr = (int16_t **)malloc(2*2*12*1200*sizeof(int16_t*));
ue->sldch_ulsch_llr = (int16_t **)malloc(2*2*12*1200*sizeof(int16_t*));
ue->pusch_slcch = (LTE_eNB_PUSCH*)malloc(sizeof(LTE_eNB_PUSCH));
ue->pusch_slcch->rxdataF_ext = (int32_t **)malloc(2*sizeof(int32_t*));
ue->pusch_slcch->drs_ch_estimates = (int32_t **)malloc(2*sizeof(int32_t*));
ue->pusch_slcch->rxdataF_comp = (int32_t **)malloc(2*sizeof(int32_t*));
ue->pusch_slcch->ul_ch_mag = (int32_t **)malloc(2*sizeof(int32_t*));
ue->slcch_rxdata_7_5kHz = (int16_t **)malloc(2*sizeof(int32_t*));
ue->slcch_rxdataF = (int16_t **)malloc(2*sizeof(int32_t*));
for (int aa=0;aa<ue->frame_parms.nb_antennas_rx;aa++) {
ue->pusch_slcch->rxdataF_ext[aa] = (int32_t*)malloc16_clear(ue->frame_parms.N_RB_DL*12*14*sizeof(int32_t));
ue->pusch_slcch->drs_ch_estimates[aa] = (int32_t*)malloc16_clear(ue->frame_parms.N_RB_DL*12*14*sizeof(int32_t));
ue->pusch_slcch->rxdataF_comp[aa] = (int32_t*)malloc16_clear(ue->frame_parms.N_RB_DL*12*14*sizeof(int32_t));
ue->pusch_slcch->ul_ch_mag[aa] = (int32_t*)malloc16_clear(ue->frame_parms.N_RB_DL*12*14*sizeof(int32_t));
ue->slcch_rxdataF[aa] = (int16_t*)malloc16_clear(ue->frame_parms.ofdm_symbol_size*14*sizeof(int32_t));
ue->slcch_rxdata_7_5kHz[aa] = (int16_t*)malloc16_clear(ue->frame_parms.samples_per_tti*sizeof(int32_t));
}
return 0; return 0;
} }
...@@ -999,6 +1009,7 @@ void init_lte_ue_transport(PHY_VARS_UE *ue,int abstraction_flag) { ...@@ -999,6 +1009,7 @@ void init_lte_ue_transport(PHY_VARS_UE *ue,int abstraction_flag) {
} }
ue->dlsch_rx_slsch = new_ue_dlsch(1,4,NSOFT,1,MAX_TURBO_ITERATIONS,ue->frame_parms.N_RB_DL, abstraction_flag); ue->dlsch_rx_slsch = new_ue_dlsch(1,4,NSOFT,1,MAX_TURBO_ITERATIONS,ue->frame_parms.N_RB_DL, abstraction_flag);
for (int i=0;i<MAX_SLDCH;i++) ue->dlsch_rx_sldch[i] = new_ue_dlsch(1,4,NSOFT,1,MAX_TURBO_ITERATIONS,ue->frame_parms.N_RB_DL, abstraction_flag);
ue->dlsch_slsch = new_eNB_dlsch(1,1,NSOFT,ue->frame_parms.N_RB_DL, abstraction_flag,&ue->frame_parms); ue->dlsch_slsch = new_eNB_dlsch(1,1,NSOFT,ue->frame_parms.N_RB_DL, abstraction_flag,&ue->frame_parms);
ue->ulsch_slsch = new_ue_ulsch(ue->frame_parms.N_RB_DL, abstraction_flag); ue->ulsch_slsch = new_ue_ulsch(ue->frame_parms.N_RB_DL, abstraction_flag);
for (i=0;i<10;i++) ue->dlsch_slsch->harq_ids[i] = 0; for (i=0;i<10;i++) ue->dlsch_slsch->harq_ids[i] = 0;
...@@ -1015,34 +1026,37 @@ void init_lte_ue_transport(PHY_VARS_UE *ue,int abstraction_flag) { ...@@ -1015,34 +1026,37 @@ void init_lte_ue_transport(PHY_VARS_UE *ue,int abstraction_flag) {
void free_ue_resources(PHY_VARS_UE *ue) { void free_ue_resources(PHY_VARS_UE *ue) {
for (int aa=0;aa<ue->frame_parms.nb_antennas_rx;aa++) { for (int aa=0;aa<ue->frame_parms.nb_antennas_rx;aa++) {
free(ue->sl_rxdataF[aa]);
free(ue->sl_rxdata_7_5kHz[aa]);
free(ue->pusch_slcch->rxdataF_ext[aa]); free(ue->pusch_slcch->rxdataF_ext[aa]);
free(ue->pusch_slcch->drs_ch_estimates[aa]); free(ue->pusch_slcch->drs_ch_estimates[aa]);
free(ue->pusch_slcch->rxdataF_comp[aa]); free(ue->pusch_slcch->rxdataF_comp[aa]);
free(ue->pusch_slcch->ul_ch_mag[aa]); free(ue->pusch_slcch->ul_ch_mag[aa]);
free(ue->slcch_rxdataF[aa]);
free(ue->slcch_rxdata_7_5kHz[aa]);
}
free(ue->pusch_slcch->rxdataF_ext);
free(ue->pusch_slcch->drs_ch_estimates);
free(ue->pusch_slcch->rxdataF_comp);
free(ue->pusch_slcch->ul_ch_mag);
free(ue->slcch_rxdataF);
free(ue->slcch_rxdata_7_5kHz);
for (int aa=0;aa<ue->frame_parms.nb_antennas_rx;aa++) {
free(ue->pusch_slsch->rxdataF_ext[aa]); free(ue->pusch_slsch->rxdataF_ext[aa]);
free(ue->pusch_slsch->drs_ch_estimates[aa]); free(ue->pusch_slsch->drs_ch_estimates[aa]);
free(ue->pusch_slsch->rxdataF_comp[aa]); free(ue->pusch_slsch->rxdataF_comp[aa]);
free(ue->pusch_slsch->ul_ch_mag[aa]); free(ue->pusch_slsch->ul_ch_mag[aa]);
free(ue->slsch_rxdataF[aa]); free(ue->pusch_sldch->rxdataF_ext[aa]);
free(ue->slsch_rxdata_7_5kHz[aa]); free(ue->pusch_sldch->drs_ch_estimates[aa]);
free(ue->pusch_sldch->rxdataF_comp[aa]);
free(ue->pusch_sldch->ul_ch_mag[aa]);
} }
free(ue->sl_rxdataF);
free(ue->sl_rxdata_7_5kHz);
free(ue->pusch_slcch->rxdataF_ext);
free(ue->pusch_slcch->drs_ch_estimates);
free(ue->pusch_slcch->rxdataF_comp);
free(ue->pusch_slcch->ul_ch_mag);
free(ue->pusch_slsch->rxdataF_ext); free(ue->pusch_slsch->rxdataF_ext);
free(ue->pusch_slsch->drs_ch_estimates); free(ue->pusch_slsch->drs_ch_estimates);
free(ue->pusch_slsch->rxdataF_comp); free(ue->pusch_slsch->rxdataF_comp);
free(ue->pusch_slsch->ul_ch_mag); free(ue->pusch_slsch->ul_ch_mag);
free(ue->slsch_rxdataF); free(ue->pusch_sldch->rxdataF_ext);
free(ue->slsch_rxdata_7_5kHz); free(ue->pusch_sldch->drs_ch_estimates);
free(ue->pusch_sldch->rxdataF_comp);
free(ue->pusch_sldch->ul_ch_mag);
free(ue->slsch_dlsch_llr); free(ue->slsch_dlsch_llr);
free(ue->slsch_ulsch_llr); free(ue->slsch_ulsch_llr);
free(ue->sldch_dlsch_llr);
free(ue->sldch_ulsch_llr);
} }
...@@ -2,6 +2,7 @@ primary_synch0 = [zeros(1,5) exp(-1j*pi*25*(0:30).*(1:31)/63) exp(-1j*pi*25*(32: ...@@ -2,6 +2,7 @@ primary_synch0 = [zeros(1,5) exp(-1j*pi*25*(0:30).*(1:31)/63) exp(-1j*pi*25*(32:
primary_synch1 = [zeros(1,5) exp(-1j*pi*29*(0:30).*(1:31)/63) exp(-1j*pi*29*(32:62).*(33:63)/63) zeros(1,5)]; primary_synch1 = [zeros(1,5) exp(-1j*pi*29*(0:30).*(1:31)/63) exp(-1j*pi*29*(32:62).*(33:63)/63) zeros(1,5)];
primary_synch2 = [zeros(1,5) exp(-1j*pi*34*(0:30).*(1:31)/63) exp(-1j*pi*34*(32:62).*(33:63)/63) zeros(1,5)]; primary_synch2 = [zeros(1,5) exp(-1j*pi*34*(0:30).*(1:31)/63) exp(-1j*pi*34*(32:62).*(33:63)/63) zeros(1,5)];
%psync_table = [0 exp(-j*2*pi*(0:62)/63)]; %psync_table = [0 exp(-j*2*pi*(0:62)/63)];
%psync_table_mod = zeros(1,63*2); %psync_table_mod = zeros(1,63*2);
%psync_table_mod(1:2:end) = floor(32767/sqrt(2)*real(psync_table)); %psync_table_mod(1:2:end) = floor(32767/sqrt(2)*real(psync_table));
...@@ -23,6 +24,14 @@ primary_synch2_mod = zeros(1,72*2); ...@@ -23,6 +24,14 @@ primary_synch2_mod = zeros(1,72*2);
primary_synch2_mod(1:2:end) = floor(32767*real(primary_synch2)); primary_synch2_mod(1:2:end) = floor(32767*real(primary_synch2));
primary_synch2_mod(2:2:end) = floor(32767*imag(primary_synch2)); primary_synch2_mod(2:2:end) = floor(32767*imag(primary_synch2));
primary_synch0SL_mod = zeros(1,72*2);
primary_synch0SL_mod(1:2:end) = floor(32767*real(primary_synch0_SL));
primary_synch0SL_mod(2:2:end) = floor(32767*imag(primary_synch0_SL));
primary_synch1SL_mod = zeros(1,72*2);
primary_synch1SL_mod(1:2:end) = floor(32767*real(primary_synch1_SL));
primary_synch1SL_mod(2:2:end) = floor(32767*imag(primary_synch1_SL));
primary_synch0_mod2 = zeros(1,128); primary_synch0_mod2 = zeros(1,128);
primary_synch0_mod2((128-35):128)=primary_synch0(1:36); primary_synch0_mod2((128-35):128)=primary_synch0(1:36);
primary_synch0_mod2(2:37)=primary_synch0(37:end); primary_synch0_mod2(2:37)=primary_synch0(37:end);
...@@ -59,24 +68,22 @@ fprintf(fd,'%d,',primary_synch2_tab(1:end-1)); ...@@ -59,24 +68,22 @@ fprintf(fd,'%d,',primary_synch2_tab(1:end-1));
fprintf(fd,'%d};\n',primary_synch2_tab(end)); fprintf(fd,'%d};\n',primary_synch2_tab(end));
fclose(fd); fclose(fd);
% for LEON we need to invert the endianess primary_synch0_SL = [zeros(1,5) exp(-1j*pi*26*(0:30).*(1:31)/63) exp(-1j*pi*26*(32:62).*(33:63)/63) zeros(1,5)];
fd = fopen('primary_synch_leon.h','w'); primary_synch1_SL = [zeros(1,5) exp(-1j*pi*37*(0:30).*(1:31)/63) exp(-1j*pi*37*(32:62).*(33:63)/63) zeros(1,5)];
primary_synch0_tab = reshape(primary_synch0_tab,4,[]);
primary_synch0_tab = primary_synch0_tab([4 3 2 1],:); primary_synch0SL_mod = zeros(1,72*2);
primary_synch0_tab = primary_synch0_tab(:); primary_synch0SL_mod(1:2:end) = floor(32767*real(primary_synch0_SL));
primary_synch1_tab = reshape(primary_synch0_tab,4,[]); primary_synch0SL_mod(2:2:end) = floor(32767*imag(primary_synch0_SL));
primary_synch1_tab = primary_synch1_tab([4 3 2 1],:);
primary_synch1_tab = primary_synch1_tab(:); primary_synch1SL_mod = zeros(1,72*2);
primary_synch2_tab = reshape(primary_synch0_tab,4,[]); primary_synch1SL_mod(1:2:end) = floor(32767*real(primary_synch1_SL));
primary_synch2_tab = primary_synch2_tab([4 3 2 1],:); primary_synch1SL_mod(2:2:end) = floor(32767*imag(primary_synch1_SL));
primary_synch2_tab = primary_synch2_tab(:);
fprintf(fd,'unsigned char primary_synch0_tab[72] = {'); fd = fopen('primary_synch_SL.h','w');
fprintf(fd,'%d,',primary_synch0_tab(1:end-1)); fprintf(fd,'short primary_synch0SL[144] = {');
fprintf(fd,'%d};\n',primary_synch0_tab(end)); fprintf(fd,'%d,',primary_synch0SL_mod(1:end-1));
fprintf(fd,'unsigned char primary_synch1_tab[72] = {'); fprintf(fd,'%d};\n',primary_synch0SL_mod(end));
fprintf(fd,'%d,',primary_synch1_tab(1:end-1)); fprintf(fd,'short primary_synch1SL[144] = {');
fprintf(fd,'%d};\n',primary_synch1_tab(end)); fprintf(fd,'%d,',primary_synch1SL_mod(1:end-1));
fprintf(fd,'unsigned char primary_synch2_tab[72] = {'); fprintf(fd,'%d};\n',primary_synch1SL_mod(end));
fprintf(fd,'%d,',primary_synch2_tab(1:end-1));
fprintf(fd,'%d};\n',primary_synch2_tab(end));
fclose(fd); fclose(fd);
short primary_synch0SL[144] = {0,0,0,0,0,0,0,0,0,0,32767,0,-27960,-17086,2448,-32676,-32402,-4884,22879,-23457,11971,-30502,-16384,28377,-30791,11206,20429,25618,-29523,14217,-10436,31060,2448,-32676,11971,-30502,-30791,11206,-16384,-28378,-32402,4883,22879,-23457,20429,-25619,-29523,14217,-27960,-17086,-16384,28377,-16384,-28378,-27960,-17086,27073,18458,11971,30501,22879,-23457,20429,25618,32767,-1,-30791,11206,-32402,4883,27073,18458,27073,18458,-32402,4883,-30791,11206,32767,0,20429,25618,22879,-23457,11971,30501,27073,18458,-27960,-17086,-16384,-28378,-16384,28377,-27960,-17086,-29523,14217,20429,-25619,22879,-23457,-32402,4883,-16384,-28378,-30791,11206,11971,-30502,2448,-32676,-10436,31060,-29523,14217,20429,25618,-30791,11206,-16384,28377,11971,-30502,22879,-23457,-32402,-4884,2448,-32676,-27960,-17086,32767,-1,0,0,0,0,0,0,0,0,0,0};
short primary_synch1SL[144] = {0,0,0,0,0,0,0,0,0,0,32767,0,-27960,17085,2448,32675,-32402,4883,22879,23456,11971,30501,-16384,-28378,-30791,-11207,20429,-25619,-29523,-14218,-10436,-31061,2448,32675,11971,30501,-30791,-11207,-16384,28377,-32402,-4884,22879,23456,20429,25618,-29523,-14218,-27960,17085,-16384,-28378,-16384,28377,-27960,17085,27073,-18459,11971,-30502,22879,23456,20429,-25619,32767,0,-30791,-11207,-32402,-4884,27073,-18459,27073,-18459,-32402,-4884,-30791,-11207,32767,0,20429,-25619,22879,23456,11971,-30502,27073,-18459,-27960,17085,-16384,28377,-16384,-28378,-27960,17085,-29523,-14218,20429,25618,22879,23456,-32402,-4884,-16384,28377,-30791,-11207,11971,30501,2448,32675,-10436,-31061,-29523,-14218,20429,-25619,-30791,-11207,-16384,-28378,11971,30501,22879,23456,-32402,4883,2448,32675,-27960,17085,32767,-1,0,0,0,0,0,0,0,0,0,0};
...@@ -941,8 +941,15 @@ typedef struct { ...@@ -941,8 +941,15 @@ typedef struct {
uint8_t ljmod10; uint8_t ljmod10;
} SLSCH_t; } SLSCH_t;
typedef enum {
disc_type1=0,
disc_type2B=1
} SLD_t;
typedef struct { typedef struct {
// SL Configuration // SL Discovery Configuration
/// Discovery Type
SLD_t type;
/// Number of SL resource blocks (1-100) /// Number of SL resource blocks (1-100)
uint32_t N_SL_RB; uint32_t N_SL_RB;
/// prb-start (0-99) /// prb-start (0-99)
...@@ -955,12 +962,26 @@ typedef struct { ...@@ -955,12 +962,26 @@ typedef struct {
uint32_t discPeriod; uint32_t discPeriod;
/// Number of Repetitions (N_R) /// Number of Repetitions (N_R)
uint32_t numRepetitions; uint32_t numRepetitions;
/// Number of retransmissions (numRetx-r12)
uint32_t numRetx;
/// PSDCH subframe bitmap (up to 100 bits, first 64)6 /// PSDCH subframe bitmap (up to 100 bits, first 64)6
uint64_t bitmap1; uint64_t bitmap1;
/// PSDCH subframe bitmap (up to 100 bits, second 36) /// PSDCH subframe bitmap (up to 100 bits, second 36)
uint64_t bitmap2; uint64_t bitmap2;
/// Bitmap length (N_B) (valid values (4,8,12,16,30,40,42) Rel12, (16,20,100) Rel14 /// Bitmap length (N_B) (valid values (4,8,12,16,30,40,42) Rel12, (16,20,100) Rel14
uint32_t bitmap_length; uint32_t bitmap_length;
/// N1_PSDCH (a-r12)
uint32_t N1;
/// N1_PSDCH (b-r12)
uint32_t N2;
/// N1_PSDCH (c-r12)
uint32_t N3;
/// a10 (discPRB-Index)
uint32_t a10;
/// b10 (discSF-Index)
uint32_t b10;
/// transmission index (j)
uint32_t j;
// Discovery resource // Discovery resource
uint32_t n_psdch; uint32_t n_psdch;
/// payload length /// payload length
......
...@@ -109,9 +109,15 @@ int generate_drs_pusch(PHY_VARS_UE *ue, ...@@ -109,9 +109,15 @@ int generate_drs_pusch(PHY_VARS_UE *ue,
case PSSCH_34: case PSSCH_34:
AssertFatal(1==0,"SL Transmission type 3/4 not supported for now\n"); AssertFatal(1==0,"SL Transmission type 3/4 not supported for now\n");
break; break;
case PSDCH_ODD: case PSDCH:
case PSDCH_EVEN: u0=0;
AssertFatal(1==0,"PSDCH Transmission not supported for now\n"); u1=0;
v0=0;
v1=0;
cyclic_shift0 = 0;
cyclic_shift1 = 0;
lstart = (3 - frame_parms->Ncp);
linc = (7 - frame_parms->Ncp);
break; break;
case PSBCH: case PSBCH:
AssertFatal(1==0,"PSBCH Transmission not supported for now\n"); AssertFatal(1==0,"PSBCH Transmission not supported for now\n");
......
This diff is collapsed.
...@@ -398,7 +398,7 @@ void pscch_codingmodulation(PHY_VARS_UE *ue,int frame_tx,int subframe_tx,uint32_ ...@@ -398,7 +398,7 @@ void pscch_codingmodulation(PHY_VARS_UE *ue,int frame_tx,int subframe_tx,uint32_
uint32_t amod = a%(slsch->N_SL_RB); uint32_t amod = a%(slsch->N_SL_RB);
if (amod<(slsch->N_SL_RB>>1)) nprb = slsch->prb_Start + amod; if (amod<(slsch->N_SL_RB>>1)) nprb = slsch->prb_Start + amod;
else nprb = slsch->prb_End-slsch->N_SL_RB+amod; else nprb = slsch->prb_End-(slsch->N_SL_RB>>1)+amod;
// Fill in power control later // Fill in power control later
...@@ -497,7 +497,7 @@ void slsch_codingmodulation(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_tx,in ...@@ -497,7 +497,7 @@ void slsch_codingmodulation(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_tx,in
AssertFatal(slsch!=NULL,"ue->slsch is null\n"); AssertFatal(slsch!=NULL,"ue->slsch is null\n");
AssertFatal(ue->slsch_sdu_active > 0,"ue->slsch_sdu_active is G=\n"); AssertFatal(ue->slsch_sdu_active > 0,"ue->slsch_sdu_active isn't active\n");
LOG_I(PHY,"Generating SLSCH for rvidx %d, group_id %d, mcs %d, resource first rb %d, L_crbs %d\n", LOG_I(PHY,"Generating SLSCH for rvidx %d, group_id %d, mcs %d, resource first rb %d, L_crbs %d\n",
slsch->rvidx,slsch->group_destination_id,slsch->mcs,slsch->RB_start,slsch->L_CRBs); slsch->rvidx,slsch->group_destination_id,slsch->mcs,slsch->RB_start,slsch->L_CRBs);
...@@ -779,8 +779,8 @@ void pscch_decoding(PHY_VARS_UE *ue,int frame_rx,int subframe_rx,int a,int slot) ...@@ -779,8 +779,8 @@ void pscch_decoding(PHY_VARS_UE *ue,int frame_rx,int subframe_rx,int a,int slot)
int16_t **drs_ch_estimates = ue->pusch_slcch->drs_ch_estimates; int16_t **drs_ch_estimates = ue->pusch_slcch->drs_ch_estimates;
int16_t **rxdataF_comp = ue->pusch_slcch->rxdataF_comp; int16_t **rxdataF_comp = ue->pusch_slcch->rxdataF_comp;
int16_t **ul_ch_mag = ue->pusch_slcch->ul_ch_mag; int16_t **ul_ch_mag = ue->pusch_slcch->ul_ch_mag;
int16_t **rxdata_7_5kHz = ue->slcch_rxdata_7_5kHz; int16_t **rxdata_7_5kHz = ue->sl_rxdata_7_5kHz;
int16_t **rxdataF = ue->slcch_rxdataF; int16_t **rxdataF = ue->sl_rxdataF;
int32_t avgs; int32_t avgs;
uint8_t log2_maxh=0; uint8_t log2_maxh=0;
int32_t avgU[2]; int32_t avgU[2];
...@@ -791,9 +791,10 @@ void pscch_decoding(PHY_VARS_UE *ue,int frame_rx,int subframe_rx,int a,int slot) ...@@ -791,9 +791,10 @@ void pscch_decoding(PHY_VARS_UE *ue,int frame_rx,int subframe_rx,int a,int slot)
if (amod<(slsch->N_SL_RB>>1)) nprb = slsch->prb_Start + amod; if (amod<(slsch->N_SL_RB>>1)) nprb = slsch->prb_Start + amod;
else nprb = slsch->prb_End-slsch->N_SL_RB+amod; else nprb = slsch->prb_End-(slsch->N_SL_RB>>1)+amod;
// slot FEP // slot FEP
if (ue->sl_fep_done == 0) {
RU_t ru_tmp; RU_t ru_tmp;
memset((void*)&ru_tmp,0,sizeof(RU_t)); memset((void*)&ru_tmp,0,sizeof(RU_t));
...@@ -811,9 +812,10 @@ void pscch_decoding(PHY_VARS_UE *ue,int frame_rx,int subframe_rx,int a,int slot) ...@@ -811,9 +812,10 @@ void pscch_decoding(PHY_VARS_UE *ue,int frame_rx,int subframe_rx,int a,int slot)
write_output("rxsig0_input.m","rxs0_in",&ue->common_vars.rxdata[0][((subframe_rx<<1)+slot)*ue->frame_parms.samples_per_tti>>1],ue->frame_parms.samples_per_tti>>1,1,1); write_output("rxsig0_input.m","rxs0_in",&ue->common_vars.rxdata[0][((subframe_rx<<1)+slot)*ue->frame_parms.samples_per_tti>>1],ue->frame_parms.samples_per_tti>>1,1,1);
write_output("rxsig0_7_5kHz.m","rxs0_7_5kHz",rxdata_7_5kHz[0],ue->frame_parms.samples_per_tti,1,1); write_output("rxsig0_7_5kHz.m","rxs0_7_5kHz",rxdata_7_5kHz[0],ue->frame_parms.samples_per_tti,1,1);
#endif #endif
for (int l=0; l<Nsymb; l++) slot_fep_ul(&ru_tmp,l,(subframe_rx<<1)+slot,0);
}
// extract symbols from slot // extract symbols from slot
for (int l=0; l<Nsymb; l++) { for (int l=0; l<Nsymb; l++) {
slot_fep_ul(&ru_tmp,l,(subframe_rx<<1)+slot,0);
ulsch_extract_rbs_single((int32_t **)rxdataF, ulsch_extract_rbs_single((int32_t **)rxdataF,
(int32_t **)rxdataF_ext, (int32_t **)rxdataF_ext,
nprb, nprb,
...@@ -1116,8 +1118,8 @@ void slsch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra ...@@ -1116,8 +1118,8 @@ void slsch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
int16_t **drs_ch_estimates = ue->pusch_slsch->drs_ch_estimates; int16_t **drs_ch_estimates = ue->pusch_slsch->drs_ch_estimates;
int16_t **rxdataF_comp = ue->pusch_slsch->rxdataF_comp; int16_t **rxdataF_comp = ue->pusch_slsch->rxdataF_comp;
int16_t **ul_ch_mag = ue->pusch_slsch->ul_ch_mag; int16_t **ul_ch_mag = ue->pusch_slsch->ul_ch_mag;
int16_t **rxdata_7_5kHz = ue->slsch_rxdata_7_5kHz; int16_t **rxdata_7_5kHz = ue->sl_rxdata_7_5kHz;
int16_t **rxdataF = ue->slsch_rxdataF; int16_t **rxdataF = ue->sl_rxdataF;
int32_t avgs; int32_t avgs;
uint8_t log2_maxh=0; uint8_t log2_maxh=0;
int32_t avgU[2]; int32_t avgU[2];
...@@ -1126,6 +1128,8 @@ void slsch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra ...@@ -1126,6 +1128,8 @@ void slsch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
LOG_I(PHY,"slsch_decoding %d.%d => lmod10 %d\n",frame_rx,subframe_rx,ljmod10); LOG_I(PHY,"slsch_decoding %d.%d => lmod10 %d\n",frame_rx,subframe_rx,ljmod10);
// slot FEP // slot FEP
if (ue->sl_fep_done == 0) {
ue->sl_fep_done = 1;
RU_t ru_tmp; RU_t ru_tmp;
memset((void*)&ru_tmp,0,sizeof(RU_t)); memset((void*)&ru_tmp,0,sizeof(RU_t));
...@@ -1139,10 +1143,15 @@ void slsch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra ...@@ -1139,10 +1143,15 @@ void slsch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
remove_7_5_kHz(&ru_tmp,(subframe_rx<<1)); remove_7_5_kHz(&ru_tmp,(subframe_rx<<1));
remove_7_5_kHz(&ru_tmp,(subframe_rx<<1)+1); remove_7_5_kHz(&ru_tmp,(subframe_rx<<1)+1);
// extract symbols from slot
for (int l=0; l<Nsymb; l++) { for (int l=0; l<Nsymb; l++) {
slot_fep_ul(&ru_tmp,l,(subframe_rx<<1),0); slot_fep_ul(&ru_tmp,l,(subframe_rx<<1),0);
if (l<Nsymb-1) // skip last symbol in second slot
slot_fep_ul(&ru_tmp,l,(subframe_rx<<1)+1,0);
}
LOG_I(PHY,"SLSCH Slot FEP %d.%d\n",frame_rx,subframe_rx);
}
// extract symbols from slot
for (int l=0; l<Nsymb; l++) {
ulsch_extract_rbs_single((int32_t**)rxdataF, ulsch_extract_rbs_single((int32_t**)rxdataF,
(int32_t**)rxdataF_ext, (int32_t**)rxdataF_ext,
slsch->RB_start, slsch->RB_start,
...@@ -1152,8 +1161,6 @@ void slsch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra ...@@ -1152,8 +1161,6 @@ void slsch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
&ue->frame_parms); &ue->frame_parms);
if (l<Nsymb-1) { // skip last symbol in second slot if (l<Nsymb-1) { // skip last symbol in second slot
slot_fep_ul(&ru_tmp,l,(subframe_rx<<1)+1,0);
ulsch_extract_rbs_single((int32_t**)rxdataF, ulsch_extract_rbs_single((int32_t**)rxdataF,
(int32_t**)rxdataF_ext, (int32_t**)rxdataF_ext,
slsch->RB_start, slsch->RB_start,
...@@ -1263,9 +1270,9 @@ void slsch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra ...@@ -1263,9 +1270,9 @@ void slsch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
rxdataF_comp[0], rxdataF_comp[0],
slsch->L_CRBs*12); slsch->L_CRBs*12);
//#ifdef PSSCH_DEBUG #ifdef PSSCH_DEBUG
write_output("slsch_rxF_comp.m","slschrxF_comp",rxdataF_comp[0],ue->frame_parms.N_RB_UL*12*14,1,1); write_output("slsch_rxF_comp.m","slschrxF_comp",rxdataF_comp[0],ue->frame_parms.N_RB_UL*12*14,1,1);
//#endif #endif
int E = 12*Qm*slsch->L_CRBs*((Nsymb-1)<<1); int E = 12*Qm*slsch->L_CRBs*((Nsymb-1)<<1);
...@@ -1316,10 +1323,11 @@ void slsch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra ...@@ -1316,10 +1323,11 @@ void slsch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
} }
} }
#ifdef PSSCH_DEBUG
write_output("slsch_llr.m","slschllr",ue->slsch_ulsch_llr, write_output("slsch_llr.m","slschllr",ue->slsch_ulsch_llr,
12*Qm*(ue->frame_parms.symbols_per_tti), 12*slsch->L_CRBs*Qm*(ue->frame_parms.symbols_per_tti-2),
1,0); 1,0);
#endif
// unscrambling // unscrambling
...@@ -1414,6 +1422,7 @@ void slsch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra ...@@ -1414,6 +1422,7 @@ void slsch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
else LOG_I(PHY,"sLSCH received in error for rvidx %d round %d (L_CRBs %d, mcs %d)\n", else LOG_I(PHY,"sLSCH received in error for rvidx %d round %d (L_CRBs %d, mcs %d)\n",
slsch->rvidx,(ue->dlsch_rx_slsch->harq_processes[0]->round+3)&3,slsch->L_CRBs,slsch->mcs); slsch->rvidx,(ue->dlsch_rx_slsch->harq_processes[0]->round+3)&3,slsch->L_CRBs,slsch->mcs);
} }
void rx_slsch(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, int frame_rx,int subframe_rx) { void rx_slsch(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, int frame_rx,int subframe_rx) {
......
...@@ -1192,6 +1192,7 @@ typedef struct PHY_VARS_eNB_s { ...@@ -1192,6 +1192,7 @@ typedef struct PHY_VARS_eNB_s {
#define debug_msg if (((mac_xface->frame%100) == 0) || (mac_xface->frame < 50)) msg #define debug_msg if (((mac_xface->frame%100) == 0) || (mac_xface->frame < 50)) msg
#define MAX_SLDCH 16
/// Top-level PHY Data Structure for UE /// Top-level PHY Data Structure for UE
typedef struct { typedef struct {
/// \brief Module ID indicator for this instance /// \brief Module ID indicator for this instance
...@@ -1265,18 +1266,23 @@ typedef struct { ...@@ -1265,18 +1266,23 @@ typedef struct {
// This is for SIC in the UE, to store the reencoded data // This is for SIC in the UE, to store the reencoded data
LTE_eNB_DLSCH_t *dlsch_eNB[NUMBER_OF_CONNECTED_eNB_MAX]; LTE_eNB_DLSCH_t *dlsch_eNB[NUMBER_OF_CONNECTED_eNB_MAX];
// Sidelink-specific variables // Sidelink-specific variables
int sl_fep_done;
SL_chan_t sl_chan; SL_chan_t sl_chan;
LTE_eNB_DLSCH_t *dlsch_slsch; LTE_eNB_DLSCH_t *dlsch_slsch;
LTE_UE_ULSCH_t *ulsch_slsch; LTE_UE_ULSCH_t *ulsch_slsch;
LTE_eNB_PUSCH *pusch_slsch; LTE_eNB_PUSCH *pusch_slsch;
LTE_eNB_DLSCH_t *dlsch_sldch;
LTE_UE_ULSCH_t *ulsch_sldch;
LTE_eNB_PUSCH *pusch_sldch;
LTE_eNB_PUSCH *pusch_slcch; LTE_eNB_PUSCH *pusch_slcch;
LTE_UE_DLSCH_t *dlsch_rx_slsch; LTE_UE_DLSCH_t *dlsch_rx_slsch;
int16_t **slsch_rxdataF; LTE_UE_DLSCH_t *dlsch_rx_sldch[MAX_SLDCH];
int16_t **slcch_rxdataF; int16_t **sl_rxdataF;
int16_t **slsch_rxdata_7_5kHz; int16_t **sl_rxdata_7_5kHz;
int16_t **slcch_rxdata_7_5kHz;
int16_t *slsch_dlsch_llr; int16_t *slsch_dlsch_llr;
int16_t *slsch_ulsch_llr; int16_t *slsch_ulsch_llr;
int16_t *sldch_dlsch_llr;
int16_t *sldch_ulsch_llr;
SLSCH_t *slsch; SLSCH_t *slsch;
SLSCH_t slsch_rx; SLSCH_t slsch_rx;
int slsch_active; int slsch_active;
...@@ -1288,6 +1294,8 @@ typedef struct { ...@@ -1288,6 +1294,8 @@ typedef struct {
uint32_t slsch_txcnt; uint32_t slsch_txcnt;
uint32_t slsch_errors; uint32_t slsch_errors;
uint32_t slsch_rxcnt[4]; uint32_t slsch_rxcnt[4];
SLDCH_t *sldch;
int sldch_sdu_active;
//Paging parameters //Paging parameters
uint32_t IMSImod1024; uint32_t IMSImod1024;
uint32_t PF; uint32_t PF;
...@@ -1368,6 +1376,7 @@ typedef struct { ...@@ -1368,6 +1376,7 @@ typedef struct {
uint8_t pscch_coded; uint8_t pscch_coded;
uint8_t pscch_generated; uint8_t pscch_generated;
uint8_t pssch_generated; uint8_t pssch_generated;
uint8_t psdch_generated;
uint8_t generate_prach; uint8_t generate_prach;
uint8_t prach_cnt; uint8_t prach_cnt;
uint8_t prach_PreambleIndex; uint8_t prach_PreambleIndex;
......
...@@ -355,10 +355,9 @@ typedef enum { ...@@ -355,10 +355,9 @@ typedef enum {
PSCCH_34_ODD=4, PSCCH_34_ODD=4,
PSSCH_12=5, PSSCH_12=5,
PSSCH_34=6, PSSCH_34=6,
PSDCH_EVEN=7, PSDCH=7,
PSDCH_ODD=8, PSBCH=8,
PSBCH=9, MAX_SLTYPES=9
MAX_SLTYPES=10
} SL_chan_t; } SL_chan_t;
/// DeltaFList-PUCCH from 36.331 RRC spec /// DeltaFList-PUCCH from 36.331 RRC spec
......
...@@ -62,12 +62,14 @@ int main(int argc, char **argv) { ...@@ -62,12 +62,14 @@ int main(int argc, char **argv) {
PHY_VARS_UE *UE; PHY_VARS_UE *UE;
int log_level = LOG_INFO; int log_level = LOG_INFO;
SLSCH_t slsch; SLSCH_t slsch;
SLDCH_t sldch;
SCM_t channel_model=AWGN; SCM_t channel_model=AWGN;
UE_rxtx_proc_t proc; UE_rxtx_proc_t proc;
double snr0 = 35; double snr0 = 35;
double snr_step=1; double snr_step=1;
double snr_int=1; double snr_int=1;
uint8_t slsch_payload[768*9]; uint8_t slsch_payload[768*9];
uint8_t sldch_payload[32];
int mcs=10; int mcs=10;
int nb_rb=20; int nb_rb=20;
char channel_model_input[20]; char channel_model_input[20];
...@@ -235,7 +237,8 @@ int main(int argc, char **argv) { ...@@ -235,7 +237,8 @@ int main(int argc, char **argv) {
UE->N_TA_offset = 0; UE->N_TA_offset = 0;
UE->hw_timing_advance = 0; UE->hw_timing_advance = 0;
UE->slsch = &slsch; UE->slsch = &slsch;
// SL Configuration UE->sldch = &sldch;
// SLSCH/CCH Configuration
slsch.N_SL_RB = 20; slsch.N_SL_RB = 20;
slsch.prb_Start = 5; slsch.prb_Start = 5;
slsch.prb_End = 44; slsch.prb_End = 44;
...@@ -264,10 +267,28 @@ int main(int argc, char **argv) { ...@@ -264,10 +267,28 @@ int main(int argc, char **argv) {
slsch.L_CRBs = nb_rb; slsch.L_CRBs = nb_rb;
slsch.payload_length = get_TBS_UL(slsch.mcs,slsch.L_CRBs); slsch.payload_length = get_TBS_UL(slsch.mcs,slsch.L_CRBs);
slsch.payload = slsch_payload; slsch.payload = slsch_payload;
// SLDCH Configuration
sldch.type = disc_type1;
sldch.N_SL_RB = 8;
sldch.prb_Start = 15;
sldch.prb_End = 34;
sldch.offsetIndicator = 0;
/// 128 frame
sldch.discPeriod = 128;
// 1 transmission per period
sldch.numRepetitions = 1;
// 4 transmissions per SLDCH sdu
sldch.numRetx = 3;
// 16 TXops
sldch.bitmap1 = 0xffff;
sldch.bitmap_length = 16;
sldch.payload_length = 256;
// copy sidelink parameters, PSCCH and PSSCH payloads will get overwritten // copy sidelink parameters, PSCCH and PSSCH payloads will get overwritten
memcpy((void*)&UE->slsch_rx,(void*)UE->slsch,sizeof(SLSCH_t)); memcpy((void*)&UE->slsch_rx,(void*)UE->slsch,sizeof(SLSCH_t));
for (int i=0;i<768*9;i++) slsch_payload[i] = taus()&255; for (int i=0;i<768*9;i++) slsch_payload[i] = taus()&255;
for (int i=0;i<32;i++) sldch_payload[i] = taus()&255;
// 0dBm transmit power for PSCCH = 0dBm - 10*log10(12) dBm/RE // 0dBm transmit power for PSCCH = 0dBm - 10*log10(12) dBm/RE
...@@ -279,19 +300,22 @@ int main(int argc, char **argv) { ...@@ -279,19 +300,22 @@ int main(int argc, char **argv) {
UE->slsch_txcnt = 0; UE->slsch_txcnt = 0;
UE->slsch_rxcnt[0] = 0; UE->slsch_rxcnt[1] = 0; UE->slsch_rxcnt[2] = 0; UE->slsch_rxcnt[3] = 0; UE->slsch_rxcnt[0] = 0; UE->slsch_rxcnt[1] = 0; UE->slsch_rxcnt[2] = 0; UE->slsch_rxcnt[3] = 0;
pscch_errors=0; pscch_errors=0;
UE->sl_fep_done = 0;
for (trials = 0;trials<n_trials;trials++) { for (trials = 0;trials<n_trials;trials++) {
UE->pscch_coded=0; UE->pscch_coded=0;
UE->pscch_generated=0; UE->pscch_generated=0;
UE->psdch_generated=0;
for (int absSF=0;absSF<10240;absSF++) { for (int absSF=0;absSF<10240;absSF++) {
frame = absSF/10; frame = absSF/10;
subframe= absSF%10; subframe= absSF%10;
check_and_generate_psdch(UE,frame,subframe);
UE->slsch_active = 1; UE->slsch_active = 1;
check_and_generate_pscch(UE,frame,subframe); check_and_generate_pscch(UE,frame,subframe);
proc.subframe_tx = subframe; proc.subframe_tx = subframe;
proc.frame_tx = frame; proc.frame_tx = frame;
check_and_generate_pssch(UE,&proc,frame,subframe); check_and_generate_pssch(UE,&proc,frame,subframe);
if (UE->pscch_generated > 0 || UE->pssch_generated > 0) { if (UE->psdch_generated>0 || UE->pscch_generated > 0 || UE->pssch_generated > 0) {
AssertFatal(UE->pscch_generated<3,"Illegal pscch_generated %d\n",UE->pscch_generated); AssertFatal(UE->pscch_generated<3,"Illegal pscch_generated %d\n",UE->pscch_generated);
// FEP // FEP
ulsch_common_procedures(UE,&proc,0); ulsch_common_procedures(UE,&proc,0);
...@@ -301,12 +325,13 @@ int main(int argc, char **argv) { ...@@ -301,12 +325,13 @@ int main(int argc, char **argv) {
// write_output("rxsig0.m","rxs0",&UE->common_vars.rxdata[0][UE->frame_parms.samples_per_tti*subframe],UE->frame_parms.samples_per_tti,1,1); // write_output("rxsig0.m","rxs0",&UE->common_vars.rxdata[0][UE->frame_parms.samples_per_tti*subframe],UE->frame_parms.samples_per_tti,1,1);
UE->pscch_generated = 0; UE->pscch_generated = 0;
UE->pssch_generated = 0; UE->pssch_generated = 0;
UE->psdch_generated = 0;
} }
rx_slcch(UE,frame,subframe); rx_slcch(UE,frame,subframe);
rx_slsch(UE,&proc,frame,subframe); rx_slsch(UE,&proc,frame,subframe);
UE->sl_fep_done = 0;
if ((absSF%320) == 319) { if ((absSF%320) == 319) {
if (UE->slcch_received == 0) pscch_errors++; if (UE->slcch_received == 0) pscch_errors++;
break; break;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment