Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
openairinterface5G
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Environments
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
dyyu
openairinterface5G
Commits
5adc20ca
Commit
5adc20ca
authored
Aug 18, 2015
by
Xiwen JIANG
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
patch difference of TM7 dev with svn r7530 to git branch
parent
bc14704c
Changes
28
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
28 changed files
with
2886 additions
and
1132 deletions
+2886
-1132
cmake_targets/CMakeLists.txt
cmake_targets/CMakeLists.txt
+1
-0
common/utils/Makefile.inc
common/utils/Makefile.inc
+1
-1
openair1/PHY/INIT/lte_init.c
openair1/PHY/INIT/lte_init.c
+24
-18
openair1/PHY/LTE_ESTIMATION/bf_freq_domain_filters.m
openair1/PHY/LTE_ESTIMATION/bf_freq_domain_filters.m
+59
-0
openair1/PHY/LTE_ESTIMATION/defs.h
openair1/PHY/LTE_ESTIMATION/defs.h
+7
-0
openair1/PHY/LTE_ESTIMATION/filt12_32.h
openair1/PHY/LTE_ESTIMATION/filt12_32.h
+72
-0
openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c
openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c
+96
-0
openair1/PHY/LTE_REFSIG/defs.h
openair1/PHY/LTE_REFSIG/defs.h
+10
-1
openair1/PHY/LTE_REFSIG/lte_dl_ue_spec.c
openair1/PHY/LTE_REFSIG/lte_dl_ue_spec.c
+393
-0
openair1/PHY/LTE_REFSIG/lte_dl_uespec.c
openair1/PHY/LTE_REFSIG/lte_dl_uespec.c
+0
-362
openair1/PHY/LTE_REFSIG/lte_gold.c
openair1/PHY/LTE_REFSIG/lte_gold.c
+42
-0
openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
+8
-1
openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c
openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c
+815
-44
openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c
openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c
+9
-3
openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
+721
-589
openair1/PHY/LTE_TRANSPORT/lte_mcs.c
openair1/PHY/LTE_TRANSPORT/lte_mcs.c
+8
-7
openair1/PHY/LTE_TRANSPORT/pilots_ue_spec.c
openair1/PHY/LTE_TRANSPORT/pilots_ue_spec.c
+217
-0
openair1/PHY/LTE_TRANSPORT/pmch.c
openair1/PHY/LTE_TRANSPORT/pmch.c
+2
-3
openair1/PHY/LTE_TRANSPORT/proto.h
openair1/PHY/LTE_TRANSPORT/proto.h
+38
-11
openair1/PHY/MODULATION/slot_fep.c
openair1/PHY/MODULATION/slot_fep.c
+9
-0
openair1/PHY/Makefile.inc
openair1/PHY/Makefile.inc
+4
-2
openair1/PHY/defs.h
openair1/PHY/defs.h
+8
-1
openair1/PHY/impl_defs_lte.h
openair1/PHY/impl_defs_lte.h
+15
-2
openair1/SCHED/phy_procedures_lte_eNb.c
openair1/SCHED/phy_procedures_lte_eNb.c
+32
-14
openair1/SCHED/phy_procedures_lte_ue.c
openair1/SCHED/phy_procedures_lte_ue.c
+20
-7
openair1/SIMULATION/LTE_PHY/dlsim.c
openair1/SIMULATION/LTE_PHY/dlsim.c
+261
-60
openair1/SIMULATION/LTE_PHY/mbmssim.c
openair1/SIMULATION/LTE_PHY/mbmssim.c
+1
-1
targets/ARCH/EXMIMO/USERSPACE/OCTAVE/txsig.m
targets/ARCH/EXMIMO/USERSPACE/OCTAVE/txsig.m
+13
-5
No files found.
cmake_targets/CMakeLists.txt
View file @
5adc20ca
...
...
@@ -754,6 +754,7 @@ set(PHY_SRC
${
OPENAIR1_DIR
}
/PHY/LTE_ESTIMATION/lte_sync_timefreq.c
${
OPENAIR1_DIR
}
/PHY/LTE_ESTIMATION/lte_adjust_sync.c
${
OPENAIR1_DIR
}
/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c
${
OPENAIR1_DIR
}
/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c
${
OPENAIR1_DIR
}
/PHY/LTE_ESTIMATION/lte_dl_mbsfn_channel_estimation.c
${
OPENAIR1_DIR
}
/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c
${
OPENAIR1_DIR
}
/PHY/LTE_ESTIMATION/lte_est_freq_offset.c
...
...
common/utils/Makefile.inc
View file @
5adc20ca
...
...
@@ -5,7 +5,7 @@ linux := $(shell if [ `uname` = "Linux" ] ; then echo "1" ; else echo "0" ; fi)
CFLAGS
+=
-std
=
gnu99
#
CFLAGS += -Wall -g -ggdb -Wstrict-prototypes -fno-strict-aliasing
CFLAGS
+=
-Wall
-g
-ggdb
-Wstrict-prototypes
-fno-strict-aliasing
# Need to force this option because default kernel module builder is wrong
CFLAGS
+=
$(
call
cc-option,-mpreferred-stack-boundary
=
4
)
...
...
openair1/PHY/INIT/lte_init.c
View file @
5adc20ca
...
...
@@ -923,14 +923,17 @@ void phy_init_lte_ue__PDSCH( LTE_UE_PDSCH* const pdsch, const LTE_DL_FRAME_PARMS
pdsch
->
llr128_2ndstream
=
(
int16_t
**
)
malloc16_clear
(
sizeof
(
int16_t
*
)
);
// FIXME! no further allocation for (int16_t*)pdsch->llr128 !!! expect SIGSEGV
pdsch
->
rxdataF_ext
=
(
int32_t
**
)
malloc16_clear
(
8
*
sizeof
(
int32_t
*
)
);
pdsch
->
rxdataF_comp0
=
(
int32_t
**
)
malloc16_clear
(
8
*
sizeof
(
int32_t
*
)
);
pdsch
->
rho
=
(
int32_t
**
)
malloc16_clear
(
frame_parms
->
nb_antennas_rx
*
sizeof
(
int32_t
*
)
);
pdsch
->
dl_ch_estimates_ext
=
(
int32_t
**
)
malloc16_clear
(
8
*
sizeof
(
int32_t
*
)
);
pdsch
->
dl_ch_rho_ext
=
(
int32_t
**
)
malloc16_clear
(
8
*
sizeof
(
int32_t
*
)
);
pdsch
->
dl_ch_rho2_ext
=
(
int32_t
**
)
malloc16_clear
(
8
*
sizeof
(
int32_t
*
)
);
pdsch
->
dl_ch_mag0
=
(
int32_t
**
)
malloc16_clear
(
8
*
sizeof
(
int32_t
*
)
);
pdsch
->
dl_ch_magb0
=
(
int32_t
**
)
malloc16_clear
(
8
*
sizeof
(
int32_t
*
)
);
pdsch
->
rxdataF_ext
=
(
int32_t
**
)
malloc16_clear
(
8
*
sizeof
(
int32_t
*
)
);
pdsch
->
rxdataF_uespec_pilots
=
(
int32_t
**
)
malloc16_clear
(
8
*
sizeof
(
int32_t
*
)
);
pdsch
->
rxdataF_comp0
=
(
int32_t
**
)
malloc16_clear
(
8
*
sizeof
(
int32_t
*
)
);
pdsch
->
rho
=
(
int32_t
**
)
malloc16_clear
(
frame_parms
->
nb_antennas_rx
*
sizeof
(
int32_t
*
)
);
pdsch
->
dl_ch_estimates_ext
=
(
int32_t
**
)
malloc16_clear
(
8
*
sizeof
(
int32_t
*
)
);
pdsch
->
dl_bf_ch_estimates
=
(
int32_t
**
)
malloc16_clear
(
8
*
sizeof
(
int32_t
*
)
);
pdsch
->
dl_bf_ch_estimates_ext
=
(
int32_t
**
)
malloc16_clear
(
8
*
sizeof
(
int32_t
*
)
);
pdsch
->
dl_ch_rho_ext
=
(
int32_t
**
)
malloc16_clear
(
8
*
sizeof
(
int32_t
*
)
);
pdsch
->
dl_ch_rho2_ext
=
(
int32_t
**
)
malloc16_clear
(
8
*
sizeof
(
int32_t
*
)
);
pdsch
->
dl_ch_mag0
=
(
int32_t
**
)
malloc16_clear
(
8
*
sizeof
(
int32_t
*
)
);
pdsch
->
dl_ch_magb0
=
(
int32_t
**
)
malloc16_clear
(
8
*
sizeof
(
int32_t
*
)
);
// the allocated memory size is fixed:
AssertFatal
(
frame_parms
->
nb_antennas_rx
<=
2
,
"nb_antennas_rx > 2"
);
...
...
@@ -941,13 +944,16 @@ void phy_init_lte_ue__PDSCH( LTE_UE_PDSCH* const pdsch, const LTE_DL_FRAME_PARMS
for
(
int
j
=
0
;
j
<
4
;
j
++
)
{
//frame_parms->nb_antennas_tx; j++)
const
int
idx
=
(
j
<<
1
)
+
i
;
const
size_t
num
=
7
*
2
*
frame_parms
->
N_RB_DL
*
12
;
pdsch
->
rxdataF_ext
[
idx
]
=
(
int32_t
*
)
malloc16_clear
(
sizeof
(
int32_t
)
*
num
);
pdsch
->
rxdataF_comp0
[
idx
]
=
(
int32_t
*
)
malloc16_clear
(
sizeof
(
int32_t
)
*
num
);
pdsch
->
dl_ch_estimates_ext
[
idx
]
=
(
int32_t
*
)
malloc16_clear
(
sizeof
(
int32_t
)
*
num
);
pdsch
->
dl_ch_rho_ext
[
idx
]
=
(
int32_t
*
)
malloc16_clear
(
sizeof
(
int32_t
)
*
num
);
pdsch
->
dl_ch_rho2_ext
[
idx
]
=
(
int32_t
*
)
malloc16_clear
(
sizeof
(
int32_t
)
*
num
);
pdsch
->
dl_ch_mag0
[
idx
]
=
(
int32_t
*
)
malloc16_clear
(
sizeof
(
int32_t
)
*
num
);
pdsch
->
dl_ch_magb0
[
idx
]
=
(
int32_t
*
)
malloc16_clear
(
sizeof
(
int32_t
)
*
num
);
pdsch
->
rxdataF_ext
[
idx
]
=
(
int32_t
*
)
malloc16_clear
(
sizeof
(
int32_t
)
*
num
);
pdsch
->
rxdataF_uespec_pilots
[
idx
]
=
(
int32_t
*
)
malloc16_clear
(
sizeof
(
int32_t
)
*
frame_parms
->
N_RB_DL
*
12
);
pdsch
->
rxdataF_comp0
[
idx
]
=
(
int32_t
*
)
malloc16_clear
(
sizeof
(
int32_t
)
*
num
);
pdsch
->
dl_ch_estimates_ext
[
idx
]
=
(
int32_t
*
)
malloc16_clear
(
sizeof
(
int32_t
)
*
num
);
pdsch
->
dl_bf_ch_estimates
[
idx
]
=
(
int32_t
*
)
malloc16_clear
(
sizeof
(
int32_t
)
*
num
);
pdsch
->
dl_bf_ch_estimates_ext
[
idx
]
=
(
int32_t
*
)
malloc16_clear
(
sizeof
(
int32_t
)
*
frame_parms
->
symbols_per_tti
*
(
frame_parms
->
ofdm_symbol_size
+
LTE_CE_FILTER_LENGTH
)
);
pdsch
->
dl_ch_rho_ext
[
idx
]
=
(
int32_t
*
)
malloc16_clear
(
sizeof
(
int32_t
)
*
num
);
pdsch
->
dl_ch_rho2_ext
[
idx
]
=
(
int32_t
*
)
malloc16_clear
(
sizeof
(
int32_t
)
*
num
);
pdsch
->
dl_ch_mag0
[
idx
]
=
(
int32_t
*
)
malloc16_clear
(
sizeof
(
int32_t
)
*
num
);
pdsch
->
dl_ch_magb0
[
idx
]
=
(
int32_t
*
)
malloc16_clear
(
sizeof
(
int32_t
)
*
num
);
}
}
}
...
...
@@ -1268,10 +1274,10 @@ int phy_init_lte_eNB(PHY_VARS_eNB *phy_vars_eNB,
if
(
abstraction_flag
==
0
)
{
// TX vars
eNB_common_vars
->
txdata
[
eNB_id
]
=
(
int32_t
**
)
malloc16
(
frame_parms
->
nb_antennas_tx
*
sizeof
(
int32_t
*
)
);
eNB_common_vars
->
txdataF
[
eNB_id
]
=
(
mod_sym_t
**
)
malloc16
(
frame_parms
->
nb_antennas_tx
*
sizeof
(
mod_sym_t
*
)
);
eNB_common_vars
->
txdata
[
eNB_id
]
=
(
int32_t
**
)
malloc16
(
phy_vars_eNB
->
nb_antennas_tx_phy
*
sizeof
(
int32_t
*
)
);
eNB_common_vars
->
txdataF
[
eNB_id
]
=
(
mod_sym_t
**
)
malloc16
(
phy_vars_eNB
->
nb_antennas_tx_phy
*
sizeof
(
mod_sym_t
*
)
);
for
(
i
=
0
;
i
<
frame_parms
->
nb_antennas_tx
;
i
++
)
{
for
(
i
=
0
;
i
<
phy_vars_eNB
->
nb_antennas_tx_phy
;
i
++
)
{
#ifdef USER_MODE
eNB_common_vars
->
txdata
[
eNB_id
][
i
]
=
(
int32_t
*
)
malloc16_clear
(
FRAME_LENGTH_COMPLEX_SAMPLES
*
sizeof
(
int32_t
)
);
eNB_common_vars
->
txdataF
[
eNB_id
][
i
]
=
(
mod_sym_t
*
)
malloc16_clear
(
FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX
*
sizeof
(
mod_sym_t
)
);
...
...
openair1/PHY/LTE_ESTIMATION/bf_freq_domain_filters.m
0 → 100644
View file @
5adc20ca
filter_length = 12;
F = -3/4:1/4:7/4;
F_l = zeros(8,12);
F_r = zeros(8,12);
F_m = zeros(8,12);
F2 =-3/5:1/5:8/5;
for i=0:3
F_l(i+1,:) = floor(16384*[F(8+i:-1:4) zeros(1,7-i)]);
F_r(i+1,:) = floor(16384*[zeros(1,4+i) F(4:end-i)]);
F_m(i+1,:) = floor(16384*[F(4-i:8) F(7:-1:1+i)]);
end
for i=0:1
F_l(i+5,:) = floor(16384*[F(8:-1:4-i) zeros(1,7-i)]);
F_r(i+5,:) = floor(16384*[zeros(1,5+i) F2(5+i) F2(7:end-i)]);
F_m(i+5,:) = floor(16384*[F(4-i:8) F2(8-i) F2(6:-1:1+i)]);
end
for i=2:3
F_l(i+5,:) = floor(16384*[F2(end:-1:7) F2(8-i) zeros(1,5)]);
F_r(i+5,:) = floor(16384*[zeros(1,4+i) F(4:end-i)]);
F_m(i+5,:) = floor(16384*[F2(4-i:6) F2(4+i) F(8:-1:1+i)]);
end
fd = fopen("filt12_32.h","w");
for i=0:3
fprintf(fd,"short filt12_l%d[12] = {\n",i);
fprintf(fd,"%d,",F_l(i+1,1:end-1));
fprintf(fd,"%d};\n\n",F_l(i+1,end));
fprintf(fd,"short filt12_r%d[12] = {\n",i);
fprintf(fd,"%d,",F_r(i+1,1:end-1));
fprintf(fd,"%d};\n\n",F_r(i+1,end));
fprintf(fd,"short filt12_m%d[12] = {\n",i);
fprintf(fd,"%d,",F_m(i+1,1:end-1));
fprintf(fd,"%d};\n\n",F_m(i+1,end));
end
for i=0:3
fprintf(fd,"short filt12_l%d_dc[12] = {\n",i);
fprintf(fd,"%d,",F_l(i+5,1:end-1));
fprintf(fd,"%d};\n\n",F_l(i+5,end));
fprintf(fd,"short filt12_r%d_dc[12] = {\n",i);
fprintf(fd,"%d,",F_r(i+5,1:end-1));
fprintf(fd,"%d};\n\n",F_r(i+5,end));
fprintf(fd,"short filt12_m%d_dc[12] = {\n",i);
fprintf(fd,"%d,",F_m(i+5,1:end-1));
fprintf(fd,"%d};\n\n",F_m(i+5,end));
end
fclose(fd);
openair1/PHY/LTE_ESTIMATION/defs.h
View file @
5adc20ca
...
...
@@ -124,6 +124,13 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
uint8_t
symbol
);
int
lte_dl_bf_channel_estimation
(
PHY_VARS_UE
*
phy_vars_ue
,
module_id_t
eNB_id
,
uint8_t
eNB_offset
,
uint8_t
Ns
,
uint8_t
p
,
uint8_t
symbol
);
int
lte_dl_msbfn_channel_estimation
(
PHY_VARS_UE
*
phy_vars_ue
,
module_id_t
eNB_id
,
uint8_t
eNB_offset
,
...
...
openair1/PHY/LTE_ESTIMATION/filt12_32.h
0 → 100644
View file @
5adc20ca
short
filt12_l0
[
12
]
=
{
16384
,
12288
,
8192
,
4096
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
};
short
filt12_r0
[
12
]
=
{
0
,
0
,
0
,
0
,
0
,
4096
,
8192
,
12288
,
16384
,
20480
,
24576
,
28672
};
short
filt12_m0
[
12
]
=
{
0
,
4096
,
8192
,
12288
,
16384
,
12288
,
8192
,
4096
,
0
,
-
4096
,
-
8192
,
-
12288
};
short
filt12_l1
[
12
]
=
{
20480
,
16384
,
12288
,
8192
,
4096
,
0
,
0
,
0
,
0
,
0
,
0
,
0
};
short
filt12_r1
[
12
]
=
{
0
,
0
,
0
,
0
,
0
,
0
,
4096
,
8192
,
12288
,
16384
,
20480
,
24576
};
short
filt12_m1
[
12
]
=
{
-
4096
,
0
,
4096
,
8192
,
12288
,
16384
,
12288
,
8192
,
4096
,
0
,
-
4096
,
-
8192
};
short
filt12_l2
[
12
]
=
{
24576
,
20480
,
16384
,
12288
,
8192
,
4096
,
0
,
0
,
0
,
0
,
0
,
0
};
short
filt12_r2
[
12
]
=
{
0
,
0
,
0
,
0
,
0
,
0
,
0
,
4096
,
8192
,
12288
,
16384
,
20480
};
short
filt12_m2
[
12
]
=
{
-
8192
,
-
4096
,
0
,
4096
,
8192
,
12288
,
16384
,
12288
,
8192
,
4096
,
0
,
-
4096
};
short
filt12_l3
[
12
]
=
{
28672
,
24576
,
20480
,
16384
,
12288
,
8192
,
4096
,
0
,
0
,
0
,
0
,
0
};
short
filt12_r3
[
12
]
=
{
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
4096
,
8192
,
12288
,
16384
};
short
filt12_m3
[
12
]
=
{
-
12288
,
-
8192
,
-
4096
,
0
,
4096
,
8192
,
12288
,
16384
,
12288
,
8192
,
4096
,
0
};
short
filt12_l0_dc
[
12
]
=
{
16384
,
12288
,
8192
,
4096
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
};
short
filt12_r0_dc
[
12
]
=
{
0
,
0
,
0
,
0
,
0
,
3276
,
9830
,
13107
,
16384
,
19660
,
22937
,
26214
};
short
filt12_m0_dc
[
12
]
=
{
0
,
4096
,
8192
,
12288
,
16384
,
13107
,
6553
,
3276
,
0
,
-
3277
,
-
6554
,
-
9831
};
short
filt12_l1_dc
[
12
]
=
{
16384
,
12288
,
8192
,
4096
,
0
,
-
4096
,
0
,
0
,
0
,
0
,
0
,
0
};
short
filt12_r1_dc
[
12
]
=
{
0
,
0
,
0
,
0
,
0
,
0
,
6553
,
9830
,
13107
,
16384
,
19660
,
22937
};
short
filt12_m1_dc
[
12
]
=
{
-
4096
,
0
,
4096
,
8192
,
12288
,
16384
,
9830
,
6553
,
3276
,
0
,
-
3277
,
-
6554
};
short
filt12_l2_dc
[
12
]
=
{
26214
,
22937
,
19660
,
16384
,
13107
,
9830
,
6553
,
0
,
0
,
0
,
0
,
0
};
short
filt12_r2_dc
[
12
]
=
{
0
,
0
,
0
,
0
,
0
,
0
,
0
,
4096
,
8192
,
12288
,
16384
,
20480
};
short
filt12_m2_dc
[
12
]
=
{
-
6554
,
-
3277
,
0
,
3276
,
6553
,
6553
,
16384
,
12288
,
8192
,
4096
,
0
,
-
4096
};
short
filt12_l3_dc
[
12
]
=
{
26214
,
22937
,
19660
,
16384
,
13107
,
9830
,
3276
,
0
,
0
,
0
,
0
,
0
};
short
filt12_r3_dc
[
12
]
=
{
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
4096
,
8192
,
12288
,
16384
};
short
filt12_m3_dc
[
12
]
=
{
-
9831
,
-
6554
,
-
3277
,
0
,
3276
,
6553
,
9830
,
16384
,
12288
,
8192
,
4096
,
0
};
openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c
0 → 100644
View file @
5adc20ca
/*******************************************************************************
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@eurecom.fr
Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
*******************************************************************************/
#ifdef USER_MODE
#include <string.h>
#endif
#include "defs.h"
#include "PHY/defs.h"
#include "filt12_32.h"
//#define DEBUG_CH
/*To be accomplished*/
int
lte_dl_bf_channel_estimation
(
PHY_VARS_UE
*
phy_vars_ue
,
uint8_t
eNB_id
,
uint8_t
eNB_offset
,
unsigned
char
Ns
,
unsigned
char
p
,
unsigned
char
symbol
)
{
unsigned
char
aarx
;
int
uespec_pilot
[
9
][
200
];
short
*
pil
,
*
rxF
;
//LTE_UE_PDSCH *lte_ue_pdsch_vars = phy_vars_ue->lte_ue_pdsch_vars[eNB_id];
int
**
rxdataF
=
phy_vars_ue
->
lte_ue_common_vars
.
rxdataF
;
int32_t
**
dl_bf_ch_estimates
=
phy_vars_ue
->
lte_ue_pdsch_vars
[
eNB_id
]
->
dl_bf_ch_estimates
;
int
beamforming_mode
=
phy_vars_ue
->
transmission_mode
>
7
?
phy_vars_ue
->
transmission_mode
:
0
;
// define interpolation filters
//....
//ch_offset = phy_vars_ue->lte_frame_parms.ofdm_symbol_size*symbol;
//generate ue specific pilots
if
(
beamforming_mode
==
7
)
lte_dl_ue_spec_rx
(
phy_vars_ue
,
&
uespec_pilot
[
p
-
5
][
0
],
Ns
,
p
,
0
);
else
if
(
beamforming_mode
>
7
)
lte_dl_ue_spec_rx
(
phy_vars_ue
,
&
uespec_pilot
[
p
-
6
][
0
],
Ns
,
p
,
0
);
else
if
(
beamforming_mode
==
0
)
msg
(
"No beamforming is performed.
\n
"
);
else
msg
(
"Beamforming mode not supported yet.
\n
"
);
if
(
beamforming_mode
==
7
)
{
for
(
aarx
=
0
;
aarx
<
phy_vars_ue
->
lte_frame_parms
.
nb_antennas_rx
;
aarx
++
)
{
/* pil = (short *)&uespec_pilot[0][0];
rxF = (short *)&rxdataF_uespec[aarx][(symbol-1)/3*frame_parms->N_RB_DL*(3+frame_parms->Ncp)];
dl_ch = (short *)&dl_bf_ch_estimates[aarx][ch_offset];
memset(dl_ch,0,4*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size));
//estimation and interpolation */
}
}
else
if
(
beamforming_mode
==
0
){
msg
(
"No beamforming is performed.
\n
"
);
return
(
-
1
);
}
else
{
msg
(
"Beamforming mode is not supported yet.
\n
"
);
return
(
-
1
);
}
//temporal interpolation
return
(
0
);
}
openair1/PHY/LTE_REFSIG/defs.h
View file @
5adc20ca
...
...
@@ -52,12 +52,13 @@ unsigned int lte_gold_generic(unsigned int *x1, unsigned int *x2, unsigned char
void
lte_gold
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
uint32_t
lte_gold_table
[
20
][
2
][
14
],
uint16_t
Nid_cell
);
void
lte_gold_ue_spec
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
uint32_t
lte_gold_uespec_table
[
2
][
20
][
2
][
21
],
uint16_t
Nid_cell
,
uint16_t
*
n_idDMRS
);
/*!\brief This function generates the LTE Gold sequence (36-211, Sec 7.2), specifically for DL UE-specific reference signals for antenna ports 7..14.
@param frame_parms LTE DL Frame parameters
@param lte_gold_uespec_table pointer to table where sequences are stored
@param Nid_cell Cell Id (to compute sequences for local and adjacent cells)
@param n_idDMRS Scrambling identity for TM10*/
void
lte_gold_ue_spec
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
uint32_t
lte_gold_uespec_table
[
2
][
20
][
2
][
21
],
uint16_t
Nid_cell
,
uint16_t
*
n_idDMRS
);
void
lte_gold_mbsfn
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
uint32_t
lte_gold_mbsfn_table
[
10
][
3
][
42
],
uint16_t
Nid_MBSFN
);
...
...
@@ -84,6 +85,7 @@ int lte_dl_cell_spec(PHY_VARS_eNB *phy_vars_eNB,
@param output Output vector for OFDM symbol (Frequency Domain)
@param amp Q15 amplitude
@param Ns Slot number (0..19)
@param lprime symbol (0,1)
@param p antenna index
@param SS_flag Flag to indicate special subframe
*/
...
...
@@ -92,6 +94,7 @@ int lte_dl_ue_spec(PHY_VARS_eNB *phy_vars_eNB,
mod_sym_t
*
output
,
short
amp
,
uint8_t
Ns
,
uint8_t
lprime
,
uint8_t
p
,
int
SS_flag
);
...
...
@@ -123,6 +126,12 @@ int lte_dl_cell_spec_rx(PHY_VARS_UE *phy_vars_ue,
unsigned
char
l
,
unsigned
char
p
);
int
lte_dl_ue_spec_rx
(
PHY_VARS_UE
*
phy_vars_ue
,
mod_sym_t
*
output
,
unsigned
char
Ns
,
unsigned
char
p
,
int
SS_flag
);
int
lte_dl_mbsfn_rx
(
PHY_VARS_UE
*
phy_vars_ue
,
int
*
output
,
int
subframe
,
...
...
openair1/PHY/LTE_REFSIG/lte_dl_ue_spec.c
0 → 100644
View file @
5adc20ca
This diff is collapsed.
Click to expand it.
openair1/PHY/LTE_REFSIG/lte_dl_uespec.c
View file @
5adc20ca
This diff is collapsed.
Click to expand it.
openair1/PHY/LTE_REFSIG/lte_gold.c
View file @
5adc20ca
...
...
@@ -142,6 +142,48 @@ void lte_gold_ue_spec(LTE_DL_FRAME_PARMS *frame_parms,uint32_t lte_gold_uespec_t
}
}
void
lte_gold_ue_spec_port5
(
uint32_t
lte_gold_uespec_port5_table
[
20
][
2
][
21
],
uint16_t
Nid_cell
,
uint16_t
n_rnti
)
{
unsigned
char
ns
,
l
;
unsigned
int
n
,
x1
,
x2
;
for
(
ns
=
0
;
ns
<
20
;
ns
++
)
{
for
(
l
=
0
;
l
<
2
;
l
++
)
{
x2
=
((((
ns
>>
1
)
+
1
)
*
((
Nid_cell
<<
1
)
+
1
))
<<
16
)
+
n_rnti
;
//x2 = frame_parms->Ncp + (Nid_cell<<1) + (1+(Nid_cell<<1))*(1 + (3*l) + (7*(1+ns))); //cinit
//n = 0
// printf("cinit (ns %d, l %d) => %d\n",ns,l,x2);
x1
=
1
+
(
1
<<
31
);
x2
=
x2
^
((
x2
^
(
x2
>>
1
)
^
(
x2
>>
2
)
^
(
x2
>>
3
))
<<
31
);
// skip first 50 double words (1600 bits)
//printf("n=0 : x1 %x, x2 %x\n",x1,x2);
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
);
// printf("x1 : %x, x2 : %x\n",x1,x2);
}
for
(
n
=
0
;
n
<
14
;
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_uespec_port5_table
[
ns
][
l
][
n
]
=
x1
^
x2
;
// printf("n=%d : c %x\n",n,x1^x2);
}
}
}
}
/*! \brief gold sequenquence generator
\param x1
\param x2 this should be set to c_init if reset=1
...
...
openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
View file @
5adc20ca
...
...
@@ -259,6 +259,7 @@ int dlsch_encoding(unsigned char *a,
unsigned
char
mod_order
;
unsigned
int
Kr
=
0
,
Kr_bytes
,
r
,
r_offset
=
0
;
unsigned
short
m
=
dlsch
->
harq_processes
[
harq_pid
]
->
mcs
;
uint8_t
transmission_mode_7to9
=
0
;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ENCODING
,
VCD_FUNCTION_IN
);
...
...
@@ -266,7 +267,13 @@ int dlsch_encoding(unsigned char *a,
// printf("Encoder: A: %d\n",A);
mod_order
=
get_Qm
(
dlsch
->
harq_processes
[
harq_pid
]
->
mcs
);
G
=
get_G
(
frame_parms
,
nb_rb
,
dlsch
->
harq_processes
[
harq_pid
]
->
rb_alloc
,
mod_order
,
dlsch
->
harq_processes
[
harq_pid
]
->
Nl
,
num_pdcch_symbols
,
frame
,
subframe
);
if
(
dlsch
->
harq_processes
[
harq_pid
]
->
mimo_mode
==
TM7
)
transmission_mode_7to9
=
7
;
else
if
(
dlsch
->
harq_processes
[
harq_pid
]
->
mimo_mode
==
TM8
)
transmission_mode_7to9
=
8
;
else
if
(
dlsch
->
harq_processes
[
harq_pid
]
->
mimo_mode
==
TM9_10
)
transmission_mode_7to9
=
9
;
G
=
get_G
(
frame_parms
,
nb_rb
,
dlsch
->
harq_processes
[
harq_pid
]
->
rb_alloc
,
mod_order
,
dlsch
->
harq_processes
[
harq_pid
]
->
Nl
,
num_pdcch_symbols
,
frame
,
subframe
,
transmission_mode_7to9
);
// if (dlsch->harq_processes[harq_pid]->Ndi == 1) { // this is a new packet
...
...
openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c
View file @
5adc20ca
This diff is collapsed.
Click to expand it.
openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c
View file @
5adc20ca
...
...
@@ -640,7 +640,8 @@ int dlsch_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms,
uint8_t
first_symbol_flag
,
uint16_t
nb_rb
,
uint16_t
pbch_pss_sss_adjust
,
short
**
llr32p
)
short
**
llr32p
,
uint8_t
beamforming_mode
)
{
uint32_t
*
rxF
=
(
uint32_t
*
)
&
rxdataF_comp
[
0
][(
symbol
*
frame_parms
->
N_RB_DL
*
12
)];
...
...
@@ -661,11 +662,16 @@ 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
)
if
(
frame_parms
->
mode1_flag
==
0
&&
beamforming_mode
!=
7
)
len
=
(
nb_rb
*
8
);
// - (2*pbch_pss_sss_adjust/3);
else
len
=
(
nb_rb
*
10
);
// - (5*pbch_pss_sss_adjust/6);
}
else
{
}
else
if
((
beamforming_mode
==
7
)
&&
(
frame_parms
->
Ncp
==
0
)
&&
(
symbol
==
3
||
symbol
==
6
||
symbol
==
9
||
symbol
==
12
)){
len
=
(
nb_rb
*
9
);
}
else
if
((
beamforming_mode
==
7
)
&&
(
frame_parms
->
Ncp
==
1
)
&&
(
symbol
==
4
||
symbol
==
7
||
symbol
==
10
)){
len
=
(
nb_rb
*
8
);
}
else
{
len
=
(
nb_rb
*
12
);
// - pbch_pss_sss_adjust;
}
...
...
openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
View file @
5adc20ca
This diff is collapsed.
Click to expand it.
openair1/PHY/LTE_TRANSPORT/lte_mcs.c
View file @
5adc20ca
...
...
@@ -333,11 +333,8 @@ int adjust_G(LTE_DL_FRAME_PARMS *frame_parms,uint32_t *rb_alloc,uint8_t mod_orde
return
(
0
);
}
int
get_G
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
uint16_t
nb_rb
,
uint32_t
*
rb_alloc
,
uint8_t
mod_order
,
uint8_t
Nl
,
uint8_t
num_pdcch_symbols
,
int
frame
,
uint8_t
subframe
)
int
get_G
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
uint16_t
nb_rb
,
uint32_t
*
rb_alloc
,
uint8_t
mod_order
,
uint8_t
Nl
,
uint8_t
num_pdcch_symbols
,
int
frame
,
uint8_t
subframe
,
uint8_t
beamforming_mode
)
{
int
G_adj
;
if
(
is_pmch_subframe
(
frame
,
subframe
,
frame_parms
)
==
0
)
{
...
...
@@ -348,9 +345,11 @@ int get_G(LTE_DL_FRAME_PARMS *frame_parms,uint16_t nb_rb,uint32_t *rb_alloc,uint
// PDDDPDD PDDDPDD - 13 PDSCH symbols, 10 full, 3 w/ pilots = 10*12 + 3*8
// PCDDPDD PDDDPDD - 12 PDSCH symbols, 9 full, 3 w/ pilots = 9*12 + 3*8
// PCCDPDD PDDDPDD - 11 PDSCH symbols, 8 full, 3 w/pilots = 8*12 + 3*8
if
(
frame_parms
->
mode1_flag
==
0
)
// SISO
if
(
beamforming_mode
==
0
&&
frame_parms
->
mode1_flag
==
0
)
return
((((
int
)
nb_rb
*
mod_order
*
((
11
-
num_pdcch_symbols
)
*
12
+
3
*
8
))
-
G_adj
)
*
Nl
);
else
else
if
(
beamforming_mode
==
7
)
return
(((
int
)
nb_rb
*
mod_order
*
((
7
-
num_pdcch_symbols
)
*
12
+
3
*
10
+
4
*
9
))
-
G_adj
);
else
//SISO
return
(((
int
)
nb_rb
*
mod_order
*
((
11
-
num_pdcch_symbols
)
*
12
+
3
*
10
))
-
G_adj
);
}
else
{
// PDDPDD PDDPDD - 11 PDSCH symbols, 8 full, 3 w/ pilots = 8*12 + 3*8
...
...
@@ -358,7 +357,9 @@ int get_G(LTE_DL_FRAME_PARMS *frame_parms,uint16_t nb_rb,uint32_t *rb_alloc,uint
// PCCPDD PDDPDD - 9 PDSCH symbols, 6 full, 3 w/pilots = 6*12 + 3*8
if
(
frame_parms
->
mode1_flag
==
0
)
return
((((
int
)
nb_rb
*
mod_order
*
((
9
-
num_pdcch_symbols
)
*
12
+
3
*
8
))
-
G_adj
)
*
Nl
);
else
else
if
(
beamforming_mode
==
7
)
return
(((
int
)
nb_rb
*
mod_order
*
((
5
-
num_pdcch_symbols
)
*
12
+
3
*
8
+
4
*
9
))
-
G_adj
);
else
//SISO
return
(((
int
)
nb_rb
*
mod_order
*
((
9
-
num_pdcch_symbols
)
*
12
+
3
*
10
))
-
G_adj
);
}
}
else
{
// This is an MBSFN subframe
...
...
openair1/PHY/LTE_TRANSPORT/pilots_ue_spec.c
0 → 100644
View file @
5adc20ca
/*******************************************************************************
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@eurecom.fr
Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
*******************************************************************************/
/*! \file PHY/LTE_TRANSPORT/uespec_pilots.c
* \brief Top-level routines for generating DL ue-specific reference signals V12.5 2015-03
* \author X.JIANG
* \date 2011
* \version 0.1
* \company Eurecom
* \email: xiwen.jiangeurecom.fr
* \note
* \warning
*/
//#include "defs.h"
#include "PHY/defs.h"
void
generate_ue_spec_pilots
(
PHY_VARS_eNB
*
phy_vars_eNB
,
uint8_t
UE_id
,
mod_sym_t
**
txdataF
,
int16_t
amp
,
uint16_t
Ntti
,
uint8_t
beamforming_mode
)
{
LTE_DL_FRAME_PARMS
*
frame_parms
=
&
phy_vars_eNB
->
lte_frame_parms
;
uint32_t
tti
,
tti_offset
,
slot_offset
,
Nsymb
,
samples_per_symbol
;
uint8_t
second_pilot
,
aa
;
// printf("Doing TX pilots Nsymb %d, second_pilot %d\n",Nsymb,second_pilot);
switch
(
beamforming_mode
){
case
7
:
for
(
tti
=
0
;
tti
<
Ntti
;
tti
++
)
{
tti_offset
=
tti
*
frame_parms
->
ofdm_symbol_size
*
Nsymb
;
samples_per_symbol
=
frame_parms
->
ofdm_symbol_size
;
slot_offset
=
(
tti
*
2
)
%
20
;
// printf("tti %d : offset %d (slot %d)\n",tti,tti_offset,slot_offset);
//Generate UE specific Pilots
printf
(
"generate_dl_ue_spec:tti_offset=%d
\n
"
,
tti_offset
);
if
(
frame_parms
->
Ncp
==
0
)
{
for
(
aa
=
0
;
aa
<
phy_vars_eNB
->
nb_antennas_tx_phy
;
aa
++
){
//antenna port 5 symbol 0 slot 0
lte_dl_ue_spec
(
phy_vars_eNB
,
UE_id
,
&
txdataF
[
aa
][
tti_offset
+
3
*
samples_per_symbol
],
amp
,
slot_offset
,
1
,
5
,
0
);
//antenna port 5 symbol 1 slot 0
lte_dl_ue_spec
(
phy_vars_eNB
,
UE_id
,
&
txdataF
[
aa
][
tti_offset
+
6
*
samples_per_symbol
],
amp
,
slot_offset
,
1
,
5
,