Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Michael Black
OpenXG UE
Commits
060378fc
Commit
060378fc
authored
Oct 26, 2015
by
Florian Kaltenberger
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'hotfix-35-UE_re_extraction_sf056'
parents
ffcb9ebd
07ec6c79
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
270 additions
and
126 deletions
+270
-126
openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c
openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c
+265
-122
openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c
openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c
+5
-4
No files found.
openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c
View file @
060378fc
...
...
@@ -45,7 +45,6 @@
#include "PHY/sse_intrin.h"
#ifndef USER_MODE
#define NOCYGWIN_STATIC static
#else
...
...
@@ -53,7 +52,7 @@
#endif
//#define DEBUG_PHY 1
//#define DEBUG_DLSCH_MOD 1
//#define DEBUG_DLSCH_
DE
MOD 1
int
avg
[
4
];
...
...
@@ -3098,12 +3097,14 @@ void dlsch_alamouti(LTE_DL_FRAME_PARMS *frame_parms,
// Alamouti RX combining
// printf("Alamouti: symbol %d, rb %d, re %d: rxF0 (%d,%d,%d,%d), rxF1 (%d,%d,%d,%d)\n",symbol,rb,re,rxF0[0],rxF0[1],rxF0[2],rxF0[3],rxF1[0],rxF1[1],rxF1[2],rxF1[3]);
rxF0
[
0
]
=
rxF0
[
0
]
+
rxF1
[
2
];
rxF0
[
1
]
=
rxF0
[
1
]
-
rxF1
[
3
];
rxF0
[
2
]
=
rxF0
[
2
]
-
rxF1
[
0
];
rxF0
[
3
]
=
rxF0
[
3
]
+
rxF1
[
1
];
// printf("Alamouti: rxF0 after (%d,%d,%d,%d)\n",rxF0[0],rxF0[1],rxF0[2],rxF0[3]);
rxF0
+=
4
;
rxF1
+=
4
;
...
...
@@ -3229,12 +3230,40 @@ unsigned short dlsch_extract_rbs_single(int **rxdataF,
else
rb_alloc_ind
=
0
;
if
(
rb_alloc_ind
==
1
)
nb_rb
++
;
// For second half of RBs skip DC carrier
if
(
rb
==
(
frame_parms
->
N_RB_DL
>>
1
))
{
rxF
=
&
rxdataF
[
aarx
][(
1
+
(
symbol
*
(
frame_parms
->
ofdm_symbol_size
)))];
//dl_ch0++;
}
// PBCH
if
((
subframe
==
0
)
&&
(
rb
>=
((
frame_parms
->
N_RB_DL
>>
1
)
-
3
))
&&
(
rb
<
((
frame_parms
->
N_RB_DL
>>
1
)
+
3
))
&&
(
l
>=
nsymb
>>
1
)
&&
(
l
<
((
nsymb
>>
1
)
+
4
)))
{
rb_alloc_ind
=
0
;
}
//SSS
if
(((
subframe
==
0
)
||
(
subframe
==
5
))
&&
(
rb
>=
((
frame_parms
->
N_RB_DL
>>
1
)
-
3
))
&&
(
rb
<
((
frame_parms
->
N_RB_DL
>>
1
)
+
3
))
&&
(
l
==
sss_symb
)
)
{
rb_alloc_ind
=
0
;
}
if
(
frame_parms
->
frame_type
==
FDD
)
{
//PSS
if
(((
subframe
==
0
)
||
(
subframe
==
5
))
&&
(
rb
>=
((
frame_parms
->
N_RB_DL
>>
1
)
-
3
))
&&
(
rb
<
((
frame_parms
->
N_RB_DL
>>
1
)
+
3
))
&&
(
l
==
pss_symb
)
)
{
rb_alloc_ind
=
0
;
}
}
if
((
frame_parms
->
frame_type
==
TDD
)
&&
(
subframe
==
6
))
{
//TDD Subframe 6
if
((
rb
>=
((
frame_parms
->
N_RB_DL
>>
1
)
-
3
))
&&
(
rb
<
((
frame_parms
->
N_RB_DL
>>
1
)
+
3
))
&&
(
l
==
pss_symb
)
)
{
rb_alloc_ind
=
0
;
}
}
if
(
rb_alloc_ind
==
1
)
{
*
pmi_ext
=
(
pmi
>>
((
rb
>>
2
)
<<
1
))
&
3
;
memcpy
(
dl_ch0_ext
,
dl_ch0
,
12
*
sizeof
(
int
));
...
...
@@ -3272,7 +3301,7 @@ unsigned short dlsch_extract_rbs_single(int **rxdataF,
rxF_ext
+=
10
;
}
nb_rb
++
;
}
dl_ch0
+=
12
;
...
...
@@ -3281,7 +3310,9 @@ unsigned short dlsch_extract_rbs_single(int **rxdataF,
}
else
{
// Odd number of RBs
for
(
rb
=
0
;
rb
<
frame_parms
->
N_RB_DL
>>
1
;
rb
++
)
{
// printf("dlch_ext %d\n",dl_ch0_ext-&dl_ch_estimates_ext[aarx][0]);
#ifdef DEBUG_DLSCH_DEMOD
printf
(
"dlch_ext %d
\n
"
,
dl_ch0_ext
-&
dl_ch_estimates_ext
[
aarx
][
0
]);
#endif
skip_half
=
0
;
if
(
rb
<
32
)
...
...
@@ -3295,6 +3326,8 @@ unsigned short dlsch_extract_rbs_single(int **rxdataF,
else
rb_alloc_ind
=
0
;
if
(
rb_alloc_ind
==
1
)
nb_rb
++
;
// PBCH
if
((
subframe
==
0
)
&&
(
rb
>
((
frame_parms
->
N_RB_DL
>>
1
)
-
3
))
&&
(
rb
<
((
frame_parms
->
N_RB_DL
>>
1
)
+
3
))
&&
(
l
>=
(
nsymb
>>
1
))
&&
(
l
<
((
nsymb
>>
1
)
+
4
)))
{
...
...
@@ -3328,7 +3361,10 @@ unsigned short dlsch_extract_rbs_single(int **rxdataF,
//PSS in subframe 0/5 if FDD
if
(
frame_parms
->
frame_type
==
FDD
)
{
//FDD
if
(((
subframe
==
0
)
||
(
subframe
==
5
))
&&
(
rb
>
((
frame_parms
->
N_RB_DL
>>
1
)
-
3
))
&&
(
rb
<
((
frame_parms
->
N_RB_DL
>>
1
)
+
3
))
&&
(
l
==
pss_symb
)
)
{
if
(((
subframe
==
0
)
||
(
subframe
==
5
))
&&
(
rb
>
((
frame_parms
->
N_RB_DL
>>
1
)
-
3
))
&&
(
rb
<
((
frame_parms
->
N_RB_DL
>>
1
)
+
3
))
&&
(
l
==
pss_symb
)
)
{
rb_alloc_ind
=
0
;
}
...
...
@@ -3352,32 +3388,42 @@ unsigned short dlsch_extract_rbs_single(int **rxdataF,
if
(
rb_alloc_ind
==
1
)
{
// printf("rb %d/symbol %d (skip_half %d)\n",rb,l,skip_half);
#ifdef DEBUG_DLSCH_DEMOD
printf
(
"rb %d/symbol %d (skip_half %d)
\n
"
,
rb
,
l
,
skip_half
);
#endif
if
(
pilots
==
0
)
{
// printf("Extracting w/o pilots (symbol %d, rb %d, skip_half %d)\n",l,rb,skip_half);
if
(
skip_half
==
1
)
{
memcpy
(
dl_ch0_ext
,
dl_ch0
,
6
*
sizeof
(
int
));
for
(
i
=
0
;
i
<
6
;
i
++
)
for
(
i
=
0
;
i
<
6
;
i
++
)
{
rxF_ext
[
i
]
=
rxF
[
i
];
#ifdef DEBUG_DLSCH_DEMOD
printf
(
"extract rb %d, re %d => (%d,%d)
\n
"
,
rb
,
i
,
*
(
short
*
)
&
rxF_ext
[
i
],
*
(
1
+
(
short
*
)
&
rxF_ext
[
i
]));
#endif
}
dl_ch0_ext
+=
6
;
rxF_ext
+=
6
;
}
else
if
(
skip_half
==
2
)
{
memcpy
(
dl_ch0_ext
,
dl_ch0
+
6
,
6
*
sizeof
(
int
));
for
(
i
=
0
;
i
<
6
;
i
++
)
for
(
i
=
0
;
i
<
6
;
i
++
)
{
rxF_ext
[
i
]
=
rxF
[(
i
+
6
)];
#ifdef DEBUG_DLSCH_DEMOD
printf
(
"extract rb %d, re %d => (%d,%d)
\n
"
,
rb
,
i
,
*
(
short
*
)
&
rxF_ext
[
i
],
*
(
1
+
(
short
*
)
&
rxF_ext
[
i
]));
#endif
}
dl_ch0_ext
+=
6
;
rxF_ext
+=
6
;
}
else
{
memcpy
(
dl_ch0_ext
,
dl_ch0
,
12
*
sizeof
(
int
));
for
(
i
=
0
;
i
<
12
;
i
++
)
for
(
i
=
0
;
i
<
12
;
i
++
)
{
rxF_ext
[
i
]
=
rxF
[
i
];
#ifdef DEBUG_DLSCH_DEMOD
printf
(
"extract rb %d, re %d => (%d,%d)
\n
"
,
rb
,
i
,
*
(
short
*
)
&
rxF_ext
[
i
],
*
(
1
+
(
short
*
)
&
rxF_ext
[
i
]));
#endif
}
dl_ch0_ext
+=
12
;
rxF_ext
+=
12
;
}
...
...
@@ -3389,18 +3435,21 @@ unsigned short dlsch_extract_rbs_single(int **rxdataF,
for
(
i
=
0
;
i
<
6
;
i
++
)
{
if
(
i
!=
((
frame_parms
->
nushift
+
poffset
)
%
6
))
{
rxF_ext
[
j
]
=
rxF
[
i
];
// printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j]));
#ifdef DEBUG_DLSCH_DEMOD
printf
(
"extract rb %d, re %d => (%d,%d)
\n
"
,
rb
,
i
,
*
(
short
*
)
&
rxF_ext
[
j
],
*
(
1
+
(
short
*
)
&
rxF_ext
[
j
]));
#endif
dl_ch0_ext
[
j
++
]
=
dl_ch0
[
i
];
}
}
dl_ch0_ext
+=
5
;
rxF_ext
+=
5
;
dl_ch0_ext
+=
5
;
}
else
if
(
skip_half
==
2
)
{
for
(
i
=
0
;
i
<
6
;
i
++
)
{
if
(
i
!=
((
frame_parms
->
nushift
+
poffset
)
%
6
))
{
rxF_ext
[
j
]
=
rxF
[(
i
+
6
)];
// printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j]));
#ifdef DEBUG_DLSCH_DEMOD
printf
(
"extract rb %d, re %d => (%d,%d)
\n
"
,
rb
,
i
,
*
(
short
*
)
&
rxF_ext
[
j
],
*
(
1
+
(
short
*
)
&
rxF_ext
[
j
]));
#endif
dl_ch0_ext
[
j
++
]
=
dl_ch0
[
i
+
6
];
}
}
...
...
@@ -3412,7 +3461,9 @@ unsigned short dlsch_extract_rbs_single(int **rxdataF,
if
((
i
!=
(
frame_parms
->
nushift
+
poffset
))
&&
(
i
!=
((
frame_parms
->
nushift
+
poffset
+
6
)
%
12
)))
{
rxF_ext
[
j
]
=
rxF
[
i
];
// printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j]));
#ifdef DEBUG_DLSCH_DEMOD
printf
(
"extract rb %d, re %d => (%d,%d)
\n
"
,
rb
,
i
,
*
(
short
*
)
&
rxF_ext
[
j
],
*
(
1
+
(
short
*
)
&
rxF_ext
[
j
]));
#endif
dl_ch0_ext
[
j
++
]
=
dl_ch0
[
i
];
}
...
...
@@ -3422,8 +3473,6 @@ unsigned short dlsch_extract_rbs_single(int **rxdataF,
rxF_ext
+=
10
;
}
}
nb_rb
++
;
}
dl_ch0
+=
12
;
...
...
@@ -3444,36 +3493,42 @@ unsigned short dlsch_extract_rbs_single(int **rxdataF,
rb_alloc_ind
=
0
;
if
(
rb_alloc_ind
==
1
)
nb_rb
++
;
// PBCH
if
((
subframe
==
0
)
&&
(
rb
>=
((
frame_parms
->
N_RB_DL
>>
1
)
-
3
))
&&
(
rb
<
((
frame_parms
->
N_RB_DL
>>
1
)
+
3
))
&&
(
l
>=
(
nsymb
>>
1
))
&&
(
l
<
((
nsymb
>>
1
)
+
4
)))
{
if
((
subframe
==
0
)
&&
(
l
>=
(
nsymb
>>
1
))
&&
(
l
<
((
nsymb
>>
1
)
+
4
)))
{
rb_alloc_ind
=
0
;
}
//SSS
if
(((
subframe
==
0
)
||
(
subframe
==
5
))
&&
(
rb
>=
((
frame_parms
->
N_RB_DL
>>
1
)
-
3
))
&&
(
rb
<
((
frame_parms
->
N_RB_DL
>>
1
)
+
3
))
&&
(
l
==
sss_symb
)
)
{
if
(((
subframe
==
0
)
||
(
subframe
==
5
))
&&
(
l
==
sss_symb
)
)
{
rb_alloc_ind
=
0
;
}
if
(
frame_parms
->
frame_type
==
FDD
)
{
//PSS
if
(((
subframe
==
0
)
||
(
subframe
==
5
))
&&
(
rb
>=
((
frame_parms
->
N_RB_DL
>>
1
)
-
3
))
&&
(
rb
<
((
frame_parms
->
N_RB_DL
>>
1
)
+
3
))
&&
(
l
==
pss_symb
)
)
{
if
(((
subframe
==
0
)
||
(
subframe
==
5
))
&&
(
l
==
pss_symb
)
)
{
rb_alloc_ind
=
0
;
}
}
if
((
frame_parms
->
frame_type
==
TDD
)
&&
(
subframe
==
6
))
{
//PSS
if
((
rb
>
((
frame_parms
->
N_RB_DL
>>
1
)
-
3
))
&&
(
rb
<
((
frame_parms
->
N_RB_DL
>>
1
)
+
3
))
&&
(
l
==
pss_symb
)
)
{
if
((
frame_parms
->
frame_type
==
TDD
)
&&
(
subframe
==
6
)
&&
(
l
==
pss_symb
)
)
{
rb_alloc_ind
=
0
;
}
}
// printf("dlch_ext %d\n",dl_ch0_ext-&dl_ch_estimates_ext[aarx][0]);
// printf("DC rb %d (%p)\n",rb,rxF);
if
(
rb_alloc_ind
==
1
)
{
// printf("rb %d/symbol %d (skip_half %d)\n",rb,l,skip_half);
#ifdef DEBUG_DLSCH_DEMOD
printf
(
"rb %d/symbol %d (skip_half %d)
\n
"
,
rb
,
l
,
skip_half
);
#endif
if
(
pilots
==
0
)
{
for
(
i
=
0
;
i
<
6
;
i
++
)
{
dl_ch0_ext
[
i
]
=
dl_ch0
[
i
];
...
...
@@ -3496,7 +3551,9 @@ unsigned short dlsch_extract_rbs_single(int **rxdataF,
if
(
i
!=
((
frame_parms
->
nushift
+
poffset
)
%
6
))
{
dl_ch0_ext
[
j
]
=
dl_ch0
[
i
];
rxF_ext
[
j
++
]
=
rxF
[
i
];
// printf("**extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j-1],*(1+(short*)&rxF_ext[j-1]));
#ifdef DEBUG_DLSCH_DEMOD
printf
(
"**extract rb %d, re %d => (%d,%d)
\n
"
,
rb
,
i
,
*
(
short
*
)
&
rxF_ext
[
j
-
1
],
*
(
1
+
(
short
*
)
&
rxF_ext
[
j
-
1
]));
#endif
}
}
...
...
@@ -3506,7 +3563,9 @@ unsigned short dlsch_extract_rbs_single(int **rxdataF,
if
(
i
!=
((
frame_parms
->
nushift
+
6
+
poffset
)
%
12
))
{
dl_ch0_ext
[
j
]
=
dl_ch0
[
i
];
rxF_ext
[
j
++
]
=
rxF
[(
1
+
i
-
6
)];
// printf("**extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j-1],*(1+(short*)&rxF_ext[j-1]));
#ifdef DEBUG_DLSCH_DEMOD
printf
(
"**extract rb %d, re %d => (%d,%d)
\n
"
,
rb
,
i
,
*
(
short
*
)
&
rxF_ext
[
j
-
1
],
*
(
1
+
(
short
*
)
&
rxF_ext
[
j
-
1
]));
#endif
}
}
...
...
@@ -3514,7 +3573,6 @@ unsigned short dlsch_extract_rbs_single(int **rxdataF,
rxF_ext
+=
10
;
}
// symbol_mod==0
nb_rb
++
;
}
// rballoc==1
else
{
rxF
=
&
rxdataF
[
aarx
][((
symbol
*
(
frame_parms
->
ofdm_symbol_size
)))];
...
...
@@ -3540,7 +3598,8 @@ unsigned short dlsch_extract_rbs_single(int **rxdataF,
else
rb_alloc_ind
=
0
;
if
(
rb_alloc_ind
==
1
)
nb_rb
++
;
// PBCH
if
((
subframe
==
0
)
&&
(
rb
>
((
frame_parms
->
N_RB_DL
>>
1
)
-
3
))
&&
(
rb
<
((
frame_parms
->
N_RB_DL
>>
1
)
+
3
))
&&
(
l
>=
nsymb
>>
1
)
&&
(
l
<
((
nsymb
>>
1
)
+
4
)))
{
...
...
@@ -3590,7 +3649,9 @@ unsigned short dlsch_extract_rbs_single(int **rxdataF,
}
if
(
rb_alloc_ind
==
1
)
{
// printf("rb %d/symbol %d (skip_half %d)\n",rb,l,skip_half);
#ifdef DEBUG_DLSCH_DEMOD
printf
(
"rb %d/symbol %d (skip_half %d)
\n
"
,
rb
,
l
,
skip_half
);
#endif
/*
printf("rb %d\n",rb);
for (i=0;i<12;i++)
...
...
@@ -3602,27 +3663,36 @@ unsigned short dlsch_extract_rbs_single(int **rxdataF,
if
(
skip_half
==
1
)
{
memcpy
(
dl_ch0_ext
,
dl_ch0
,
6
*
sizeof
(
int
));
for
(
i
=
0
;
i
<
6
;
i
++
)
for
(
i
=
0
;
i
<
6
;
i
++
)
{
rxF_ext
[
i
]
=
rxF
[
i
];
#ifdef DEBUG_DLSCH_DEMOD
printf
(
"extract rb %d, re %d => (%d,%d)
\n
"
,
rb
,
i
,
*
(
short
*
)
&
rxF_ext
[
i
],
*
(
1
+
(
short
*
)
&
rxF_ext
[
i
]));
#endif
}
dl_ch0_ext
+=
6
;
rxF_ext
+=
6
;
}
else
if
(
skip_half
==
2
)
{
memcpy
(
dl_ch0_ext
,
dl_ch0
+
6
,
6
*
sizeof
(
int
));
for
(
i
=
0
;
i
<
6
;
i
++
)
for
(
i
=
0
;
i
<
6
;
i
++
)
{
rxF_ext
[
i
]
=
rxF
[(
i
+
6
)];
#ifdef DEBUG_DLSCH_DEMOD
printf
(
"extract rb %d, re %d => (%d,%d)
\n
"
,
rb
,
i
,
*
(
short
*
)
&
rxF_ext
[
i
],
*
(
1
+
(
short
*
)
&
rxF_ext
[
i
]));
#endif
}
dl_ch0_ext
+=
6
;
rxF_ext
+=
6
;
}
else
{
memcpy
(
dl_ch0_ext
,
dl_ch0
,
12
*
sizeof
(
int
));
for
(
i
=
0
;
i
<
12
;
i
++
)
for
(
i
=
0
;
i
<
12
;
i
++
)
{
rxF_ext
[
i
]
=
rxF
[
i
];
#ifdef DEBUG_DLSCH_DEMOD
printf
(
"extract rb %d, re %d => (%d,%d)
\n
"
,
rb
,
i
,
*
(
short
*
)
&
rxF_ext
[
i
],
*
(
1
+
(
short
*
)
&
rxF_ext
[
i
]));
#endif
}
dl_ch0_ext
+=
12
;
rxF_ext
+=
12
;
}
...
...
@@ -3634,7 +3704,9 @@ unsigned short dlsch_extract_rbs_single(int **rxdataF,
for
(
i
=
0
;
i
<
6
;
i
++
)
{
if
(
i
!=
((
frame_parms
->
nushift
+
poffset
)
%
6
))
{
rxF_ext
[
j
]
=
rxF
[
i
];
// printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j]));
#ifdef DEBUG_DLSCH_DEMOD
printf
(
"extract rb %d, re %d => (%d,%d)
\n
"
,
rb
,
i
,
*
(
short
*
)
&
rxF_ext
[
j
],
*
(
1
+
(
short
*
)
&
rxF_ext
[
j
]));
#endif
dl_ch0_ext
[
j
++
]
=
dl_ch0
[
i
];
}
}
...
...
@@ -3645,7 +3717,9 @@ unsigned short dlsch_extract_rbs_single(int **rxdataF,
for
(
i
=
0
;
i
<
6
;
i
++
)
{
if
(
i
!=
((
frame_parms
->
nushift
+
poffset
)
%
6
))
{
rxF_ext
[
j
]
=
rxF
[(
i
+
6
)];
// printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j]));
#ifdef DEBUG_DLSCH_DEMOD
printf
(
"extract rb %d, re %d => (%d,%d)
\n
"
,
rb
,
i
,
*
(
short
*
)
&
rxF_ext
[
j
],
*
(
1
+
(
short
*
)
&
rxF_ext
[
j
]));
#endif
dl_ch0_ext
[
j
++
]
=
dl_ch0
[
i
+
6
];
}
}
...
...
@@ -3657,7 +3731,9 @@ unsigned short dlsch_extract_rbs_single(int **rxdataF,
if
((
i
!=
(
frame_parms
->
nushift
+
poffset
))
&&
(
i
!=
((
frame_parms
->
nushift
+
poffset
+
6
)
%
12
)))
{
rxF_ext
[
j
]
=
rxF
[
i
];
// printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j]));
#ifdef DEBUG_DLSCH_DEMOD
printf
(
"extract rb %d, re %d => (%d,%d)
\n
"
,
rb
,
i
,
*
(
short
*
)
&
rxF_ext
[
j
],
*
(
1
+
(
short
*
)
&
rxF_ext
[
j
]));
#endif
dl_ch0_ext
[
j
++
]
=
dl_ch0
[
i
];
}
}
...
...
@@ -3666,8 +3742,6 @@ unsigned short dlsch_extract_rbs_single(int **rxdataF,
rxF_ext
+=
10
;
}
}
// pilots=0
nb_rb
++
;
}
dl_ch0
+=
12
;
...
...
@@ -3750,9 +3824,15 @@ unsigned short dlsch_extract_rbs_dual(int **rxdataF,
else
rb_alloc_ind
=
0
;
if
(
rb_alloc_ind
==
1
)
nb_rb
++
;
if
((
frame_parms
->
N_RB_DL
&
1
)
==
0
)
{
// even number of RBs
// PBCH
if
((
subframe
==
0
)
&&
(
prb
>
((
frame_parms
->
N_RB_DL
>>
1
)
-
3
))
&&
(
prb
>=
((
frame_parms
->
N_RB_DL
>>
1
)
-
3
))
&&
(
prb
<
((
frame_parms
->
N_RB_DL
>>
1
)
+
3
))
&&
(
l
>=
(
nsymb
>>
1
))
&&
(
l
<
((
nsymb
>>
1
)
+
4
)))
{
...
...
@@ -3763,7 +3843,7 @@ unsigned short dlsch_extract_rbs_dual(int **rxdataF,
//SSS
if
(((
subframe
==
0
)
||
(
subframe
==
5
))
&&
(
prb
>
((
frame_parms
->
N_RB_DL
>>
1
)
-
3
))
&&
(
prb
>=
((
frame_parms
->
N_RB_DL
>>
1
)
-
3
))
&&
(
prb
<
((
frame_parms
->
N_RB_DL
>>
1
)
+
3
))
&&
(
l
==
sss_symb
)
)
{
rb_alloc_ind
=
0
;
...
...
@@ -3775,7 +3855,7 @@ unsigned short dlsch_extract_rbs_dual(int **rxdataF,
//PSS in subframe 0/5 if FDD
if
(
frame_parms
->
frame_type
==
FDD
)
{
//FDD
if
(((
subframe
==
0
)
||
(
subframe
==
5
))
&&
(
prb
>
((
frame_parms
->
N_RB_DL
>>
1
)
-
3
))
&&
(
prb
>=
((
frame_parms
->
N_RB_DL
>>
1
)
-
3
))
&&
(
prb
<
((
frame_parms
->
N_RB_DL
>>
1
)
+
3
))
&&
(
l
==
pss_symb
)
)
{
rb_alloc_ind
=
0
;
...
...
@@ -3786,7 +3866,7 @@ unsigned short dlsch_extract_rbs_dual(int **rxdataF,
if
((
frame_parms
->
frame_type
==
TDD
)
&&
(
subframe
==
6
))
{
//TDD Subframe 6
if
((
prb
>=
((
frame_parms
->
N_RB_DL
>>
1
)
-
3
))
&&
(
prb
<=
((
frame_parms
->
N_RB_DL
>>
1
)
+
3
))
&&
(
prb
<
((
frame_parms
->
N_RB_DL
>>
1
)
+
3
))
&&
(
l
==
pss_symb
)
)
{
rb_alloc_ind
=
0
;
}
...
...
@@ -3794,7 +3874,7 @@ unsigned short dlsch_extract_rbs_dual(int **rxdataF,
if
(
rb_alloc_ind
==
1
)
{
// PRB is allocated
if
((
frame_parms
->
N_RB_DL
&
1
)
==
0
)
{
// even number of RBs
prb_off
=
12
*
prb
;
prb_off2
=
1
+
(
12
*
(
prb
-
(
frame_parms
->
N_RB_DL
>>
1
)));
...
...
@@ -3839,10 +3919,53 @@ unsigned short dlsch_extract_rbs_dual(int **rxdataF,
rxF_ext
+=
8
;
}
// pilots==1
nb_rb
++
;
}
}
else
{
// Odd number of RBs
// PBCH
if
((
subframe
==
0
)
&&
(
prb
>
((
frame_parms
->
N_RB_DL
>>
1
)
-
3
))
&&
(
prb
<
((
frame_parms
->
N_RB_DL
>>
1
)
+
3
))
&&
(
l
>=
(
nsymb
>>
1
))
&&
(
l
<
((
nsymb
>>
1
)
+
4
)))
{
rb_alloc_ind
=
0
;
// printf("symbol %d / rb %d: skipping PBCH REs\n",symbol,prb);
}
//SSS
if
(((
subframe
==
0
)
||
(
subframe
==
5
))
&&
(
prb
>
((
frame_parms
->
N_RB_DL
>>
1
)
-
3
))
&&
(
prb
<
((
frame_parms
->
N_RB_DL
>>
1
)
+
3
))
&&
(
l
==
sss_symb
)
)
{
rb_alloc_ind
=
0
;
// printf("symbol %d / rb %d: skipping SSS REs\n",symbol,prb);
}
//PSS in subframe 0/5 if FDD
if
(
frame_parms
->
frame_type
==
FDD
)
{
//FDD
if
(((
subframe
==
0
)
||
(
subframe
==
5
))
&&
(
prb
>
((
frame_parms
->
N_RB_DL
>>
1
)
-
3
))
&&
(
prb
<
((
frame_parms
->
N_RB_DL
>>
1
)
+
3
))
&&
(
l
==
pss_symb
)
)
{
rb_alloc_ind
=
0
;
// printf("symbol %d / rb %d: skipping PSS REs\n",symbol,prb);
}
}
if
((
frame_parms
->
frame_type
==
TDD
)
&&
((
subframe
==
1
)
||
(
subframe
==
6
)))
{
//TDD Subframe 1-6
if
((
prb
>
((
frame_parms
->
N_RB_DL
>>
1
)
-
3
))
&&
(
prb
<
((
frame_parms
->
N_RB_DL
>>
1
)
+
3
))
&&
(
l
==
pss_symb
)
)
{
rb_alloc_ind
=
0
;
}
}
if
(
rb_alloc_ind
==
1
)
{
skip_half
=
0
;
//Check if we have to drop half a PRB due to PSS/SSS/PBCH
...
...
@@ -3875,13 +3998,12 @@ unsigned short dlsch_extract_rbs_dual(int **rxdataF,
if
(((
frame_parms
->
frame_type
==
FDD
)
&&
(((
subframe
==
0
)
||
(
subframe
==
5
))))
||
//FDD Subframes 0,5
((
frame_parms
->
frame_type
==
TDD
)
&&
(((
subframe
==
2
)
||
(
subframe
==
6
)))))
{
//TDD Subframes 2
,6
(((
subframe
==
1
)
||
(
subframe
==
6
)))))
{
//TDD Subframes 1
,6
if
((
prb
==
((
frame_parms
->
N_RB_DL
>>
1
)
-
3
))
&&
(
l
==
pss_symb
))
skip_half
=
1
;
else
if
(((
subframe
==
0
)
||
(
subframe
==
5
))
&&
(
prb
==
((
frame_parms
->
N_RB_DL
>>
1
)
+
3
))
&&
else
if
((
prb
==
((
frame_parms
->
N_RB_DL
>>
1
)
+
3
))
&&
(
l
==
pss_symb
))
skip_half
=
2
;
}
...
...
@@ -3901,9 +4023,9 @@ unsigned short dlsch_extract_rbs_dual(int **rxdataF,
rxF
=
&
rxdataF
[
aarx
][
prb_off2
+
(
symbol
*
(
frame_parms
->
ofdm_symbol_size
))];
}
//
printf("symbol %d / rb %d: alloc %d skip_half %d (rxF %p, rxF_ext %p) prb_off (%d,%d)\n",symbol,prb,rb_alloc_ind,skip_half,rxF,rxF_ext,prb_off,prb_off2);
#ifdef DEBUG_DLSCH_DEMOD
printf
(
"symbol %d / rb %d: alloc %d skip_half %d (rxF %p, rxF_ext %p) prb_off (%d,%d)
\n
"
,
symbol
,
prb
,
rb_alloc_ind
,
skip_half
,
rxF
,
rxF_ext
,
prb_off
,
prb_off2
);
#endif
*
pmi_loc
=
(
pmi
>>
((
prb
>>
2
)
<<
1
))
&
3
;
// printf("symbol_mod %d (pilots %d) rb %d, sb %d, pmi %d (pmi_loc %p,rxF %p, ch00 %p, ch01 %p, rxF_ext %p dl_ch0_ext %p dl_ch1_ext %p)\n",symbol_mod,pilots,rb,rb>>2,*pmi_loc,pmi_loc,rxF,dl_ch0, dl_ch1, rxF_ext,dl_ch0_ext,dl_ch1_ext);
...
...
@@ -3915,6 +4037,10 @@ unsigned short dlsch_extract_rbs_dual(int **rxdataF,
memcpy
(
dl_ch0_ext
,
dl_ch0p
,
6
*
sizeof
(
int32_t
));
memcpy
(
dl_ch1_ext
,
dl_ch1p
,
6
*
sizeof
(
int32_t
));
memcpy
(
rxF_ext
,
rxF
,
6
*
sizeof
(
int32_t
));
#ifdef DEBUG_DLSCH_DEMOD
for
(
i
=
0
;
i
<
6
;
i
++
)
printf
(
"extract rb %d, re %d => (%d,%d)
\n
"
,
prb
,
i
,
*
(
short
*
)
&
rxF_ext
[
i
],
*
(
1
+
(
short
*
)
&
rxF_ext
[
i
]));
#endif
dl_ch0_ext
+=
6
;
dl_ch1_ext
+=
6
;
rxF_ext
+=
6
;
...
...
@@ -3922,6 +4048,10 @@ unsigned short dlsch_extract_rbs_dual(int **rxdataF,
memcpy
(
dl_ch0_ext
,
dl_ch0p
+
6
,
6
*
sizeof
(
int32_t
));
memcpy
(
dl_ch1_ext
,
dl_ch1p
+
6
,
6
*
sizeof
(
int32_t
));
memcpy
(
rxF_ext
,
rxF
+
6
,
6
*
sizeof
(
int32_t
));
#ifdef DEBUG_DLSCH_DEMOD
for
(
i
=
0
;
i
<
6
;
i
++
)
printf
(
"extract rb %d, re %d => (%d,%d)
\n
"
,
prb
,
i
,
*
(
short
*
)
&
rxF_ext
[
i
],
*
(
1
+
(
short
*
)
&
rxF_ext
[
i
]));
#endif
dl_ch0_ext
+=
6
;
dl_ch1_ext
+=
6
;
rxF_ext
+=
6
;
...
...
@@ -3929,8 +4059,10 @@ unsigned short dlsch_extract_rbs_dual(int **rxdataF,
memcpy
(
dl_ch0_ext
,
dl_ch0p
,
12
*
sizeof
(
int32_t
));
memcpy
(
dl_ch1_ext
,
dl_ch1p
,
12
*
sizeof
(
int32_t
));
memcpy
(
rxF_ext
,
rxF
,
12
*
sizeof
(
int32_t
));
#ifdef DEBUG_DLSCH_DEMOD
for
(
i
=
0
;
i
<
12
;
i
++
)
// printf("extract rb %d, re %d => (%d,%d)\n",prb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i]));
printf
(
"extract rb %d, re %d => (%d,%d)
\n
"
,
prb
,
i
,
*
(
short
*
)
&
rxF_ext
[
i
],
*
(
1
+
(
short
*
)
&
rxF_ext
[
i
]));
#endif
dl_ch0_ext
+=
12
;
dl_ch1_ext
+=
12
;
rxF_ext
+=
12
;
...
...
@@ -3943,7 +4075,9 @@ unsigned short dlsch_extract_rbs_dual(int **rxdataF,
if
((
i
!=
frame_parms
->
nushift
)
&&
(
i
!=
((
frame_parms
->
nushift
+
3
)
%
6
)))
{
rxF_ext
[
j
]
=
rxF
[
i
];
// printf("(pilots,skip1)extract rb %d, re %d => (%d,%d)\n",prb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j]));
#ifdef DEBUG_DLSCH_DEMOD
printf
(
"(pilots,skip1)extract rb %d, re %d (%d)=> (%d,%d)
\n
"
,
prb
,
i
,
j
,
*
(
short
*
)
&
rxF_ext
[
j
],
*
(
1
+
(
short
*
)
&
rxF_ext
[
j
]));
#endif
dl_ch0_ext
[
j
]
=
dl_ch0p
[
i
];
dl_ch1_ext
[
j
++
]
=
dl_ch1p
[
i
];
}
...
...
@@ -3956,15 +4090,17 @@ unsigned short dlsch_extract_rbs_dual(int **rxdataF,
if
((
i
!=
frame_parms
->
nushift
)
&&
(
i
!=
((
frame_parms
->
nushift
+
3
)
%
6
)))
{
rxF_ext
[
j
]
=
rxF
[(
i
+
6
)];
// printf("(pilots,skip2)extract rb %d, re %d => (%d,%d)\n",prb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j]));
#ifdef DEBUG_DLSCH_DEMOD
printf
(
"(pilots,skip2)extract rb %d, re %d (%d) => (%d,%d)
\n
"
,
prb
,
i
,
j
,
*
(
short
*
)
&
rxF_ext
[
j
],
*
(
1
+
(
short
*
)
&
rxF_ext
[
j
]));
#endif
dl_ch0_ext
[
j
]
=
dl_ch0p
[
i
+
6
];
dl_ch1_ext
[
j
++
]
=
dl_ch1p
[
i
+
6
];
}
}
dl_ch0_ext
+=
4
;
dl_ch1_ext
+=
4
;
rxF_ext
+=
4
;
}
}
else
{
//skip_half==0
for
(
i
=
0
;
i
<
12
;
i
++
)
{
if
((
i
!=
frame_parms
->
nushift
)
&&
...
...
@@ -3972,7 +4108,9 @@ unsigned short dlsch_extract_rbs_dual(int **rxdataF,
(
i
!=
frame_parms
->
nushift
+
6
)
&&
(
i
!=
((
frame_parms
->
nushift
+
9
)
%
12
)))
{
rxF_ext
[
j
]
=
rxF
[
i
];
// printf("(pilots)extract rb %d, re %d => (%d,%d)\n",prb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j]));
#ifdef DEBUG_DLSCH_DEMOD
printf
(
"(pilots)extract rb %d, re %d => (%d,%d)
\n
"
,
prb
,
i
,
*
(
short
*
)
&
rxF_ext
[
j
],
*
(
1
+
(
short
*
)
&
rxF_ext
[
j
]));
#endif
dl_ch0_ext
[
j
]
=
dl_ch0p
[
i
];
dl_ch1_ext
[
j
++
]
=
dl_ch1p
[
i
];
}
...
...
@@ -3982,31 +4120,33 @@ unsigned short dlsch_extract_rbs_dual(int **rxdataF,
rxF_ext
+=
8
;
}
//skip_half==0
}
//pilots==1
nb_rb
++
;
}
else
{
// Do middle RB (around DC)
if
(
pilots
==
0
)
{
memcpy
(
dl_ch0_ext
,
dl_ch0p
,
6
*
sizeof
(
int32_t
));
memcpy
(
dl_ch1_ext
,
dl_ch1p
,
6
*
sizeof
(
int32_t
));
memcpy
(
rxF_ext
,
rxF
,
6
*
sizeof
(
int32_t
));
/*
#ifdef DEBUG_DLSCH_DEMOD
for
(
i
=
0
;
i
<
6
;
i
++
)
{
printf
(
"extract rb %d, re %d => (%d,%d)
\n
"
,
prb
,
i
,
*
(
short
*
)
&
rxF_ext
[
i
],
*
(
1
+
(
short
*
)
&
rxF_ext
[
i
]));
}*/
}
#endif
rxF_ext
+=
6
;
dl_ch0_ext
+=
6
;
dl_ch1_ext
+=
6
;
dl_ch0p
+=
6
;
dl_ch1p
+=
6
;
rxF
=
&
rxdataF
[
aarx
][((
symbol
*
(
frame_parms
->
ofdm_symbol_size
)))];
rxF
=
&
rxdataF
[
aarx
][
1
+
((
symbol
*
(
frame_parms
->
ofdm_symbol_size
)))];
memcpy
(
dl_ch0_ext
,
dl_ch0p
,
6
*
sizeof
(
int32_t
));
memcpy
(
dl_ch1_ext
,
dl_ch1p
,
6
*
sizeof
(
int32_t
));
memcpy
(
rxF_ext
,
rxF
,
6
*
sizeof
(
int32_t
));
/*for (i=0; i<6; i++) {
#ifdef DEBUG_DLSCH_DEMOD
for
(
i
=
0
;
i
<
6
;
i
++
)
{
printf
(
"extract rb %d, re %d => (%d,%d)
\n
"
,
prb
,
i
,
*
(
short
*
)
&
rxF_ext
[
i
],
*
(
1
+
(
short
*
)
&
rxF_ext
[
i
]));
}*/
}
#endif
rxF_ext
+=
6
;
dl_ch0_ext
+=
6
;
dl_ch1_ext
+=
6
;
...
...
@@ -4019,18 +4159,22 @@ unsigned short dlsch_extract_rbs_dual(int **rxdataF,
dl_ch0_ext
[
j
]
=
dl_ch0p
[
i
];
dl_ch1_ext
[
j
]
=
dl_ch1p
[
i
];
rxF_ext
[
j
++
]
=
rxF
[
i
];
//printf("(pilots)extract rb %d, re %d => (%d,%d)\n",prb,i,*(short *)&rxF[i],*(1+(short*)&rxF[i]));
#ifdef DEBUG_DLSCH_DEMOD
printf
(
"(pilots)extract rb %d, re %d (%d) => (%d,%d)
\n
"
,
prb
,
i
,
j
,
*
(
short
*
)
&
rxF
[
i
],
*
(
1
+
(
short
*
)
&
rxF
[
i
]));
#endif
}
}
rxF
=
&
rxdataF
[
aarx
][
symbol
*
(
frame_parms
->
ofdm_symbol_size
)];
rxF
=
&
rxdataF
[
aarx
][
1
+
symbol
*
(
frame_parms
->
ofdm_symbol_size
)];
for
(;
i
<
12
;
i
++
)
{
if
((
i
!=
((
frame_parms
->
nushift
+
6
)
%
12
))
&&
(
i
!=
((
frame_parms
->
nushift
+
9
)
%
12
)))
{
dl_ch0_ext
[
j
]
=
dl_ch0p
[
i
];
dl_ch1_ext
[
j
]
=
dl_ch1p
[
i
];
rxF_ext
[
j
++
]
=
rxF
[(
1
+
i
-
6
)];
//printf("(pilots)extract rb %d, re %d => (%d,%d)\n",prb,i,*(short *)&rxF[1+i-6],*(1+(short*)&rxF[1+i-6]));
rxF_ext
[
j
++
]
=
rxF
[
i
-
6
];
#ifdef DEBUG_DLSCH_DEMOD
printf
(
"(pilots)extract rb %d, re %d (%d) => (%d,%d)
\n
"
,
prb
,
i
,
j
,
*
(
short
*
)
&
rxF
[
1
+
i
-
6
],
*
(
1
+
(
short
*
)
&
rxF
[
1
+
i
-
6
]));
#endif
}
}
...
...
@@ -4038,7 +4182,6 @@ unsigned short dlsch_extract_rbs_dual(int **rxdataF,
dl_ch1_ext
+=
8
;
rxF_ext
+=
8
;
}
//pilots==1
nb_rb
++
;
}
// if Middle PRB
}
// if odd PRB
}
// if rballoc==1
...
...
@@ -4126,7 +4269,7 @@ void dump_dlsch2(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint16_t coded_bits_per
#endif
#ifdef DEBUG_DLSCH_DEMOD
/*
void print_bytes(char *s,__m128i *x)
{
...
...
@@ -4164,5 +4307,5 @@ void print_ints(char *s,__m128i *x)
printf("%s : %d,%d,%d,%d\n",s,
tempb[0],tempb[1],tempb[2],tempb[3]);
}
}
*/
#endif
openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c
View file @
060378fc
...
...
@@ -662,16 +662,17 @@ int dlsch_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms,
if
((
symbol_mod
==
0
)
||
(
symbol_mod
==
(
4
-
frame_parms
->
Ncp
)))
{
if
(
frame_parms
->
mode1_flag
==
0
)
len
=
(
nb_rb
*
8
)
;
//
- (2*pbch_pss_sss_adjust/3);
len
=
(
nb_rb
*
8
)
-
(
2
*
pbch_pss_sss_adjust
/
3
);
else
len
=
(
nb_rb
*
10
)
;
//
- (5*pbch_pss_sss_adjust/6);
len
=
(
nb_rb
*
10
)
-
(
5
*
pbch_pss_sss_adjust
/
6
);
}
else
{
len
=
(
nb_rb
*
12
)
;
//
- pbch_pss_sss_adjust;
len
=
(
nb_rb
*
12
)
-
pbch_pss_sss_adjust
;
}
// printf("dlsch_qpsk_llr: symbol %d,nb_rb %d, len %d,pbch_pss_sss_adjust %d\n",symbol,nb_rb,len,pbch_pss_sss_adjust);
// printf("dlsch_qpsk_llr: symbol %d,nb_rb %d, len %d,pbch_pss_sss_adjust %d\n",symbol,nb_rb,len,pbch_pss_sss_adjust);
for
(
i
=
0
;
i
<
len
;
i
++
)
{
*
llr32
=
*
rxF
;
// printf("llr %d : (%d,%d)\n",i,((int16_t*)llr32)[0],((int16_t*)llr32)[1]);
rxF
++
;
llr32
++
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment