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
b481bfd9
Commit
b481bfd9
authored
Oct 10, 2016
by
Rohit Gupta
Browse files
Merge branch 'develop' into feature-131-new-license
parents
6277038d
c51edecd
Changes
48
Show whitespace changes
Inline
Side-by-side
cmake_targets/autotests/run_exec_lte-softmodem_tests.py
View file @
b481bfd9
...
...
@@ -885,7 +885,8 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo ,
task_EPC
=
task_EPC
+
' ) > '
+
logfile_task_EPC_out
+
' 2>&1 '
write_file
(
logfile_task_EPC
,
task_EPC
,
mode
=
"w"
)
#first we compile all the programs
#first we compile all the programs but only for run_0
if
run
==
0
:
thread_EPC
=
oaiThread
(
1
,
"EPC_thread"
,
EPCMachine
,
user
,
password
,
task_EPC_compile
,
False
,
timeout_thread
)
thread_eNB
=
oaiThread
(
2
,
"eNB_thread"
,
eNBMachine
,
user
,
password
,
task_eNB_compile
,
False
,
timeout_thread
)
thread_UE
=
oaiThread
(
3
,
"UE_thread"
,
UEMachine
,
user
,
password
,
task_UE_compile
,
False
,
timeout_thread
)
...
...
cmake_targets/build_oai
View file @
b481bfd9
...
...
@@ -74,7 +74,7 @@ Options
--install-optional-packages
Install useful but not mandatory packages such as valgrind
-g | --run-with-gdb
Add debugging symbols to compilation directives. It also disables any compiler optimization.
Add debugging symbols to compilation directives. It also disables any compiler optimization.
Only for debugging. Do not use in normal operation!
-h | --help
Print this help
--eNB
...
...
@@ -128,9 +128,9 @@ Options
--disable-hardware-dependency
Disable HW dependency during installation
Usage (first build):
oaisim (eNB + UE): ./build_oai -I
-g
--oaisim -x --install-system-files
Eurecom EXMIMO + COTS UE : ./build_oai -I
-g
--eNB -x --install-system-files
NI/ETTUS B201 + COTS UE : ./build_oai -I
-g
--eNB -x --install-system-files -w USRP
oaisim (eNB + UE): ./build_oai -I --oaisim -x --install-system-files
Eurecom EXMIMO + COTS UE : ./build_oai -I --eNB -x --install-system-files
NI/ETTUS B201 + COTS UE : ./build_oai -I --eNB -x --install-system-files -w USRP
Usage (Regular):
oaisim : ./build_oai --oaisim -x
Eurecom EXMIMO + OAI ENB : ./build_oai --eNB -x
...
...
openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c
View file @
b481bfd9
...
...
@@ -486,6 +486,11 @@ void compute_beta8(llr_t* alpha,llr_t* beta,llr_t *m_11,llr_t* m_10,unsigned sho
#endif
if
(
frame_length
>
6143
)
{
LOG_E
(
PHY
,
"compute_beta: frame_length %d
\n
"
,
frame_length
);
return
;
}
// we are supposed to run compute_alpha just before compute_beta
// so the initial states of backward computation can be set from last value of alpha states (forward computation)
...
...
@@ -505,9 +510,11 @@ void compute_beta8(llr_t* alpha,llr_t* beta,llr_t *m_11,llr_t* m_10,unsigned sho
beta_ptr
[
6
]
=
alpha128
[
6
+
(
frame_length
>>
1
)];
beta_ptr
[
7
]
=
alpha128
[
7
+
(
frame_length
>>
1
)];
int
overlap
=
(
frame_length
>>
4
)
>
L
?
(
frame_length
>>
4
)
-
L
:
0
;
for
(
rerun_flag
=
0
,
loopval
=
0
;
rerun_flag
<
2
;
loopval
=
(
frame_length
>>
4
)
-
L
,
rerun_flag
++
)
{
loopval
=
overlap
,
rerun_flag
++
)
{
if
(
offset8_flag
==
0
)
{
// FIXME! beta0-beta7 are used uninitialized. FIXME!
...
...
openair1/PHY/LTE_TRANSPORT/dci.c
View file @
b481bfd9
...
...
@@ -2857,6 +2857,7 @@ void dci_decoding_procedure0(LTE_UE_PDCCH **pdcch_vars,
}
}
LOG_D
(
PHY
,
"DCI decoding CRNTI [format_c: %d, nCCE[subframe: %d]: %d ]
\n
"
,
format_c
,
subframe
,
pdcch_vars
[
eNB_id
]
->
nCCE
[
subframe
]);
// memcpy(&dci_alloc[*dci_cnt].dci_pdu[0],dci_decoded_output,sizeof_bytes);
...
...
openair1/PHY/LTE_TRANSPORT/if5_tools.c
View file @
b481bfd9
...
...
@@ -97,8 +97,8 @@ void send_IF5(PHY_VARS_eNB *eNB, openair0_timestamp proc_timestamp, int subframe
__m128i
t0
,
t1
;
tx_buffer
=
memalign
(
16
,
MAC_HEADER_SIZE_BYTES
+
sizeof_IF5_mobipass_header_t
+
db_fulllength
*
sizeof
(
int16_t
));
IF5_mobipass_header_t
*
header
=
(
IF5_mobipass_header_t
*
)(
tx_buffer
+
MAC_HEADER_SIZE_BYTES
);
data_block_head
=
(
__m128i
*
)(
tx_buffer
+
MAC_HEADER_SIZE_BYTES
+
sizeof_IF5_mobipass_header_t
+
4
);
IF5_mobipass_header_t
*
header
=
(
IF5_mobipass_header_t
*
)(
(
uint8_t
*
)
tx_buffer
+
MAC_HEADER_SIZE_BYTES
);
data_block_head
=
(
__m128i
*
)(
(
uint8_t
*
)
tx_buffer
+
MAC_HEADER_SIZE_BYTES
+
sizeof_IF5_mobipass_header_t
+
4
);
header
->
flags
=
0
;
header
->
fifo_status
=
0
;
...
...
@@ -109,11 +109,11 @@ void send_IF5(PHY_VARS_eNB *eNB, openair0_timestamp proc_timestamp, int subframe
txp
[
0
]
=
(
void
*
)
&
eNB
->
common_vars
.
txdata
[
0
][
0
][
subframe
*
eNB
->
frame_parms
.
samples_per_tti
];
txp128
=
(
__m128i
*
)
txp
[
0
];
for
(
packet_id
=
0
;
packet_id
<
(
fp
->
samples_per_tti
*
2
)
/
db_fulllength
;
packet_id
++
)
{
header
->
time_stamp
=
proc_timestamp
+
packet_id
*
db_fulllength
;
for
(
packet_id
=
0
;
packet_id
<
fp
->
samples_per_tti
/
db_fulllength
;
packet_id
++
)
{
header
->
time_stamp
=
(
uint32_t
)(
proc_timestamp
+
packet_id
*
db_fulllength
)
;
data_block
=
data_block_head
;
for
(
i
=
0
;
i
<
db_fulllength
>>
3
;
i
+=
2
)
{
for
(
i
=
0
;
i
<
db_fulllength
>>
2
;
i
+=
2
)
{
t0
=
_mm_srai_epi16
(
*
txp128
++
,
4
);
t1
=
_mm_srai_epi16
(
*
txp128
++
,
4
);
...
...
openair1/PHY/LTE_TRANSPORT/phich.c
View file @
b481bfd9
...
...
@@ -427,9 +427,10 @@ void generate_phich(LTE_DL_FRAME_PARMS *frame_parms,
if
(
HI
>
0
)
HI
=
1
;
// c = (1-(2*HI))*SSS_AMP;
// x1 is set in lte_gold_generic
x2
=
(((
subframe
+
1
)
*
(
frame_parms
->
Nid_cell
+
1
))
<<
9
)
+
frame_parms
->
Nid_cell
;
x2
=
(((
subframe
+
1
)
*
(
(
frame_parms
->
Nid_cell
<<
1
)
+
1
))
<<
9
)
+
frame_parms
->
Nid_cell
;
s
=
lte_gold_generic
(
&
x1
,
&
x2
,
reset
);
...
...
@@ -1111,7 +1112,7 @@ void rx_phich(PHY_VARS_UE *ue,
phich_d_ptr
=
phich_d
;
// x1 is set in lte_gold_generic
x2
=
(((
subframe
+
1
)
*
(
frame_parms
->
Nid_cell
+
1
))
<<
9
)
+
frame_parms
->
Nid_cell
;
x2
=
(((
subframe
+
1
)
*
(
(
frame_parms
->
Nid_cell
<<
1
)
+
1
))
<<
9
)
+
frame_parms
->
Nid_cell
;
s
=
lte_gold_generic
(
&
x1
,
&
x2
,
reset
);
...
...
openair1/PHY/LTE_TRANSPORT/prach.c
View file @
b481bfd9
...
...
@@ -810,11 +810,14 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1
break
;
case
75
:
memset
((
void
*
)
prachF
,
0
,
4
*
1
9
432
);
memset
((
void
*
)
prachF
,
0
,
4
*
1
8
432
);
break
;
case
100
:
if
(
ue
->
frame_parms
.
threequarter_fs
==
0
)
memset
((
void
*
)
prachF
,
0
,
4
*
24576
);
else
memset
((
void
*
)
prachF
,
0
,
4
*
18432
);
break
;
}
...
...
@@ -878,6 +881,9 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1
break
;
}
if
(
ue
->
frame_parms
.
threequarter_fs
==
1
)
Ncp
=
(
Ncp
*
3
)
>>
2
;
prach2
=
prach
+
(
Ncp
<<
1
);
// do IDFT
...
...
@@ -978,6 +984,7 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1
break
;
case
100
:
if
(
ue
->
frame_parms
.
threequarter_fs
==
0
)
{
if
(
prach_fmt
==
4
)
{
idft4096
(
prachF
,
prach2
,
1
);
memmove
(
prach
,
prach
+
8192
,
Ncp
<<
2
);
...
...
@@ -992,6 +999,24 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1
prach_len
=
2
*
24576
+
Ncp
;
}
}
}
else
{
if
(
prach_fmt
==
4
)
{
idft3072
(
prachF
,
prach2
);
//TODO: account for repeated format in dft output
memmove
(
prach
,
prach
+
6144
,
Ncp
<<
2
);
prach_len
=
3072
+
Ncp
;
}
else
{
idft18432
(
prachF
,
prach2
);
memmove
(
prach
,
prach
+
36864
,
Ncp
<<
2
);
prach_len
=
18432
+
Ncp
;
printf
(
"Generated prach for 100 PRB, 3/4 sampling
\n
"
);
if
(
prach_fmt
>
1
)
{
memmove
(
prach2
+
36834
,
prach2
,
73728
);
prach_len
=
2
*
18432
+
Ncp
;
}
}
}
break
;
}
...
...
@@ -1488,7 +1513,7 @@ void rx_prach(PHY_VARS_eNB *eNB,
#ifdef PRACH_DEBUG
if
(
en
>
40
)
{
//
if (en>40) {
k
=
(
12
*
n_ra_prb
)
-
6
*
eNB
->
frame_parms
.
N_RB_UL
;
if
(
k
<
0
)
...
...
@@ -1502,7 +1527,7 @@ void rx_prach(PHY_VARS_eNB *eNB,
write_output
(
"prach_rxF_comp0.m"
,
"prach_rxF_comp0"
,
prachF
,
1024
,
1
,
1
);
write_output
(
"prach_ifft0.m"
,
"prach_t0"
,
prach_ifft
[
0
],
1024
,
1
,
1
);
exit
(
-
1
);
}
//
}
#endif
}
// new dft
...
...
openair1/PHY/LTE_TRANSPORT/pucch.c
View file @
b481bfd9
...
...
@@ -146,6 +146,9 @@ void generate_pucch1x(int32_t **txdataF,
uint8_t
Ncs1
=
frame_parms
->
pucch_config_common
.
nCS_AN
;
uint8_t
Ncs1_div_deltaPUCCH_Shift
=
Ncs1
/
deltaPUCCH_Shift
;
LOG_D
(
PHY
,
"generate_pucch Start [deltaPUCCH_Shift %d, NRB2 %d, Ncs1_div_deltaPUCCH_Shift %d, n1_pucch %d]
\n
"
,
deltaPUCCH_Shift
,
NRB2
,
Ncs1_div_deltaPUCCH_Shift
,
n1_pucch
);
uint32_t
u0
=
(
frame_parms
->
Nid_cell
+
frame_parms
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
grouphop
[
subframe
<<
1
])
%
30
;
uint32_t
u1
=
(
frame_parms
->
Nid_cell
+
frame_parms
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
grouphop
[
1
+
(
subframe
<<
1
)])
%
30
;
uint32_t
v0
=
frame_parms
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
seqhop
[
subframe
<<
1
];
...
...
@@ -170,6 +173,11 @@ void generate_pucch1x(int32_t **txdataF,
printf
(
"[PHY] PUCCH: cNcs1/deltaPUCCH_Shift %d, Nprime %d, n1_pucch %d
\n
"
,
thres
,
Nprime
,
n1_pucch
);
#endif
LOG_D
(
PHY
,
"[PHY] PUCCH: n1_pucch %d, thres %d Ncs1_div_deltaPUCCH_Shift %d (12/deltaPUCCH_Shift) %d Nprime_div_deltaPUCCH_Shift %d
\n
"
,
n1_pucch
,
thres
,
Ncs1_div_deltaPUCCH_Shift
,
(
int
)(
12
/
deltaPUCCH_Shift
),
Nprime_div_deltaPUCCH_Shift
);
LOG_D
(
PHY
,
"[PHY] PUCCH: deltaPUCCH_Shift %d, Nprime %d
\n
"
,
deltaPUCCH_Shift
,
Nprime
);
N_UL_symb
=
(
frame_parms
->
Ncp
==
0
)
?
7
:
6
;
if
(
n1_pucch
<
thres
)
...
...
@@ -182,6 +190,9 @@ void generate_pucch1x(int32_t **txdataF,
else
{
d
=
(
frame_parms
->
Ncp
==
0
)
?
2
:
0
;
h
=
(
nprime0
+
d
)
%
(
c
*
Nprime_div_deltaPUCCH_Shift
);
#ifdef DEBUG_PUCCH_TX
printf
(
"[PHY] PUCCH: h %d, d %d
\n
"
,
h
,
d
);
#endif
nprime1
=
(
h
/
c
)
+
(
h
%
c
)
*
Nprime_div_deltaPUCCH_Shift
;
}
...
...
@@ -200,7 +211,7 @@ void generate_pucch1x(int32_t **txdataF,
n_oc1
<<=
1
;
#ifdef DEBUG_PUCCH_TX
printf
(
"[PHY] PUCCH: noc0 %d noc1
1
%d
\n
"
,
n_oc0
,
n_oc1
);
printf
(
"[PHY] PUCCH: noc0 %d noc1 %d
\n
"
,
n_oc0
,
n_oc1
);
#endif
nprime
=
nprime0
;
...
...
openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c
View file @
b481bfd9
...
...
@@ -1192,6 +1192,7 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,
y[i2] = c*ulsch_llr[i++];
i2=(i2+(Cmux<<2)-3);
*/
// slightly more optimized version (equivalent to above) for 16QAM to improve computational performance
*
(
__m64
*
)
&
y
[
i2
]
=
_mm_sign_pi16
(
*
(
__m64
*
)
&
ulsch_llr
[
i
],
*
(
__m64
*
)
&
cseq
[
i
]);
i
+=
4
;
i2
+=
(
Cmux
<<
2
);
...
...
@@ -1523,6 +1524,7 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,
// RI
// rank 1
if
((
ulsch_harq
->
O_RI
==
1
)
&&
(
Qprime_RI
>
0
))
{
ulsch_harq
->
o_RI
[
0
]
=
((
ulsch_harq
->
q_RI
[
0
]
+
ulsch_harq
->
q_RI
[
Q_m
/
2
])
>
0
)
?
0
:
1
;
}
...
...
openair1/PHY/MODULATION/slot_fep_mbsfn.c
View file @
b481bfd9
...
...
@@ -108,10 +108,8 @@ int slot_fep_mbsfn(PHY_VARS_UE *ue,
sample_offset
);
#endif
for
(
aa
=
0
;
aa
<
frame_parms
->
nb_antennas_rx
;
aa
++
)
{
memset
(
&
common_vars
->
rxdataF
[
aa
][
2
*
frame_parms
->
ofdm_symbol_size
*
l
],
0
,
2
*
frame_parms
->
ofdm_symbol_size
*
sizeof
(
int
));
memset
(
&
common_vars
->
rxdataF
[
aa
][
frame_parms
->
ofdm_symbol_size
*
l
],
0
,
frame_parms
->
ofdm_symbol_size
*
sizeof
(
int
));
if
(
l
==
0
)
{
start_meas
(
&
ue
->
rx_dft_stats
);
dft
((
int16_t
*
)
&
common_vars
->
rxdata
[
aa
][(
sample_offset
+
...
...
@@ -139,9 +137,10 @@ int slot_fep_mbsfn(PHY_VARS_UE *ue,
(
int16_t
*
)
&
common_vars
->
rxdataF
[
aa
][
frame_parms
->
ofdm_symbol_size
*
l
],
1
);
stop_meas
(
&
ue
->
rx_dft_stats
);
}
}
//if ((l==0) || (l==(4-frame_parms->Ncp))) {
// changed to invoke MBSFN channel estimation in symbols 2,6,10
if
((
l
==
2
)
||
(
l
==
6
)
||
(
l
==
10
))
{
...
...
openair1/PHY/TOOLS/lte_dfts.c
View file @
b481bfd9
...
...
@@ -5222,7 +5222,7 @@ void dft8192(int16_t *x,int16_t *y,int scale)
xtmpp = xtmp;
for (i=0; i<
32
; i++) {
for (i=0; i<
16
; i++) {
transpose4_ooff_simd256(x256 ,xtmpp,512);
transpose4_ooff_simd256(x256+2,xtmpp+1,512);
transpose4_ooff_simd256(x256+4,xtmpp+2,512);
...
...
@@ -5260,7 +5260,7 @@ void dft8192(int16_t *x,int16_t *y,int scale)
}
dft4096((int16_t*)(xtmp),(int16_t*)ytmp,1);
dft4096((int16_t*)(xtmp+
1024
),(int16_t*)(ytmp+512),1);
dft4096((int16_t*)(xtmp+
512
),(int16_t*)(ytmp+512),1);
for (i=0; i<512; i++) {
...
...
@@ -5312,7 +5312,7 @@ void idft8192(int16_t *x,int16_t *y,int scale)
xtmpp = xtmp;
for (i=0; i<
32
; i++) {
for (i=0; i<
16
; i++) {
transpose4_ooff_simd256(x256 ,xtmpp,512);
transpose4_ooff_simd256(x256+2,xtmpp+1,512);
transpose4_ooff_simd256(x256+4,xtmpp+2,512);
...
...
@@ -5350,7 +5350,7 @@ void idft8192(int16_t *x,int16_t *y,int scale)
}
idft4096((int16_t*)(xtmp),(int16_t*)ytmp,1);
idft4096((int16_t*)(xtmp+
1024
),(int16_t*)(ytmp+512),1);
idft4096((int16_t*)(xtmp+
512
),(int16_t*)(ytmp+512),1);
for (i=0; i<512; i++) {
...
...
@@ -5673,15 +5673,58 @@ void idft12288(int16_t *input, int16_t *output)
// write_output("out.m","out",output,6144,1,1);
}
#include "twiddle18432.h"
// 6144 x 3
void dft18432(int16_t *input, int16_t *output)
{
void dft18432(int16_t *input, int16_t *output) {
int i,i2,j;
uint32_t tmp[3][6144] __attribute__((aligned(32)));
uint32_t tmpo[3][6144] __attribute__((aligned(32)));
for (i=0,j=0; i<6144; i++) {
tmp[0][i] = ((uint32_t *)input)[j++];
tmp[1][i] = ((uint32_t *)input)[j++];
tmp[2][i] = ((uint32_t *)input)[j++];
}
dft6144((int16_t*)(tmp[0]),(int16_t*)(tmpo[0]));
dft6144((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]));
dft6144((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]));
for (i=0,i2=0; i<12288; i+=8,i2+=4) {
bfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]),
(simd_q15_t*)(output+i),(simd_q15_t*)(output+12288+i),(simd_q15_t*)(output+24576+i),
(simd_q15_t*)(twa18432+i),(simd_q15_t*)(twb18432+i));
}
_mm_empty();
_m_empty();
}
void idft18432(int16_t *input, int16_t *output)
{
void idft18432(int16_t *input, int16_t *output) {
int i,i2,j;
uint32_t tmp[3][6144] __attribute__((aligned(32)));
uint32_t tmpo[3][6144] __attribute__((aligned(32)));
for (i=0,j=0; i<6144; i++) {
tmp[0][i] = ((uint32_t *)input)[j++];
tmp[1][i] = ((uint32_t *)input)[j++];
tmp[2][i] = ((uint32_t *)input)[j++];
}
idft6144((int16_t*)(tmp[0]),(int16_t*)(tmpo[0]));
idft6144((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]));
idft6144((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]));
for (i=0,i2=0; i<12288; i+=8,i2+=4) {
ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]),
(simd_q15_t*)(output+i),(simd_q15_t*)(output+12288+i),(simd_q15_t*)(output+24576+i),
(simd_q15_t*)(twa18432+i),(simd_q15_t*)(twb18432+i));
}
_mm_empty();
_m_empty();
}
#include "twiddle24576.h"
...
...
@@ -5726,8 +5769,8 @@ void dft24576(int16_t *input, int16_t *output)
void idft24576(int16_t *input, int16_t *output)
{
int i,i2,j;
uint32_t tmp[3][
16384
] __attribute__((aligned(32)));
uint32_t tmpo[3][
16384
] __attribute__((aligned(32)));
uint32_t tmp[3][
8192
] __attribute__((aligned(32)));
uint32_t tmpo[3][
8192
] __attribute__((aligned(32)));
for (i=0,j=0; i<8192; i++) {
tmp[0][i] = ((uint32_t *)input)[j++];
...
...
@@ -5739,13 +5782,6 @@ void idft24576(int16_t *input, int16_t *output)
idft8192((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),1);
idft8192((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),1);
/*
for (i=1; i<8192; i++) {
tmpo[0][i] = tmpo[0][i<<1];
tmpo[1][i] = tmpo[1][i<<1];
tmpo[2][i] = tmpo[2][i<<1];
}*/
/*
write_output("in.m","in",input,24576,1,1);
write_output("out0.m","o0",tmpo[0],8192,1,1);
...
...
@@ -19122,6 +19158,55 @@ int main(int argc, char**argv)
write_output("y2048.m","y2048",y,2048,1,1);
write_output("x2048.m","x2048",x,2048,1,1);
memset((void*)x,0,2048*sizeof(int32_t));
for (i=2;i<2402;i++) {
if ((taus() & 1)==0)
((int16_t*)x)[i] = 364;
else
((int16_t*)x)[i] = -364;
}
for (i=2*(4096-1200);i<8192;i++) {
if ((taus() & 1)==0)
((int16_t*)x)[i] = 364;
else
((int16_t*)x)[i] = -364;
}
reset_meas(&ts);
for (i=0; i<10000; i++) {
start_meas(&ts);
idft4096((int16_t *)x,(int16_t *)y,1);
stop_meas(&ts);
}
printf("\n\n4096-point(%f cycles)\n",(double)ts.diff/(double)ts.trials);
write_output("y4096.m","y4096",y,4096,1,1);
write_output("x4096.m","x4096",x,4096,1,1);
memset((void*)x,0,8192*sizeof(int32_t));
for (i=2;i<4802;i++) {
if ((taus() & 1)==0)
((int16_t*)x)[i] = 364;
else
((int16_t*)x)[i] = -364;
}
for (i=2*(4096-1200);i<8192;i++) {
if ((taus() & 1)==0)
((int16_t*)x)[i] = 364;
else
((int16_t*)x)[i] = -364;
}
reset_meas(&ts);
for (i=0; i<10000; i++) {
start_meas(&ts);
idft8192((int16_t *)x,(int16_t *)y,1);
stop_meas(&ts);
}
printf("\n\n8192-point(%f cycles)\n",(double)ts.diff/(double)ts.trials);
write_output("y8192.m","y8192",y,8192,1,1);
write_output("x8192.m","x8192",x,8192,1,1);
return(0);
}
openair1/PHY/TOOLS/twiddle12288.h
View file @
b481bfd9
This source diff could not be displayed because it is too large. You can
view the blob
instead.
openair1/PHY/TOOLS/twiddle18432.h
0 → 100644
View file @
b481bfd9
/*******************************************************************************
OpenAirInterface
Copyright(c) 1999 - 2014 Eurecom
OpenAirInterface is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenAirInterface is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with OpenAirInterface.The full GNU General Public License is
included in this distribution in the file called "COPYING". If not,
see <http://www.gnu.org/licenses/>.
Contact Information
OpenAirInterface Admin: openair_admin@eurecom.fr
OpenAirInterface Tech : openair_tech@eurecom.fr
OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr
Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
*******************************************************************************/
/* Twiddles generated with
twa = floor(32767*exp(-sqrt(-1)*2*pi*(0:6143)/18432));
twb = floor(32767*exp(-sqrt(-1)*2*pi*(0:2:12286)/18432));
twa2 = zeros(1,12288);
twb2 = zeros(1,12288);
twa2(1:2:end) = real(twa);
twa2(2:2:end) = imag(twa);
twb2(1:2:end) = real(twb);
twb2(2:2:end) = imag(twb);
*/
int16_t
twa18432
[
12288
]
=
{
32767
,
0
,
32766
,
-
12
,
32766
,
-
23
,
32766
,
-
34
,
32766
,
-
45
,
32766
,
-
56
,
32766
,
-
68
,
32766
,
-
79
,
32766
,
-
90
,
32766
,
-
101
,
32766
,
-
112
,
32766
,
-
123
,
32766
,
-
135
,
32766
,
-
146
,
32766
,
-
157
,
32766
,
-
168
,
32766
,
-
179
,
32766
,
-
190
,
32766
,
-
202
,
32766
,
-
213
,
32766
,
-
224
,
32766
,
-
235
,
32766
,
-
246
,
32765
,
-
257
,
32765
,
-
269
,
32765
,
-
280
,
32765
,
-
291
,
32765
,
-
302
,
32765
,
-
313
,
32765
,
-
324
,
32765
,
-
336
,
32765
,
-
347
,
32765
,
-
358
,
32764
,
-
369
,
32764
,
-
380
,
32764
,
-
391
,
32764
,
-
403
,
32764
,
-
414
,
32764
,
-
425
,
32764
,
-
436
,
32763
,
-
447
,
32763
,
-
458
,
32763
,
-
470
,
32763
,
-
481
,
32763
,
-
492
,
32763
,
-
503
,
32762
,
-
514
,
32762
,
-
525
,
32762
,
-
537
,
32762
,
-
548
,
32762
,
-
559
,
32762
,
-
570
,
32761
,
-
581
,
32761
,
-
592
,
32761
,
-
604
,
32761
,
-
615
,
32761
,
-
626
,
32760
,
-
637
,
32760
,
-
648
,
32760
,
-
659
,
32760
,
-
671
,
32759
,
-
682
,
32759
,
-
693
,
32759
,
-
704
,
32759
,
-
715
,
32758
,
-
726
,
32758
,
-
738
,
32758
,
-
749
,
32758
,
-
760
,
32757
,
-
771
,
32757
,
-
782
,
32757
,
-
793
,
32757
,
-
805
,
32756
,
-
816
,
32756
,
-
827
,
32756
,
-
838
,
32756
,
-
849
,
32755
,
-
860
,
32755
,
-
872
,
32755
,
-
883
,
32754
,
-
894
,
32754
,
-
905
,
32754
,
-
916
,
32753
,
-
927
,
32753
,
-
939
,
32753
,
-
950
,
32752
,
-
961
,
32752
,
-
972
,
32752
,
-
983
,
32751
,
-
994
,
32751
,
-
1006
,
32751
,
-
1017
,
32750
,
-
1028
,
32750
,
-
1039
,
32750
,
-
1050
,
32749
,
-
1061
,
32749
,
-
1073
,
32749
,
-
1084
,
32748
,
-
1095
,
32748
,
-
1106
,
32747
,
-
1117
,
32747
,
-
1128
,
32747
,
-
1140
,
32746
,
-
1151
,
32746
,
-
1162
,
32746
,
-
1173
,
32745
,
-
1184
,
32745
,
-
1195
,
32744
,
-
1207
,
32744
,
-
1218
,
32743
,
-
1229
,
32743
,
-
1240
,
32743
,
-
1251
,
32742
,
-
1262
,
32742
,
-
1274
,
32741
,
-
1285
,
32741
,
-
1296
,
32740
,
-
1307
,
32740
,
-
1318
,
32740
,
-
1329
,
32739
,
-
1340
,
32739
,
-
1352
,
32738
,
-
1363
,
32738
,
-
1374
,
32737
,
-
1385
,
32737
,
-
1396
,
32736
,
-
1407
,
32736
,
-
1419
,
32735
,
-
1430
,
32735
,
-
1441
,
32734
,
-
1452
,
32734
,
-
1463
,
32733
,
-
1474
,
32733
,
-
1486
,
32732
,
-
1497
,
32732
,
-
1508
,
32731
,
-
1519
,
32731
,
-
1530
,
32730
,
-
1541
,
32730
,
-
1553
,
32729
,
-
1564
,
32729
,
-
1575
,
32728
,
-
1586
,
32728
,
-
1597
,
32727
,
-
1608
,
32726
,
-
1619
,
32726
,
-
1631
,
32725
,
-
1642
,
32725
,
-
1653
,
32724
,
-
1664
,
32724
,
-
1675
,
32723
,
-
1686
,
32723
,
-
1698
,
32722
,
-
1709
,
32721
,
-
1720
,
32721
,
-
1731
,
32720
,
-
1742
,
32720
,
-
1753
,
32719
,
-
1764
,
32718
,
-
1776
,
32718
,
-
1787
,
32717
,
-
1798
,
32717
,
-
1809
,
32716
,
-
1820
,
32715
,
-
1831
,
32715
,
-
1843
,
32714
,
-
1854
,
32713
,
-
1865
,
32713
,
-
1876
,
32712
,
-
1887
,
32711
,
-
1898
,
32711
,
-
1909
,
32710
,
-
1921
,
32710
,
-
1932
,
32709
,
-
1943
,
32708
,
-
1954
,
32708
,
-
1965
,
32707
,
-
1976
,
32706
,
-
1987
,
32706
,
-
1999
,
32705
,
-
2010
,
32704
,
-
2021
,
32703
,
-
2032
,
32703
,
-
2043
,
32702
,
-
2054
,
32701
,
-
2066
,
32701
,
-
2077
,
32700
,
-
2088
,
32699
,
-
2099
,
32699
,
-
2110
,
32698
,
-
2121
,
32697
,
-
2132
,
32696
,
-
2144
,
32696
,
-
2155
,
32695
,
-
2166
,
32694
,
-
2177
,
32693
,
-
2188
,
32693
,
-
2199
,
32692
,
-
2210
,
32691
,
-
2222
,
32690
,
-
2233
,
32690
,
-
2244
,
32689
,
-
2255
,
32688
,
-
2266
,
32687
,
-
2277
,
32687
,
-
2288
,
32686
,
-
2300
,
32685
,
-
2311
,
32684
,
-
2322
,
32683
,
-
2333
,
32683
,
-
2344
,
32682
,
-
2355
,
32681
,
-
2366
,
32680
,
-
2378
,
32679
,
-
2389
,
32679
,
-
2400
,
32678
,
-
2411
,
32677
,
-
2422
,
32676
,
-
2433
,
32675
,
-
2444
,
32674
,
-
2456
,
32674
,
-
2467
,
32673
,
-
2478
,
32672
,
-
2489
,
32671
,
-
2500
,
32670
,
-
2511
,
32669
,
-
2522
,
32668
,
-
2534
,
32668
,
-
2545
,
32667
,
-
2556
,
32666
,
-
2567
,
32665
,
-
2578
,
32664
,
-
2589
,
32663
,
-
2600
,
32662
,
-
2611
,
32661
,
-
2623
,
32661
,
-
2634
,
32660
,
-
2645
,
32659
,
-
2656
,
32658
,
-
2667
,
32657
,
-
2678
,
32656
,
-
2689
,
32655
,
-
2701
,
32654
,
-
2712
,
32653
,
-
2723
,
32652
,
-
2734
,
32651
,
-
2745
,
32650
,
-
2756
,
32649
,
-
2767
,
32649
,
-
2778
,
32648
,
-
2790
,
32647
,
-
2801
,
32646
,
-
2812
,
32645
,
-
2823
,
32644
,
-
2834
,
32643
,
-
2845
,
32642
,
-
2856
,
32641
,
-
2867
,
32640
,
-
2879
,
32639
,
-
2890
,
32638
,
-
2901
,
32637
,
-
2912
,
32636
,
-
2923
,
32635
,
-
2934
,
32634
,
-
2945
,
32633
,
-
2956
,
32632
,
-
2968
,
32631
,
-
2979
,
32630
,
-
2990
,
32629
,
-
3001
,
32628
,
-
3012
,
32627
,
-
3023
,
32626
,
-
3034
,
32625
,
-
3045
,
32624
,
-
3057
,
32623
,
-
3068
,
32622
,
-
3079
,
32621
,
-
3090
,
32619
,
-
3101
,
32618
,
-
3112
,
32617
,
-
3123
,
32616
,
-
3134
,
32615
,
-
3146
,
32614
,
-
3157
,
32613
,
-
3168
,
32612
,
-
3179
,
32611
,
-
3190
,
32610
,
-
3201
,
32609
,
-
3212
,
32608
,
-
3223
,
32607
,
-
3234
,
32605
,
-
3246
,
32604
,
-
3257
,
32603
,
-
3268
,
32602
,
-
3279
,
32601
,
-
3290
,
32600
,
-
3301
,
32599
,
-
3312
,
32598
,
-
3323
,
32596
,
-
3334
,
32595
,
-
3346
,
32594
,
-
3357
,
32593
,
-
3368
,
32592
,
-
3379
,
32591
,
-
3390
,
32590
,
-
3401
,
32588
,
-
3412
,
32587
,
-
3423
,
32586
,
-
3434
,
32585
,
-
3446
,
32584
,
-
3457
,
32583
,
-
3468
,
32581
,
-
3479
,
32580
,
-
3490
,
32579
,
-
3501
,
32578
,
-
3512
,
32577
,
-
3523
,
32575
,
-
3534
,
32574
,
-
3546
,
32573
,
-
3557
,
32572
,
-
3568
,
32571
,
-
3579
,
32569
,
-
3590
,
32568
,
-
3601
,
32567
,
-
3612
,
32566
,
-
3623
,
32564
,
-
3634
,
32563
,
-
3645
,
32562
,
-
3657
,
32561
,
-
3668
,
32559
,
-
3679
,
32558
,
-
3690
,
32557
,
-
3701
,
32556
,
-
3712
,
32554
,
-
3723
,
32553
,
-
3734
,
32552
,
-
3745
,
32551
,
-
3756
,
32549
,
-
3768
,
32548
,
-
3779
,
32547
,
-
3790
,
32545
,
-
3801
,
32544
,
-
3812
,
32543
,
-
3823
,
32541
,
-
3834
,
32540
,
-
3845
,
32539
,
-
3856
,
32538
,
-
3867
,
32536
,
-
3878
,
32535
,
-
3890
,
32534
,
-
3901
,
32532
,
-
3912
,
32531
,
-
3923
,
32530
,
-
3934
,
32528
,
-
3945
,
32527
,
-
3956
,
32526
,
-
3967
,
32524
,
-
3978
,
32523
,
-
3989
,
32521
,
-
4000
,
32520
,
-
4012
,
32519
,
-
4023
,
32517
,
-
4034
,
32516
,
-
4045
,
32515
,
-
4056
,
32513
,
-
4067
,
32512
,
-
4078
,
32510
,
-
4089
,
32509
,
-
4100
,
32508
,
-
4111
,
32506
,
-
4122
,
32505
,
-
4133
,
32503
,
-
4145
,
32502
,
-
4156
,
32501
,
-
4167
,
32499
,
-
4178
,
32498
,
-
4189
,
32496
,
-
4200
,
32495
,
-
4211
,
32493
,
-
4222
,
32492
,
-
4233
,
32491
,
-
4244
,
32489
,
-
4255
,
32488
,
-
4266
,
32486
,
-
4277
,
32485
,
-
4289
,
32483
,
-
4300
,
32482
,
-
4311
,
32480
,
-
4322
,
32479
,
-
4333
,
32477
,
-
4344
,
32476
,
-
4355
,
32474
,
-
4366
,
32473
,
-
4377
,
32471
,
-
4388
,
32470
,
-
4399
,
32468
,
-
4410
,
32467
,
-
4421
,
32465
,
-
4432
,
32464
,
-
4444
,
32462
,
-
4455
,
32461
,
-
4466
,
32459
,
-
4477
,
32458
,
-
4488
,
32456
,
-
4499
,
32455
,
-
4510
,
32453
,
-
4521
,
32452
,
-
4532
,
32450
,
-
4543
,
32449
,
-
4554
,
32447
,
-
4565
,
32445
,
-
4576
,
32444
,
-
4587
,
32442
,
-
4598
,
32441
,
-
4609
,
32439
,
-
4621
,
32438
,
-
4632
,
32436
,
-
4643
,
32434
,
-
4654
,
32433
,
-
4665
,
32431
,
-
4676
,
32430
,
-
4687
,
32428
,
-
4698
,
32426
,
-
4709
,
32425
,
-
4720
,
32423
,
-
4731
,
32422
,
-
4742
,
32420
,
-
4753
,
32418
,
-
4764
,
32417
,
-
4775
,
32415
,
-
4786
,
32413
,
-
4797
,
32412
,
-
4808
,
32410
,
-
4819
,
32409
,
-
4831
,
32407
,
-
4842
,
32405
,
-
4853
,
32404
,
-
4864
,
32402
,
-
4875
,
32400
,
-
4886
,
32399
,
-
4897
,
32397
,
-
4908
,
32395
,
-
4919
,
32394
,
-
4930
,
32392
,
-
4941
,
32390
,
-
4952
,
32389
,
-
4963
,
32387
,
-
4974
,
32385
,
-
4985
,
32383
,
-
4996
,
32382
,
-
5007
,
32380
,
-
5018
,
32378
,
-
5029
,
32377
,
-
5040
,
32375
,
-
5051
,
32373
,
-
5062
,
32371
,
-
5073
,
32370
,
-
5084
,
32368
,
-
5095
,
32366
,
-
5107
,
32364
,
-
5118
,
32363
,
-
5129
,
32361
,
-
5140
,
32359
,
-
5151
,
32357
,
-
5162
,
32356
,
-
5173
,
32354
,
-
5184
,
32352
,
-
5195
,
32350
,
-
5206
,
32349
,
-
5217
,
32347
,
-
5228
,
32345
,
-
5239
,
32343
,
-
5250
,
32341
,
-
5261
,
32340
,
-
5272
,
32338
,
-
5283
,
32336
,
-
5294
,
32334
,
-
5305
,
32332
,
-
5316
,
32331
,
-
5327
,
32329
,
-
5338
,
32327
,
-
5349
,
32325
,
-
5360
,
32323
,
-
5371
,
32322
,
-
5382
,
32320
,
-
5393
,
32318
,
-
5404
,
32316
,
-
5415
,
32314
,
-
5426
,
32312
,
-
5437
,
32310
,
-
5448
,
32309
,
-
5459
,
32307
,
-
5470
,
32305
,
-
5481
,
32303
,
-
5492
,
32301
,
-
5503
,
32299
,
-
5514
,
32297
,
-
5525
,
32295
,
-
5536
,
32294
,
-
5547
,
32292
,
-
5558
,
32290
,
-
5569
,
32288
,
-
5580
,
32286
,
-
5591
,
32284
,
-
5602
,
32282
,
-
5613
,
32280
,
-
5624
,
32278
,
-
5635
,
32276
,
-
5646
,
32274
,
-
5657
,
32273
,
-
5668
,
32271
,
-
5679
,
32269
,
-
5690
,
32267
,
-
5701
,
32265
,
-
5712
,
32263
,
-
5723
,
32261
,
-
5734
,
32259
,
-
5745
,
32257
,
-
5756
,
32255
,
-
5767
,
32253
,
-
5778
,
32251
,
-
5789
,
32249
,
-
5800
,
32247
,
-
5811
,
32245
,
-
5822
,
32243
,
-
5833
,
32241
,
-
5844
,
32239
,
-
5855
,
32237
,
-
5866
,
32235
,
-
5877
,
32233
,
-
5888
,
32231
,
-
5899
,
32229
,
-
5910
,
32227
,
-
5921
,
32225
,
-
5932
,
32223
,
-
5943
,
32221
,
-
5954
,
32219
,
-
5965
,
32217
,
-
5976
,
32215
,
-
5987
,
32213
,
-
5998
,
32211
,
-
6009
,
32209
,
-
6020
,
32207
,
-
6031
,
32205
,
-
6042
,
32203
,
-
6053
,
32201
,
-
6064
,
32199
,
-
6075
,
32196
,
-
6086
,
32194
,
-
6097
,
32192
,
-
6108
,
32190
,
-
6119
,
32188
,
-
6130
,
32186
,
-
6141
,
32184
,
-
6152
,
32182
,
-
6163
,
32180
,
-
6174
,
32178
,
-
6185
,
32176
,
-
6196
,
32173
,
-
6207
,
32171
,
-
6218
,
32169
,
-
6229
,
32167
,
-
6240
,
32165
,
-
6251
,
32163
,
-
6262
,
32161
,
-
6272
,
32158
,
-
6283
,
32156
,
-
6294
,
32154
,
-
6305
,
32152
,
-
6316
,
32150
,
-
6327
,
32148
,
-
6338
,
32146
,
-
6349
,
32143
,
-
6360
,
32141
,
-
6371
,
32139
,
-
6382
,
32137
,
-
6393
,
32135
,
-
6404
,
32133
,
-
6415
,
32130
,
-
6426
,
32128
,
-
6437
,
32126
,
-
6448
,
32124
,
-
6459
,
32122
,
-
6470
,
32119
,
-
6481
,
32117
,
-
6492
,
32115
,
-
6503
,
32113
,
-
6513
,
32110
,
-
6524
,
32108
,
-
6535
,
32106
,
-
6546
,
32104
,
-
6557
,
32102
,
-
6568
,
32099
,
-
6579
,
32097
,
-
6590
,
32095
,
-
6601
,
32093
,
-
6612
,
32090
,
-
6623
,
32088
,
-
6634
,
32086
,
-
6645
,
32084
,
-
6656
,
32081
,
-
6667
,
32079
,
-
6678
,
32077
,
-
6689
,
32074
,
-
6699
,
32072
,
-
6710
,
32070
,
-
6721
,
32068
,
-
6732
,
32065
,
-
6743
,
32063
,
-
6754
,
32061
,
-
6765
,
32058
,
-
6776
,
32056
,
-
6787
,
32054
,
-
6798
,
32051
,
-
6809
,
32049
,
-
6820
,
32047
,
-
6831
,
32044
,
-
6842
,
32042
,
-
6852
,
32040
,
-
6863
,
32037
,
-
6874
,
32035
,
-
6885
,
32033
,
-
6896
,
32030
,
-
6907
,
32028
,
-
6918
,
32026
,
-
6929
,
32023
,
-
6940
,
32021
,
-
6951
,
32019
,
-
6962
,
32016
,
-
6973
,
32014
,
-
6983
,
32011
,
-
6994
,
32009
,
-
7005
,
32007
,
-
7016
,
32004
,
-
7027
,
32002
,
-
7038
,
31999
,
-
7049
,
31997
,
-
7060
,
31995
,
-
7071
,
31992
,
-
7082
,
31990
,
-
7093
,
31987
,
-
7103
,
31985
,
-
7114
,
31983
,
-
7125
,
31980
,
-
7136
,
31978
,
-
7147
,
31975
,
-
7158
,
31973
,
-
7169
,
31970
,
-
7180
,
31968
,
-
7191
,
31965
,
-
7202
,
31963
,
-
7212
,
31961
,
-
7223
,
31958
,
-
7234
,
31956
,
-
7245
,
31953
,
-
7256
,
31951
,
-
7267
,
31948
,
-
7278
,
31946
,
-
7289
,
31943
,
-
7300
,
31941
,
-
7311
,
31938
,
-
7321
,
31936
,
-
7332
,
31933
,
-
7343
,
31931
,
-
7354
,
31928
,
-
7365
,
31926
,
-
7376
,
31923
,
-
7387
,
31921
,
-
7398
,
31918
,
-
7408
,
31916
,
-
7419
,
31913
,
-
7430
,
31911
,
-
7441
,
31908
,
-
7452
,
31905
,
-
7463
,
31903
,
-
7474
,
31900
,
-
7485
,
31898
,
-
7495
,
31895
,
-
7506
,
31893
,
-
7517
,
31890
,
-
7528
,
31888
,
-
7539
,
31885
,
-
7550
,
31882
,
-
7561
,
31880
,
-
7572
,
31877
,
-
7582
,
31875
,
-
7593
,
31872
,
-
7604
,
31869
,
-
7615
,
31867
,
-
7626
,
31864
,
-
7637
,
31862
,
-
7648
,
31859
,
-
7658
,
31856
,
-
7669
,
31854
,
-
7680
,
31851
,
-
7691
,
31849
,
-
7702
,
31846
,
-
7713
,
31843
,
-
7724
,
31841
,
-
7734
,
31838
,
-
7745
,
31835
,
-
7756
,
31833
,
-
7767
,
31830
,
-
7778
,
31827
,
-
7789
,
31825
,
-
7800
,
31822
,
-
7810
,
31819
,
-
7821
,
31817
,
-
7832
,
31814
,
-
7843
,
31811
,
-
7854
,
31809
,
-
7865
,
31806
,
-
7876
,
31803
,
-
7886
,
31801
,
-
7897
,
31798
,
-
7908
,
31795
,
-
7919
,
31793
,
-
7930
,
31790
,
-
7941
,
31787
,
-
7951
,
31785
,
-
7962
,
31782
,
-
7973
,
31779
,
-
7984
,
31776
,
-
7995
,
31774
,
-
8006
,
31771
,
-
8016
,
31768
,
-
8027
,
31765
,
-
8038
,
31763
,
-
8049
,
31760
,
-
8060
,
31757
,
-
8071
,
31754
,
-
8081
,
31752
,
-
8092
,
31749
,
-
8103
,
31746
,
-
8114
,
31743
,
-
8125
,
31741
,
-
8135
,
31738
,
-
8146
,
31735
,
-
8157
,
31732
,
-
8168
,
31729
,
-
8179
,
31727
,
-
8190
,
31724
,
-
8200
,
31721
,
-
8211
,
31718
,
-
8222
,
31716
,
-
8233
,
31713
,
-
8244
,
31710
,
-
8254
,
31707
,
-
8265
,
31704
,
-
8276
,
31701
,
-
8287
,
31699
,
-
8298
,
31696
,
-
8308
,
31693
,
-
8319
,
31690
,
-
8330
,
31687
,
-
8341
,
31684
,
-
8352
,
31682
,
-
8362
,
31679
,
-
8373
,
31676
,
-
8384
,
31673
,
-
8395
,
31670
,
-
8406
,
31667
,
-
8416
,
31664
,
-
8427
,
31662
,
-
8438
,
31659
,
-
8449
,
31656
,
-
8460
,
31653
,
-
8470
,
31650
,
-
8481
,
31647
,
-
8492
,
31644
,
-
8503
,
31641
,
-
8514
,
31638
,
-
8524
,
31635
,
-
8535
,
31633
,
-
8546
,
31630
,
-
8557
,
31627
,
-
8568
,
31624
,
-
8578
,
31621
,
-
8589
,
31618
,
-
8600
,
31615
,
-
8611
,
31612
,
-
8621
,
31609
,
-
8632
,
31606
,
-
8643
,
31603
,
-
8654
,
31600
,
-
8664
,
31597
,
-
8675
,
31594
,
-
8686
,
31591
,
-
8697
,
31588
,
-
8708
,
31586
,
-
8718
,
31583
,
-
8729
,
31580
,
-
8740
,
31577
,
-
8751
,
31574
,
-
8761
,
31571
,
-
8772
,
31568
,
-
8783
,
31565
,
-
8794
,
31562
,
-
8804
,
31559
,
-
8815
,
31556
,
-
8826
,
31553
,
-
8837
,
31550
,
-
8847
,
31547
,
-
8858
,
31544
,
-
8869
,
31541
,
-
8880
,
31537
,
-
8890
,
31534
,
-
8901
,
31531
,
-
8912
,
31528
,
-
8923
,
31525
,
-
8933
,
31522
,
-
8944
,
31519
,
-
8955
,
31516
,
-
8966
,
31513
,
-
8976
,
31510
,
-
8987
,
31507
,
-
8998
,
31504
,
-
9009
,
31501
,
-
9019
,
31498
,
-
9030
,
31495
,
-
9041
,
31492
,
-
9052
,
31489
,
-
9062
,
31485
,
-
9073
,
31482
,
-
9084
,
31479
,
-
9095
,
31476
,
-
9105
,
31473
,
-
9116
,
31470
,
-
9127
,
31467
,
-
9137
,
31464
,
-
9148
,
31461
,
-
9159
,
31457
,
-
9170
,
31454
,
-
9180
,
31451
,
-
9191
,
31448
,
-
9202
,
31445
,
-
9213
,
31442
,
-
9223
,
31439
,
-
9234
,
31435
,
-
9245
,
31432
,
-
9255
,
31429
,
-
9266
,
31426
,
-
9277
,
31423
,
-
9288
,
31420
,
-
9298
,
31417
,
-
9309
,
31413
,
-
9320
,
31410
,
-
9330
,
31407
,
-
9341
,
31404
,
-
9352
,
31401
,
-
9363
,
31397
,
-
9373
,
31394
,
-
9384
,
31391
,
-
9395
,
31388
,
-
9405
,
31385
,
-
9416
,
31381
,
-
9427
,
31378
,
-
9437
,
31375
,
-
9448
,
31372
,
-
9459
,
31369
,
-
9469
,
31365
,
-
9480
,
31362
,
-
9491
,
31359
,
-
9502
,
31356
,
-
9512
,
31352
,
-
9523
,
31349
,
-
9534
,
31346
,
-
9544
,
31343
,
-
9555
,
31339
,
-
9566
,
31336
,
-
9576
,
31333
,
-
9587
,
31330
,
-
9598
,
31326
,
-
9608
,
31323
,
-
9619
,
31320
,
-
9630
,
31316
,
-
9640
,
31313
,
-
9651
,
31310
,
-
9662
,
31307
,
-
9672
,
31303
,
-
9683
,
31300
,
-
9694
,
31297
,
-
9704
,
31293
,
-
9715
,
31290
,
-
9726
,
31287
,
-
9736
,
31283
,
-
9747
,
31280
,
-
9758
,
31277
,
-
9768
,
31273
,
-
9779
,
31270
,
-
9790
,
31267
,
-
9800
,
31263
,
-
9811
,
31260
,
-
9822
,
31257
,
-
9832
,
31253
,
-
9843
,
31250
,
-
9854
,
31247
,
-
9864
,
31243
,
-
9875
,
31240
,
-
9886
,
31236
,
-
9896
,
31233
,
-
9907
,
31230
,
-
9918
,
31226
,
-
9928
,
31223
,
-
9939
,
31220
,
-
9950
,
31216
,
-
9960
,
31213
,
-
9971
,
31209
,
-
9981
,
31206
,
-
9992
,
31203
,
-
10003
,
31199
,
-
10013
,
31196
,
-
10024
,
31192
,
-
10035
,
31189
,
-
10045
,
31185
,
-
10056
,
31182
,
-
10067
,
31179
,
-
10077
,
31175
,
-
10088
,
31172
,
-
10098
,
31168
,
-
10109
,
31165
,
-
10120
,
31161
,
-
10130
,
31158
,
-
10141
,
31154
,
-
10152
,
31151
,
-
10162
,
31148
,
-
10173
,
31144
,
-
10183
,
31141
,
-
10194
,
31137
,
-
10205
,
31134
,
-
10215
,
31130
,
-
10226
,
31127
,
-
10236
,
31123
,
-
10247
,
31120
,
-
10258
,
31116
,
-
10268
,
31113
,
-
10279
,
31109
,
-
10290
,
31106
,
-
10300
,
31102
,
-
10311
,
31099
,
-
10321
,
31095
,
-
10332
,
31092
,
-
10343
,
31088
,
-
10353
,
31085
,
-
10364
,
31081
,
-
10374
,
31077
,
-
10385
,
31074
,
-
10396
,
31070
,
-
10406
,
31067
,
-
10417
,
31063
,
-
10427
,
31060
,
-
10438
,
31056
,
-
10448
,
31053
,
-
10459
,
31049
,
-
10470
,
31045
,
-
10480
,
31042
,
-
10491
,
31038
,
-
10501
,
31035
,
-
10512
,
31031
,
-
10523
,
31028
,
-
10533
,
31024
,
-
10544
,
31020
,
-
10554
,
31017
,
-
10565
,
31013
,
-
10575
,
31010
,
-
10586
,
31006
,
-
10597
,
31002
,
-
10607
,
30999
,
-
10618
,
30995
,
-
10628
,
30991
,
-
10639
,
30988
,
-
10649
,
30984
,
-
10660
,
30981
,
-
10671
,
30977
,
-
10681
,
30973
,
-
10692
,
30970
,
-
10702
,
30966
,
-
10713
,
30962
,
-
10723
,
30959
,
-
10734
,
30955
,
-
10744
,
30951
,
-
10755
,
30948
,
-
10766
,
30944
,
-
10776
,
30940
,
-
10787
,
30937
,
-
10797
,
30933
,
-
10808
,
30929
,
-
10818
,
30926
,
-
10829
,
30922
,
-
10839
,
30918
,
-
10850
,
30915
,
-
10860
,
30911
,
-
10871
,
30907
,
-
10881
,
30903
,
-
10892
,
30900
,
-
10903
,
30896
,
-
10913
,
30892
,
-
10924
,
30889
,
-
10934
,
30885
,
-
10945
,
30881
,
-
10955
,
30877
,
-
10966
,
30874
,
-
10976
,
30870
,
-
10987
,
30866
,
-
10997
,
30862
,
-
11008
,
30859
,
-
11018
,
30855
,
-
11029
,
30851
,
-
11039
,
30847
,
-
11050
,
30844
,
-
11060
,
30840
,
-
11071
,
30836
,
-
11081
,
30832
,
-
11092
,
30828
,
-
11102
,
30825
,
-
11113
,
30821
,
-
11123
,
30817
,
-
11134
,
30813
,
-
11144
,
30809
,
-
11155
,
30806
,
-
11165
,
30802
,
-
11176
,
30798
,
-
11186
,
30794
,
-
11197
,
30790
,
-
11207
,
30787
,
-
11218
,
30783
,
-
11228
,
30779
,
-
11239
,
30775
,
-
11249
,
30771
,
-
11260
,
30767
,
-
11270
,
30764
,
-
11281
,
30760
,
-
11291
,
30756
,
-
11302
,
30752
,
-
11312
,
30748
,
-
11323
,
30744
,
-
11333
,
30740
,
-
11344
,
30737
,
-
11354
,
30733
,
-
11365
,
30729
,
-
11375
,
30725
,
-
11386
,
30721
,
-
11396
,
30717
,
-
11407
,
30713
,
-
11417
,
30709
,
-
11428
,
30705
,
-
11438
,
30702
,
-
11449
,
30698
,
-
11459
,
30694
,
-
11469
,
30690
,
-
11480
,
30686
,
-
11490
,
30682
,
-
11501
,
30678
,
-
11511
,
30674
,
-
11522
,
30670
,
-
11532
,
30666
,
-
11543
,
30662
,
-
11553
,
30658
,
-
11564
,
30655
,
-
11574
,
30651
,
-
11584
,
30647
,
-
11595
,
30643
,
-
11605
,
30639
,
-
11616
,
30635
,
-
11626
,
30631
,
-
11637
,
30627
,
-
11647
,
30623
,
-
11658
,
30619
,
-
11668
,
30615
,
-
11678
,
30611
,
-
11689
,
30607
,
-
11699
,
30603
,
-
11710
,
30599
,
-
11720
,
30595
,
-
11731
,
30591
,
-
11741
,
30587
,
-
11751
,
30583
,
-
11762
,
30579
,
-
11772
,
30575
,
-
11783
,
30571
,
-
11793
,
30567
,
-
11804
,
30563
,
-
11814
,
30559
,
-
11824
,
30555
,
-
11835
,
30551
,
-
11845
,
30547
,
-
11856
,
30543
,
-
11866
,
30539
,
-
11877
,
30535
,
-
11887
,
30530
,
-
11897
,
30526
,
-
11908
,
30522
,
-
11918
,
30518
,
-
11929
,
30514
,
-
11939
,
30510
,
-
11949
,
30506
,
-
11960
,
30502
,
-
11970
,
30498
,
-
11981
,
30494
,
-
11991
,
30490
,
-
12001
,
30486
,
-
12012
,
30482
,
-
12022
,
30477
,
-
12033
,
30473
,
-
12043
,
30469
,
-
12053
,
30465
,
-
12064
,
30461
,
-
12074
,
30457
,
-
12084
,
30453
,
-
12095
,
30449
,
-
12105
,
30445
,
-
12116
,
30440
,
-
12126
,
30436
,
-
12136
,
30432
,
-
12147
,
30428
,
-
12157
,
30424
,
-
12167
,
30420
,
-
12178
,
30416
,
-
12188
,
30411
,
-
12199
,
30407
,
-
12209
,
30403
,
-
12219
,
30399
,
-
12230
,
30395
,
-
12240
,
30391
,
-
12250
,
30386
,
-
12261
,
30382
,
-
12271
,
30378
,
-
12281
,
30374
,
-
12292
,
30370
,
-
12302
,
30365
,
-
12313
,
30361
,
-
12323
,
30357
,
-
12333
,
30353
,
-
12344
,
30349
,
-
12354
,
30344
,
-
12364
,
30340
,
-
12375
,
30336
,
-
12385
,
30332
,
-
12395
,
30328
,
-
12406
,
30323
,
-
12416
,
30319
,
-
12426
,
30315
,
-
12437
,
30311
,
-
12447
,
30306
,
-
12457
,
30302
,
-
12468
,
30298
,
-
12478
,
30294
,
-
12488
,
30289
,
-
12499
,
30285
,
-
12509
,
30281
,
-
12519
,
30277
,
-
12530
,
30272
,
-
12540
,
30268
,
-
12550
,
30264
,
-
12561
,
30259
,
-
12571
,
30255
,
-
12581
,
30251
,
-
12591
,
30247
,
-
12602
,
30242
,
-
12612
,
30238
,
-
12622
,
30234
,
-
12633
,
30229
,
-
12643
,
30225
,
-
12653
,
30221
,
-
12664
,
30216
,
-
12674
,
30212
,
-
12684
,
30208
,
-
12695
,
30203
,
-
12705
,
30199
,
-
12715
,
30195
,
-
12725
,
30190
,
-
12736
,
30186
,
-
12746
,
30182
,
-
12756
,
30177
,
-
12767
,
30173
,
-
12777
,
30169
,
-
12787
,
30164
,
-
12797
,
30160
,
-
12808
,
30156
,
-
12818
,
30151
,
-
12828
,
30147
,
-
12839
,
30142
,
-
12849
,
30138
,
-
12859
,
30134
,
-
12869
,
30129
,
-
12880
,
30125
,
-
12890
,
30121
,
-
12900
,
30116
,
-
12910
,
30112
,
-
12921
,
30107
,
-
12931
,
30103
,
-
12941
,
30098
,
-
12951
,
30094
,
-
12962
,
30090
,
-
12972
,
30085
,
-
12982
,
30081
,
-
12993
,
30076
,
-
13003
,
30072
,
-
13013
,
30067
,
-
13023
,
30063
,
-
13034
,
30059
,
-
13044
,
30054
,
-
13054
,
30050
,
-
13064
,
30045
,
-
13075
,
30041
,
-
13085
,
30036
,
-
13095
,
30032
,
-
13105
,
30027
,
-
13115
,
30023
,
-
13126
,
30018
,
-
13136
,
30014
,
-
13146
,
30009
,
-
13156
,
30005
,
-
13167
,
30001
,
-
13177
,
29996
,
-
13187
,
29992
,
-
13197
,
29987
,
-
13208
,
29983
,
-
13218
,
29978
,
-
13228
,
29973
,
-
13238
,
29969
,
-
13248
,
29964
,
-
13259
,
29960
,
-
13269
,
29955
,
-
13279
,
29951
,
-
13289
,
29946
,
-
13299
,
29942
,
-
13310
,
29937
,
-
13320
,
29933
,
-
13330
,
29928
,
-
13340
,
29924
,
-
13350
,
29919
,
-
13361
,
29915
,
-
13371
,
29910
,
-
13381
,
29905
,
-
13391
,
29901
,
-
13401
,
29896
,
-
13412
,
29892
,
-
13422
,
29887
,
-
13432
,
29883
,
-
13442
,
29878
,
-
13452
,
29873
,
-
13463
,
29869
,
-
13473
,
29864
,
-
13483
,
29860
,
-
13493
,
29855
,
-
13503
,
29850
,
-
13513
,
29846
,
-
13524
,
29841
,
-
13534
,
29837
,
-
13544
,
29832
,
-
13554
,
29827
,
-
13564
,
29823
,
-
13575
,
29818
,
-
13585
,
29813
,
-
13595
,
29809
,
-
13605
,
29804
,
-
13615
,
29800
,
-
13625
,
29795
,
-
13635
,
29790
,
-
13646
,
29786
,
-
13656
,
29781
,
-
13666
,
29776
,
-
13676
,
29772
,
-
13686
,
29767
,
-
13696
,
29762
,
-
13707
,
29758
,
-
13717
,
29753
,
-
13727
,
29748
,
-
13737
,
29744
,
-
13747
,
29739
,
-
13757
,
29734
,
-
13767
,
29729
,
-
13778
,
29725
,
-
13788
,
29720
,
-
13798
,
29715
,
-
13808
,
29711
,
-
13818
,
29706
,
-
13828
,
29701
,
-
13838
,
29696
,
-
13848
,
29692
,
-
13859
,
29687
,
-
13869
,
29682
,
-
13879
,
29678
,
-
13889
,
29673
,
-
13899
,
29668
,
-
13909
,
29663
,
-
13919
,
29659
,
-
13929
,
29654
,
-
13939
,
29649
,
-
13950
,
29644
,
-
13960
,
29640
,
-
13970
,
29635
,
-
13980
,
29630
,
-
13990
,
29625
,
-
14000
,
29621
,
-
14010
,
29616
,
-
14020
,
29611
,
-
14030
,
29606
,
-
14040
,
29601
,
-
14051
,
29597
,
-
14061
,
29592
,
-
14071
,
29587
,
-
14081
,
29582
,
-
14091
,
29577
,
-
14101
,
29573
,
-
14111
,
29568
,
-
14121
,
29563
,
-
14131
,
29558
,
-
14141
,
29553
,
-
14151
,
29548
,
-
14161
,
29544
,
-
14172
,
29539
,
-
14182
,
29534
,
-
14192
,
29529
,
-
14202
,
29524
,
-
14212
,
29519
,
-
14222
,
29515
,
-
14232
,
29510
,
-
14242
,
29505
,
-
14252
,
29500
,
-
14262
,
29495
,
-
14272
,
29490
,
-
14282
,
29485
,
-
14292
,
29481
,
-
14302
,
29476
,
-
14312
,
29471
,
-
14322
,
29466
,
-
14332
,
29461
,
-
14343
,
29456
,
-
14353
,
29451
,
-
14363
,
29446
,
-
14373
,
29441
,
-
14383
,
29437
,
-
14393
,
29432
,
-
14403
,
29427
,
-
14413
,
29422
,
-
14423
,
29417
,
-
14433
,
29412
,
-
14443
,
29407
,
-
14453
,
29402
,
-
14463
,
29397
,
-
14473
,
29392
,
-
14483
,
29387
,
-
14493
,
29382
,
-
14503
,
29377
,
-
14513
,
29372
,
-
14523
,
29368
,
-
14533
,
29363
,
-
14543
,
29358
,
-
14553
,
29353
,
-
14563
,
29348
,
-
14573
,
29343
,
-
14583
,
29338
,
-
14593
,
29333
,
-
14603
,
29328
,
-
14613
,
29323
,
-
14623
,
29318
,
-
14633
,
29313
,
-
14643
,
29308
,
-
14653
,
29303
,
-
14663
,
29298
,
-
14673
,
29293
,
-
14683
,
29288
,
-
14693
,
29283
,
-
14703
,
29278
,
-
14713
,
29273
,
-
14723
,
29268
,
-
14733
,
29263
,
-
14743
,
29258
,
-
14753
,
29253
,
-
14763
,
29248
,
-
14773
,
29243
,
-
14783
,
29238
,
-
14793
,
29233
,
-
14803
,
29227
,
-
14813
,
29222
,
-
14823
,
29217
,
-
14833
,
29212
,
-
14843
,
29207
,
-
14853
,
29202
,
-
14862
,
29197
,
-
14872
,
29192
,
-
14882
,
29187
,
-
14892
,
29182
,
-
14902
,
29177
,
-
14912
,
29172
,
-
14922
,
29167
,
-
14932
,
29162
,
-
14942
,
29156
,
-
14952
,
29151
,
-
14962
,
29146
,
-
14972
,
29141
,
-
14982
,
29136
,
-
14992
,
29131
,
-
15002
,
29126
,
-
15012
,
29121
,
-
15022
,
29116
,
-
15031
,
29110
,
-
15041
,
29105
,
-
15051
,
29100
,
-
15061
,
29095
,
-
15071
,
29090
,
-
15081
,
29085
,
-
15091
,
29080
,
-
15101
,
29074
,
-
15111
,
29069
,
-
15121
,
29064
,
-
15131
,
29059
,
-
15141
,
29054
,
-
15150
,
29049
,
-
15160
,
29044
,
-
15170
,
29038
,
-
15180
,
29033
,
-
15190
,
29028
,
-
15200
,
29023
,
-
15210
,
29018
,
-
15220
,
29012
,
-
15230
,
29007
,
-
15239
,
29002
,
-
15249
,
28997
,
-
15259
,
28992
,
-
15269
,
28986
,
-
15279
,
28981
,
-
15289
,
28976
,
-
15299
,
28971
,
-
15309
,
28966
,
-
15319
,
28960
,
-
15328
,
28955
,
-
15338
,
28950
,
-
15348
,
28945
,
-
15358
,
28939
,
-
15368
,
28934
,
-
15378
,
28929
,
-
15388
,
28924
,
-
15397
,
28918
,
-
15407
,
28913
,
-
15417
,
28908
,
-
15427
,
28903
,
-
15437
,
28897
,
-
15447
,
28892
,
-
15457
,
28887
,
-
15466
,
28882
,
-
15476
,
28876
,
-
15486
,
28871
,
-
15496
,
28866
,
-
15506
,
28860
,
-
15516
,
28855
,
-
15526
,
28850
,
-
15535
,
28845
,
-
15545
,
28839
,
-
15555
,
28834
,
-
15565
,
28829
,
-
15575
,
28823
,
-
15584
,
28818
,
-
15594
,
28813
,
-
15604
,
28807
,
-
15614
,
28802
,
-
15624
,
28797
,
-
15634
,
28791
,
-
15643
,
28786
,
-
15653
,
28781
,
-
15663
,
28775
,
-
15673
,
28770
,
-
15683
,
28765
,
-
15692
,
28759
,
-
15702
,
28754
,
-
15712
,
28749
,
-
15722
,
28743
,
-
15732
,
28738
,
-
15741
,
28733
,
-
15751
,
28727
,
-
15761
,
28722
,
-
15771
,
28716
,
-
15781
,
28711
,
-
15790
,
28706
,
-
15800
,
28700
,
-
15810
,
28695
,
-
15820
,
28690
,
-
15830
,
28684
,
-
15839
,
28679
,
-
15849
,
28673
,
-
15859
,
28668
,
-
15869
,
28662
,
-
15878
,
28657
,
-
15888
,
28652
,
-
15898
,
28646
,
-
15908
,
28641
,
-
15918
,
28635
,
-
15927
,
28630
,
-
15937
,
28625
,
-
15947
,
28619
,
-
15957
,
28614
,
-
15966
,
28608
,
-
15976
,
28603
,
-
15986
,
28597
,
-
15996
,
28592
,
-
16005
,
28586
,
-
16015
,
28581
,
-
16025
,
28575
,
-
16035
,
28570
,
-
16044
,
28565
,
-
16054
,
28559
,
-
16064
,
28554
,
-
16073
,
28548
,
-
16083
,
28543
,
-
16093
,
28537
,
-
16103
,
28532
,
-
16112
,
28526
,
-
16122
,
28521
,
-
16132
,
28515
,
-
16142
,
28510
,
-
16151
,
28504
,
-
16161
,
28499
,
-
16171
,
28493
,
-
16180
,
28488
,
-
16190
,
28482
,
-
16200
,
28477<