FeMBMS 1.25KHz Pilots (MBSFN Gold psequences)
This commit is contained in:
@@ -154,3 +154,92 @@ int lte_dl_mbsfn_rx(PHY_VARS_UE *ue,
|
|||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
|
||||||
|
int lte_dl_mbsfn_khz_1dot25(PHY_VARS_eNB *eNB, int32_t *output,
|
||||||
|
short amp,
|
||||||
|
int subframe)
|
||||||
|
{
|
||||||
|
|
||||||
|
unsigned int mprime,mprime_dword,mprime_qpsk_symb,m;
|
||||||
|
unsigned short k=0,a;
|
||||||
|
int32_t qpsk[4];
|
||||||
|
|
||||||
|
a = (amp*ONE_OVER_SQRT2_Q15)>>15;
|
||||||
|
((short *)&qpsk[0])[0] = a;
|
||||||
|
((short *)&qpsk[0])[1] = a;
|
||||||
|
|
||||||
|
((short *)&qpsk[1])[0] = -a;
|
||||||
|
((short *)&qpsk[1])[1] = a;
|
||||||
|
((short *)&qpsk[2])[0] = a;
|
||||||
|
((short *)&qpsk[2])[1] = -a;
|
||||||
|
|
||||||
|
((short *)&qpsk[3])[0] = -a;
|
||||||
|
((short *)&qpsk[3])[1] = -a;
|
||||||
|
|
||||||
|
|
||||||
|
mprime = 3*(110 - eNB->frame_parms.N_RB_DL);
|
||||||
|
|
||||||
|
for (m=0; m<eNB->frame_parms.N_RB_DL*24; m++) // m = 0:24*N_RB_DL-1
|
||||||
|
{
|
||||||
|
if ((subframe&0x1)==0) // n_sf mod 2 == 0: even
|
||||||
|
k = 6*m;
|
||||||
|
else
|
||||||
|
k = 6*m + 3;
|
||||||
|
|
||||||
|
|
||||||
|
k+=eNB->frame_parms.first_carrier_offset_khz_1dot25;
|
||||||
|
|
||||||
|
mprime_dword = mprime>>4;
|
||||||
|
mprime_qpsk_symb = mprime&0xf;
|
||||||
|
|
||||||
|
if (k >= eNB->frame_parms.ofdm_symbol_size_khz_1dot25) {
|
||||||
|
k++; // skip DC carrier
|
||||||
|
k-=eNB->frame_parms.ofdm_symbol_size_khz_1dot25;
|
||||||
|
}
|
||||||
|
output[k] = qpsk[(eNB->lte_gold_mbsfn_khz_1dot25_table[subframe][mprime_dword]>>(2*mprime_qpsk_symb))&3];
|
||||||
|
mprime++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int lte_dl_mbsfn_khz_1dot25_rx(PHY_VARS_UE *ue,
|
||||||
|
int *output,
|
||||||
|
int subframe)
|
||||||
|
{
|
||||||
|
|
||||||
|
unsigned int mprime,mprime_dword,mprime_qpsk_symb,m;
|
||||||
|
unsigned short k=0;
|
||||||
|
unsigned int qpsk[4];
|
||||||
|
|
||||||
|
// This includes complex conjugate for channel estimation
|
||||||
|
|
||||||
|
((short *)&qpsk[0])[0] = ONE_OVER_SQRT2_Q15;
|
||||||
|
((short *)&qpsk[0])[1] = -ONE_OVER_SQRT2_Q15;
|
||||||
|
((short *)&qpsk[1])[0] = -ONE_OVER_SQRT2_Q15;
|
||||||
|
((short *)&qpsk[1])[1] = -ONE_OVER_SQRT2_Q15;
|
||||||
|
((short *)&qpsk[2])[0] = ONE_OVER_SQRT2_Q15;
|
||||||
|
((short *)&qpsk[2])[1] = ONE_OVER_SQRT2_Q15;
|
||||||
|
((short *)&qpsk[3])[0] = -ONE_OVER_SQRT2_Q15;
|
||||||
|
((short *)&qpsk[3])[1] = ONE_OVER_SQRT2_Q15;
|
||||||
|
|
||||||
|
mprime = 3*(110 - ue->frame_parms.N_RB_DL);
|
||||||
|
|
||||||
|
for (m=0; m<ue->frame_parms.N_RB_DL*24; m++) // m = 0:24*N_RB_DL-1
|
||||||
|
{ mprime_dword = mprime>>4;
|
||||||
|
mprime_qpsk_symb = mprime&0xf;
|
||||||
|
|
||||||
|
// this is r_mprime from 3GPP 36-211 6.10.1.2
|
||||||
|
output[k] = qpsk[(ue->lte_gold_mbsfn_khz_1dot25_table[subframe][mprime_dword]>>(2*mprime_qpsk_symb))&3];
|
||||||
|
|
||||||
|
mprime++;
|
||||||
|
k++;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // MAKE Rel14
|
||||||
|
|
||||||
|
|||||||
@@ -95,6 +95,34 @@ void lte_gold_mbsfn(LTE_DL_FRAME_PARMS *frame_parms,uint32_t lte_gold_mbsfn_tabl
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
|
||||||
|
void lte_gold_mbsfn_khz_1dot25(LTE_DL_FRAME_PARMS *frame_parms,uint32_t lte_gold_mbsfn_khz_1dot25_table[10][150],uint16_t Nid_mbsfn){
|
||||||
|
unsigned char sfn,l;
|
||||||
|
unsigned int n,x1,x2;//,x1tmp,x2tmp;
|
||||||
|
|
||||||
|
for (sfn=0; sfn<10; sfn++) {
|
||||||
|
x2 = (Nid_mbsfn) + (((1+(Nid_mbsfn<<1))*(1 + (7*(1+sfn))))<<9); //cinit
|
||||||
|
x1 = 1+ (1<<31);
|
||||||
|
x2=x2 ^ ((x2 ^ (x2>>1) ^ (x2>>2) ^ (x2>>3))<<31);
|
||||||
|
for (n=1; n<50; n++) {
|
||||||
|
x1 = (x1>>1) ^ (x1>>4);
|
||||||
|
x1 = x1 ^ (x1<<31) ^ (x1<<28);
|
||||||
|
x2 = (x2>>1) ^ (x2>>2) ^ (x2>>3) ^ (x2>>4);
|
||||||
|
x2 = x2 ^ (x2<<31) ^ (x2<<30) ^ (x2<<29) ^ (x2<<28);
|
||||||
|
}
|
||||||
|
for (n=0; n<150; n++) {
|
||||||
|
x1 = (x1>>1) ^ (x1>>4);
|
||||||
|
x1 = x1 ^ (x1<<31) ^ (x1<<28);
|
||||||
|
x2 = (x2>>1) ^ (x2>>2) ^ (x2>>3) ^ (x2>>4);
|
||||||
|
x2 = x2 ^ (x2<<31) ^ (x2<<30) ^ (x2<<29) ^ (x2<<28);
|
||||||
|
lte_gold_mbsfn_khz_1dot25_table[sfn][n] = x1^x2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef LTE_GOLD_MAIN
|
#ifdef LTE_GOLD_MAIN
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user