Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
oai
openairinterface5G
Commits
aa69c550
Commit
aa69c550
authored
Jul 07, 2016
by
Elena Lukashova
Browse files
A bit of clean-up.
parent
b8e9e188
Changes
3
Hide whitespace changes
Inline
Side-by-side
openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c
View file @
aa69c550
...
...
@@ -687,15 +687,15 @@ int dlsch_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms,
int32_t dlsch_qpsk_llr_SIC(LTE_DL_FRAME_PARMS *frame_parms,
int32_t **rxdataF_comp,
int32_t
**
sic_buffer
,
//Q15
int32_t
**
rho_i
,
int32_t **sic_buffer, //Q15
int32_t **rho_i,
short *dlsch_llr,
uint8_t
num_pdcch_symbols
,
uint8_t num_pdcch_symbols,
uint16_t nb_rb,
uint8_t
subframe
,
uint32_t
rb_alloc
,
uint8_t subframe,
uint32_t rb_alloc,
uint16_t mod_order_0,
LTE_UE_DLSCH_t
*
dlsch0
)
LTE_UE_DLSCH_t *dlsch0)
{
int16_t rho_amp_x0[2*frame_parms->N_RB_DL*12];
...
...
@@ -749,10 +749,10 @@ int32_t dlsch_qpsk_llr_SIC(LTE_DL_FRAME_PARMS *frame_parms,
len_acc+=len; //accumulated length; this is done because in sic_buffer we have only data symbols
multadd_complex_vector_real_scalar((int16_t *)sic_data,
amp_tmp
,
(
int16_t
*
)
rho_amp_x0
,
//this is in Q13
1
,
len
);
amp_tmp,
(int16_t *)rho_amp_x0, //this is in Q13
1,
len);
// printf ("Got x0*rho_a\n");
...
...
@@ -763,12 +763,12 @@ int32_t dlsch_qpsk_llr_SIC(LTE_DL_FRAME_PARMS *frame_parms,
len,
13);
/* write_output("rho_for_multipl.m","rho_for_multipl", rho_1,len,1,
symbol==num_pdcch_symbols ? 15 :
symbol==nsymb-1 ? 14 : 13);
symbol==num_pdcch_symbols ? 15 :
symbol==nsymb-1 ? 14 : 13);
write_output("rho_rho_in_llr.m","rho2", rho_rho_amp_x0,len,1,
symbol==num_pdcch_symbols ? 15 :
symbol==nsymb-1 ? 14 : 13);
symbol==num_pdcch_symbols ? 15 :
symbol==nsymb-1 ? 14 : 13);
// printf ("Computed rho*rho_a*x0\n");*/
...
...
@@ -776,21 +776,21 @@ int32_t dlsch_qpsk_llr_SIC(LTE_DL_FRAME_PARMS *frame_parms,
sub_cpx_vector16((int16_t *)rxF,
(
int16_t
*
)
rho_rho_amp_x0
,
//(int16_t *)clean_x1,
(
int16_t
*
)
rxF
,
len
*
2
);
(int16_t *)rho_rho_amp_x0,
//(int16_t *)clean_x1,
(int16_t *)rxF,
len*2);
// write_output("rxFdata_comp1_after.m","rxF_a", rxF,len,1,1);
// write_output("clean_x1.m","x1", clean_x1,len,1,1);
// printf ("Interference removed \n");
/* write_output("clean_x1.m","x1", clean_x1,len,1,
symbol==num_pdcch_symbols ? 15 :
symbol==nsymb-1 ? 14 : 13);
write_output("rxF_comp1.m","rxF_1_comp", rxF,len,1,
symbol==num_pdcch_symbols ? 15 :
symbol==nsymb-1 ? 14 : 13);*/
symbol==num_pdcch_symbols ? 15 :
symbol==nsymb-1 ? 14 : 13);
write_output("rxF_comp1.m","rxF_1_comp", rxF,len,1,
symbol==num_pdcch_symbols ? 15 :
symbol==nsymb-1 ? 14 : 13);*/
// printf("dlsch_qpsk_llr_SIC: symbol %d,nb_rb %d, len %d,pbch_pss_sss_adjust %d\n",symbol,nb_rb,len,pbch_pss_sss_adjust);
...
...
@@ -937,17 +937,17 @@ void dlsch_16qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
void dlsch_16qam_llr_SIC (LTE_DL_FRAME_PARMS *frame_parms,
int32_t **rxdataF_comp,
int32_t
**
sic_buffer
,
//Q15
int32_t
**
rho_i
,
int16_t
*
dlsch_llr
,
uint8_t
num_pdcch_symbols
,
int32_t
**
dl_ch_mag
,
uint16_t
nb_rb
,
uint8_t
subframe
,
uint32_t
rb_alloc
,
int32_t **sic_buffer, //Q15
int32_t **rho_i,
int16_t *dlsch_llr,
uint8_t num_pdcch_symbols,
int32_t **dl_ch_mag,
uint16_t nb_rb,
uint8_t subframe,
uint32_t rb_alloc,
uint16_t mod_order_0,
LTE_UE_DLSCH_t
*
dlsch0
)
LTE_UE_DLSCH_t *dlsch0
)
{
int16_t rho_amp_x0[2*frame_parms->N_RB_DL*12];
int16_t rho_rho_amp_x0[2*frame_parms->N_RB_DL*12];
...
...
@@ -995,10 +995,10 @@ void dlsch_16qam_llr_SIC (LTE_DL_FRAME_PARMS *frame_parms,
len_acc+=len;
multadd_complex_vector_real_scalar((int16_t *)sic_data,
amp_tmp
,
(
int16_t
*
)
rho_amp_x0
,
//this is in Q13
1
,
len
);
amp_tmp,
(int16_t *)rho_amp_x0, //this is in Q13
1,
len);
mult_cpx_vector((int16_t *)rho_1, //Q15
(int16_t *)rho_amp_x0, //Q13
...
...
@@ -1007,10 +1007,10 @@ void dlsch_16qam_llr_SIC (LTE_DL_FRAME_PARMS *frame_parms,
13);
sub_cpx_vector16((int16_t *)rxF,
(
int16_t
*
)
rho_rho_amp_x0
,
//(int16_t *)clean_x1,
(
int16_t
*
)
rxF
,
len
*
2
);
(int16_t *)rho_rho_amp_x0,
//(int16_t *)clean_x1,
(int16_t *)rxF,
len*2);
len_mod4 = len&3;
len>>=2; // length in quad words (4 REs)
...
...
@@ -1200,18 +1200,18 @@ void dlsch_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
//#if 0
void dlsch_64qam_llr_SIC(LTE_DL_FRAME_PARMS *frame_parms,
int32_t **rxdataF_comp,
int32_t
**
sic_buffer
,
//Q15
int32_t
**
rho_i
,
int16_t
*
dlsch_llr
,
uint8_t
num_pdcch_symbols
,
int32_t
**
dl_ch_mag
,
int32_t
**
dl_ch_magb
,
uint16_t
nb_rb
,
uint8_t
subframe
,
uint32_t
rb_alloc
,
int32_t **sic_buffer, //Q15
int32_t **rho_i,
int16_t *dlsch_llr,
uint8_t num_pdcch_symbols,
int32_t **dl_ch_mag,
int32_t **dl_ch_magb,
uint16_t nb_rb,
uint8_t subframe,
uint32_t rb_alloc,
uint16_t mod_order_0,
LTE_UE_DLSCH_t
*
dlsch0
)
LTE_UE_DLSCH_t *dlsch0
)
{
int16_t rho_amp_x0[2*frame_parms->N_RB_DL*12];
int16_t rho_rho_amp_x0[2*frame_parms->N_RB_DL*12];
...
...
@@ -1227,7 +1227,7 @@ void dlsch_64qam_llr_SIC(LTE_DL_FRAME_PARMS *frame_parms,
uint16_t *llr2;
__m128i *ch_mag,*ch_magb;
nsymb
=
(
frame_parms
->
Ncp
==
0
)
?
14
:
12
;
nsymb = (frame_parms->Ncp==0) ? 14:12;
for (symbol=num_pdcch_symbols; symbol<nsymb; symbol++) {
uint16_t *rxF = (uint16_t*)(&rxdataF_comp[0][((int16_t)symbol*frame_parms->N_RB_DL*12)]);
...
...
@@ -1240,17 +1240,17 @@ void dlsch_64qam_llr_SIC(LTE_DL_FRAME_PARMS *frame_parms,
pbch_pss_sss_adjust=adjust_G2(frame_parms,&rb_alloc,6,subframe,symbol);
if
((
symbol_mod
==
0
)
||
(
symbol_mod
==
(
4
-
frame_parms
->
Ncp
)))
{
if ((symbol_mod==0) || (symbol_mod==(4-frame_parms->Ncp))) {
amp_tmp
=
dlsch0
->
sqrt_rho_b
;
if
(
frame_parms
->
mode1_flag
==
0
)
len
=
nb_rb
*
8
-
(
2
*
pbch_pss_sss_adjust
/
3
);
else
len
=
nb_rb
*
10
-
(
5
*
pbch_pss_sss_adjust
/
6
);
amp_tmp = dlsch0->sqrt_rho_b;
if (frame_parms->mode1_flag==0)
len = nb_rb*8 - (2*pbch_pss_sss_adjust/3);
else
len = nb_rb*10 - (5*pbch_pss_sss_adjust/6);
} else {
amp_tmp
=
dlsch0
->
sqrt_rho_a
;
len
=
nb_rb
*
12
-
pbch_pss_sss_adjust
;
amp_tmp = dlsch0->sqrt_rho_a;
len = nb_rb*12 - pbch_pss_sss_adjust;
}
if (mod_order_0==6)
...
...
@@ -1259,10 +1259,10 @@ void dlsch_64qam_llr_SIC(LTE_DL_FRAME_PARMS *frame_parms,
len_acc+=len;
multadd_complex_vector_real_scalar((int16_t *)sic_data,
amp_tmp
,
(
int16_t
*
)
rho_amp_x0
,
//this is in Q13
1
,
len
);
amp_tmp,
(int16_t *)rho_amp_x0, //this is in Q13
1,
len);
mult_cpx_vector((int16_t *)rho_1, //Q15
(int16_t *)rho_amp_x0, //Q13
...
...
@@ -1271,10 +1271,10 @@ void dlsch_64qam_llr_SIC(LTE_DL_FRAME_PARMS *frame_parms,
13);
sub_cpx_vector16((int16_t *)rxF,
(
int16_t
*
)
rho_rho_amp_x0
,
//(int16_t *)clean_x1,
(
int16_t
*
)
rxF
,
len
*
2
);
(int16_t *)rho_rho_amp_x0,
//(int16_t *)clean_x1,
(int16_t *)rxF,
len*2);
llr2 = llr32;
llr32 += (len*6);
...
...
@@ -1442,7 +1442,7 @@ void qpsk_qpsk(short *stream0_in,
short *stream0_out,
short *rho01,
int length
)
)
{
/*
...
...
@@ -1702,7 +1702,7 @@ void qpsk_qam16(int16_t *stream0_in,
int16_t *stream0_out,
int16_t *rho01,
int32_t length
)
)
{
/*
This function computes the LLRs of stream 0 (s_0) in presence of the interfering stream 1 (s_1) assuming that both symbols are QPSK. It can be used for both MU-MIMO interference-aware receiver or for SU-MIMO receivers.
...
...
@@ -1987,7 +1987,7 @@ void qpsk_qam64(short *stream0_in,
short *stream0_out,
short *rho01,
int length
)
)
{
/*
...
...
@@ -2239,7 +2239,7 @@ void qam16_qpsk(short *stream0_in,
short *stream0_out,
short *rho01,
int length
)
)
{
/*
...
...
@@ -2749,7 +2749,7 @@ void qam16_qam16(short *stream0_in,
short *stream0_out,
short *rho01,
int length
)
)
{
/*
...
...
@@ -3308,7 +3308,7 @@ void qam16_qam64(int16_t *stream0_in,
int16_t *stream0_out,
int16_t *rho01,
int32_t length
)
)
{
/*
...
...
@@ -3984,7 +3984,7 @@ void qam64_qpsk(int16_t *stream0_in,
int16_t *stream0_out,
int16_t *rho01,
int32_t length
)
)
{
/*
...
...
@@ -5507,7 +5507,7 @@ void qam64_qam16(short *stream0_in,
short *stream0_out,
short *rho01,
int length
)
)
{
/*
...
...
@@ -7052,7 +7052,7 @@ void qam64_qam64(short *stream0_in,
short *stream0_out,
short *rho01,
int length
)
)
{
/*
...
...
openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
View file @
aa69c550
...
...
@@ -242,19 +242,17 @@ int allocate_REs_in_RB(LTE_DL_FRAME_PARMS *frame_parms,
first_re
=
6
;
for
(
re
=
first_re
;
re
<
last_re
;
re
++
)
{
// printf("element %d precoder_index for allocation %d\n",re, precoder_index );
if
((
skip_dc
==
1
)
&&
(
re
==
6
))
re_off
=
re_off
-
frame_parms
->
ofdm_symbol_size
+
1
;
tti_offset
=
symbol_offset
+
re_off
+
re
;
//
check that RE is not from Cell-specific RS
//check that RE is not from Cell-specific RS
if
(
is_not_pilot
(
pilots
,
re
,
frame_parms
->
nushift
,
use2ndpilots
)
==
1
)
{
//
printf("re %d (jj %d)\n",re,*jj);
//printf("re %d (jj %d)\n",re,*jj);
if
(
mimo_mode
==
SISO
)
{
//SISO mapping
...
...
@@ -263,7 +261,7 @@ int allocate_REs_in_RB(LTE_DL_FRAME_PARMS *frame_parms,
switch
(
mod_order0
)
{
case
2
:
//QPSK
//
printf("%d(%d) : %d,%d => ",tti_offset,*jj,((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]);
//
printf("%d(%d) : %d,%d => ",tti_offset,*jj,((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]);
for
(
aa
=
0
;
aa
<
frame_parms
->
nb_antennas_tx
;
aa
++
)
{
((
int16_t
*
)
&
txdataF
[
aa
][
tti_offset
])[
0
]
+=
(
x0
[
*
jj
]
==
1
)
?
(
-
gain_lin_QPSK
)
:
gain_lin_QPSK
;
//I //b_i
}
...
...
@@ -276,7 +274,7 @@ int allocate_REs_in_RB(LTE_DL_FRAME_PARMS *frame_parms,
*
jj
=
*
jj
+
1
;
//
printf("%d,%d\n",((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]);
//
printf("%d,%d\n",((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]);
break
;
case
4
:
//16QAM
...
...
@@ -308,8 +306,8 @@ int allocate_REs_in_RB(LTE_DL_FRAME_PARMS *frame_parms,
for
(
aa
=
0
;
aa
<
frame_parms
->
nb_antennas_tx
;
aa
++
)
{
((
int16_t
*
)
&
txdataF
[
aa
][
tti_offset
])[
0
]
+=
qam_table_s0
[
qam16_table_offset_re
];
((
int16_t
*
)
&
txdataF
[
aa
][
tti_offset
])[
1
]
+=
qam_table_s0
[
qam16_table_offset_im
];
//
((int16_t *)&txdataF[aa][tti_offset])[0]+=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15);
//
((int16_t *)&txdataF[aa][tti_offset])[1]+=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15);
//((int16_t *)&txdataF[aa][tti_offset])[0]+=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15);
//((int16_t *)&txdataF[aa][tti_offset])[1]+=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15);
}
break
;
...
...
@@ -382,602 +380,598 @@ int allocate_REs_in_RB(LTE_DL_FRAME_PARMS *frame_parms,
((
int16_t
*
)
&
tmp_sample2
)[
1
]
=
(
x0
[
*
jj
]
==
1
)
?
(
-
gain_lin_QPSK
)
:
gain_lin_QPSK
;
*
jj
=*
jj
+
1
;
// normalization for 2 tx antennas
((
int16_t
*
)
&
txdataF
[
0
][
tti_offset
])[
0
]
+=
(
int16_t
)((((
int16_t
*
)
&
tmp_sample1
)[
0
]
*
ONE_OVER_SQRT2_Q15
)
>>
15
);
((
int16_t
*
)
&
txdataF
[
0
][
tti_offset
])[
1
]
+=
(
int16_t
)((((
int16_t
*
)
&
tmp_sample1
)[
1
]
*
ONE_OVER_SQRT2_Q15
)
>>
15
);
((
int16_t
*
)
&
txdataF
[
1
][
tti_offset
])[
0
]
+=
(
int16_t
)((((
int16_t
*
)
&
tmp_sample2
)[
0
]
*
ONE_OVER_SQRT2_Q15
)
>>
15
);
((
int16_t
*
)
&
txdataF
[
1
][
tti_offset
])[
1
]
+=
(
int16_t
)((((
int16_t
*
)
&
tmp_sample2
)[
1
]
*
ONE_OVER_SQRT2_Q15
)
>>
15
);
break
;
case
4
:
//16QAM
// Antenna 0 position n
qam16_table_offset_
re
=
0
;
qam16_table_offset_im
=
0
;
if
(
x0
[
*
jj
]
==
1
)
qam16_table_offset_re
+=
2
;
*
jj
=*
jj
+
1
;
if
(
x0
[
*
jj
]
==
1
)
qam16_table_offset_im
+=
2
;
*
jj
=*
jj
+
1
;
if
(
x0
[
*
jj
]
==
1
)
qam16_table_offset_re
+=
1
;
*
jj
=*
jj
+
1
;
if
(
x0
[
*
jj
]
==
1
)
qam16_table_offset_im
+=
1
;
*
jj
=*
jj
+
1
;
((
int16_t
*
)
&
txdataF
[
0
][
tti_offset
])[
0
]
+=
(
int16_t
)(((
int32_t
)
amp
*
qam16_table
[
qam16_table_offset_
re
])
>>
15
);
((
int16_t
*
)
&
txdataF
[
0
][
tti_offset
])[
1
]
+=
(
int16_t
)(((
int32_t
)
amp
*
qam16_table
[
qam16_table_offset_im
])
>>
15
);
// Antenna 1 position n Real part -> -x1*
qam16_table_offset_
re
=
0
;
qam16_table_offset_im
=
0
;
if
(
x0
[
*
jj
]
==
1
)
qam16_table_offset_re
+=
2
;
*
jj
=*
jj
+
1
;
if
(
x0
[
*
jj
]
==
1
)
qam16_table_offset_im
+=
2
;
*
jj
=*
jj
+
1
;
if
(
x0
[
*
jj
]
==
1
)
qam16_table_offset_re
+=
1
;
*
jj
=*
jj
+
1
;
if
(
x0
[
*
jj
]
==
1
)
qam16_table_offset_im
+=
1
;
*
jj
=*
jj
+
1
;
((
int16_t
*
)
&
txdataF
[
1
][
tti_offset
])[
0
]
+=-
(
int16_t
)(((
int32_t
)
amp
*
qam16_table
[
qam16_table_offset_re
])
>>
15
);
((
int16_t
*
)
&
txdataF
[
1
][
tti_offset
])[
1
]
+=
(
int16_t
)(((
int32_t
)
amp
*
qam16_table
[
qam16_table_offset_im
])
>>
15
);
break
;
case
6
:
// 64-QAM
// Antenna 0
qam64_table_offset_re
=
0
;
qam64_table_offset_im
=
0
;
if
(
x0
[
*
jj
]
==
1
)
qam64_table_offset_re
+=
4
;
*
jj
=*
jj
+
1
;
if
(
x0
[
*
jj
]
==
1
)
qam64_table_offset_im
+=
4
;
*
jj
=*
jj
+
1
;
if
(
x0
[
*
jj
]
==
1
)
qam64_table_offset_re
+=
2
;
*
jj
=*
jj
+
1
;
if
(
x0
[
*
jj
]
==
1
)
qam64_table_offset_im
+=
2
;
*
jj
=*
jj
+
1
;
if
(
x0
[
*
jj
]
==
1
)
qam64_table_offset_re
+=
1
;
*
jj
=*
jj
+
1
;
if
(
x0
[
*
jj
]
==
1
)
qam64_table_offset_im
+=
1
;
*
jj
=*
jj
+
1
;
((
int16_t
*
)
&
txdataF
[
0
][
tti_offset
])[
0
]
+=
(
int16_t
)(((
int32_t
)
amp
*
qam64_table
[
qam64_table_offset_re
])
>>
15
);
((
int16_t
*
)
&
txdataF
[
0
][
tti_offset
])[
1
]
+=
(
int16_t
)(((
int32_t
)
amp
*
qam64_table
[
qam64_table_offset_im
])
>>
15
);
// Antenna 1 => -x1*
qam64_table_offset_re
=
0
;
qam64_table_offset_im
=
0
;
if
(
x0
[
*
jj
]
==
1
)
qam64_table_offset_re
+=
4
;
*
jj
=*
jj
+
1
;
if
(
x0
[
*
jj
]
==
1
)
qam64_table_offset_im
+=
4
;
*
jj
=*
jj
+
1
;
if
(
x0
[
*
jj
]
==
1
)
qam64_table_offset_re
+=
2
;
*
jj
=*
jj
+
1
;
if
(
x0
[
*
jj
]
==
1
)
qam64_table_offset_im
+=
2
;
*
jj
=*
jj
+
1
;
if
(
x0
[
*
jj
]
==
1
)
qam64_table_offset_re
+=
1
;
*
jj
=*
jj
+
1
;
if
(
x0
[
*
jj
]
==
1
)
qam64_table_offset_im
+=
1
;
*
jj
=*
jj
+
1
;
((
int16_t
*
)
&
txdataF
[
1
][
tti_offset
])[
0
]
+=-
(
int16_t
)(((
int32_t
)
amp
*
qam64_table
[
qam64_table_offset_re
])
>>
15
);
((
int16_t
*
)
&
txdataF
[
1
][
tti_offset
])[
1
]
+=
(
int16_t
)(((
int32_t
)
amp
*
qam64_table
[
qam64_table_offset_im
])
>>
15
);
break
;
}
// fill in the rest of the ALAMOUTI precoding
if
(
is_not_pilot
(
pilots
,
re
+
1
,
frame_parms
->
nushift
,
use2ndpilots
)
==
1
)
{
((
int16_t
*
)
&
txdataF
[
0
][
tti_offset
+
1
])[
0
]
+=
-
((
int16_t
*
)
&
txdataF
[
1
][
tti_offset
])[
0
];
//x1
((
int16_t
*
)
&
txdataF
[
0
][
tti_offset
+
1
])[
1
]
+=
((
int16_t
*
)
&
txdataF
[
1
][
tti_offset
])[
1
];
((
int16_t
*
)
&
txdataF
[
1
][
tti_offset
+
1
])[
0
]
+=
((
int16_t
*
)
&
txdataF
[
0
][
tti_offset
])[
0
];
//x0*
((
int16_t
*
)
&
txdataF
[
1
][
tti_offset
+
1
])[
1
]
+=
-
((
int16_t
*
)
&
txdataF
[
0
][
tti_offset
])[
1
];
}
else
{
((
int16_t
*
)
&
txdataF
[
0
][
tti_offset
+
2
])[
0
]
+=
-
((
int16_t
*
)
&
txdataF
[
1
][
tti_offset
])[
0
];
//x1
((
int16_t
*
)
&
txdataF
[
0
][
tti_offset
+
2
])[
1
]
+=
((
int16_t
*
)
&
txdataF
[
1
][
tti_offset
])[
1
];
((
int16_t
*
)
&
txdataF
[
1
][
tti_offset
+
2
])[
0
]
+=
((
int16_t
*
)
&
txdataF
[
0
][
tti_offset
])[
0
];
//x0*
((
int16_t
*
)
&
txdataF
[
1
][
tti_offset
+
2
])[
1
]
+=
-
((
int16_t
*
)
&
txdataF
[
0
][
tti_offset
])[
1
];
}
// normalization for 2 tx antennas
((
int16_t
*
)
&
txdataF
[
0
][
tti_offset
])[
0
]
+=
(
int16_t
)((((
int16_t
*
)
&
tmp_sample1
)[
0
]
*
ONE_OVER_SQRT2_Q15
)
>>
15
);
((
int16_t
*
)
&
txdataF
[
0
][
tti_offset
])[
1
]
+=
(
int16_t
)((((
int16_t
*
)
&
tmp_sample1
)[
1
]
*
ONE_OVER_SQRT2_Q15
)
>>
15
);
((
int16_t
*
)
&
txdataF
[
1
][
tti_offset
])[
0
]
+=
(
int16_t
)((((
int16_t
*
)
&
tmp_sample2
)[
0
]
*
ONE_OVER_SQRT2_Q15
)
>>
15
);
((
int16_t
*
)
&
txdataF
[
1
][
tti_offset
])[
1
]
+=
(
int16_t
)((((
int16_t
*
)
&
tmp_sample2
)[
1
]
*
ONE_OVER_SQRT2_Q15
)
>>
15
);
break
;
case
4
:
//16QAM
// Antenna 0 position n
qam16_table_offset_re
=
0
;
qam16_table_offset_
im
=
0
;
if
(
x0
[
*
jj
]
==
1
)
qam16_table_offset_re
+=
2
;
*
jj
=*
jj
+
1
;
if
(
x0
[
*
jj
]
==
1
)
qam16_table_offset_im
+=
2
;
*
jj
=*
jj
+
1
;
if
(
x0
[
*
jj
]
==
1
)
qam16_table_offset_re
+=
1
;
*
jj
=*
jj
+
1
;
if
(
x0
[
*
jj
]
==
1
)
qam16_table_offset_im
+=
1
;
*
jj
=*
jj
+
1
;
((
int16_t
*
)
&
txdataF
[
0
][
tti_offset
])[
0
]
+=
(
int16_t
)(((
int32_t
)
amp
*
qam16_table
[
qam16_table_offset_re
])
>>
15
);
((
int16_t
*
)
&
txdataF
[
0
][
tti_offset
])[
1
]
+=
(
int16_t
)(((
int32_t
)
amp
*
qam16_table
[
qam16_table_offset_
im
])
>>
15
);
// Antenna 1 position n Real part -> -x1*
qam16_table_offset_re
=
0
;
qam16_table_offset_
im
=
0
;
if
(
x0
[
*
jj
]
==
1
)
qam16_table_offset_re
+=
2
;
*
jj
=*
jj
+
1
;
if
(
x0
[
*
jj
]
==
1
)
qam16_table_offset_im
+=
2
;
*
jj
=*
jj
+
1
;
if
(
x0
[
*
jj
]
==
1
)
qam16_table_offset_re
+=
1
;
*
jj
=*
jj
+
1
;
if
(
x0
[
*
jj
]
==
1
)
qam16_table_offset_im
+=
1
;
*
jj
=*
jj
+
1
;
((
int16_t
*
)
&
txdataF
[
1
][
tti_offset
])[
0
]
+=-
(
int16_t
)(((
int32_t
)
amp
*
qam16_table
[
qam16_table_offset_re
])
>>
15
);
((
int16_t
*
)
&
txdataF
[
1
][
tti_offset
])[
1
]
+=
(
int16_t
)(((
int32_t
)
amp
*
qam16_table
[
qam16_table_offset_im
])
>>
15
);
break
;
case
6
:
// 64-QAM
// Antenna 0
qam64_table_offset_re
=
0
;
qam64_table_offset_im
=
0
;
if
(
x0
[
*
jj
]
==
1
)
qam64_table_offset_re
+=
4
;
*
jj
=*
jj
+
1
;
if
(
x0
[
*
jj
]
==
1
)
qam64_table_offset_im
+=
4
;
*
jj
=*
jj
+
1
;
if
(
x0
[
*
jj
]
==
1
)
qam64_table_offset_re
+=
2
;
*
jj
=*
jj
+
1
;
if
(
x0
[
*
jj
]
==
1
)
qam64_table_offset_im
+=
2
;
*
jj
=*
jj
+
1
;
if
(
x0
[
*
jj
]
==
1
)
qam64_table_offset_re
+=
1
;
*
jj
=*
jj
+
1
;
if
(
x0
[
*
jj
]
==
1
)
qam64_table_offset_im
+=
1
;
*
jj
=*
jj
+
1
;
((
int16_t
*
)
&
txdataF
[
0
][
tti_offset
])[
0
]
+=
(
int16_t
)(((
int32_t
)
amp
*
qam64_table
[
qam64_table_offset_re
])
>>
15
);
((
int16_t
*
)
&
txdataF
[
0
][
tti_offset
])[
1
]
+=
(
int16_t
)(((
int32_t
)
amp
*
qam64_table
[
qam64_table_offset_im
])
>>
15
);
// Antenna 1 => -x1*
qam64_table_offset_re
=
0
;
qam64_table_offset_im
=
0
;
if
(
x0
[
*
jj
]
==
1
)
qam64_table_offset_re
+=
4
;
*
jj
=*
jj
+
1
;
if
(
x0
[
*
jj
]
==
1
)
qam64_table_offset_im
+=
4
;
*
jj
=*
jj
+
1
;
if
(
x0
[
*
jj
]
==
1
)
qam64_table_offset_re
+=
2
;
*
jj
=*
jj
+
1
;
if
(
x0
[
*
jj
]
==
1
)
qam64_table_offset_im
+=
2
;
*
jj
=*
jj
+
1
;