mirror of
https://gitlab.eurecom.fr/oai/openairinterface5g.git
synced 2026-07-13 04:30:28 +00:00
- all RAN code, CI code, configuration files, dockerfiles, in CSSL v1.0
- all deployment code (openshift, charts, ancillary files like shell
scripts), in MIT
- documentation in CC-BY-4.0
- exceptions might apply and are listed in NOTICE
- there is a new LICENSES folder with all licenses
- CONTRIBUTIONS.md has been updated accordingly
For automated changes based on OAI PL v1.1:
perl -i~ -0pe 's/\/\*.*Licensed to the OpenAirInterface.*openairinterface.org\n#?/\/*\n * SPDX-License-Identifier: LicenseRef-CSSL-1.0\n/s' **/*.{c,h,cpp}
perl -i~ -0pe 's/\/\*.*Licensed to the OpenAirInterface.*openairinterface.org\n#?/\/*\n * SPDX-License-Identifier: LicenseRef-CSSL-1.0\n/s' **/*.ts
perl -i~ -0pe 's/<!--.*Licensed to the OpenAirInterface.*openairinterface.org\n.*-->/<!-- SPDX-License-Identifier: LicenseRef-CSSL-1.0 -->/s' **/*.xml
The rest (cmake, files with missing license, cmake) manually.
603 lines
23 KiB
C
603 lines
23 KiB
C
/*
|
|
* SPDX-License-Identifier: LicenseRef-CSSL-1.0
|
|
*/
|
|
|
|
/*!
|
|
* \brief utils for PRACH common to both PHY and MAC
|
|
*/
|
|
|
|
#include <stdint.h>
|
|
|
|
|
|
#include "PHY/LTE_TRANSPORT/transport_common.h"
|
|
|
|
// This is table 5.7.1-4 from 36.211
|
|
const PRACH_TDD_PREAMBLE_MAP tdd_preamble_map[64][7] = {
|
|
// TDD Configuration Index 0
|
|
{{1, {{0, 1, 0, 2}}},
|
|
{1, {{0, 1, 0, 1}}},
|
|
{1, {{0, 1, 0, 0}}},
|
|
{1, {{0, 1, 0, 2}}},
|
|
{1, {{0, 1, 0, 1}}},
|
|
{1, {{0, 1, 0, 0}}},
|
|
{1, {{0, 1, 0, 2}}}},
|
|
// TDD Configuration Index 1
|
|
{{1, {{0, 2, 0, 2}}},
|
|
{1, {{0, 2, 0, 1}}},
|
|
{1, {{0, 2, 0, 0}}},
|
|
{1, {{0, 2, 0, 2}}},
|
|
{1, {{0, 2, 0, 1}}},
|
|
{1, {{0, 2, 0, 0}}},
|
|
{1, {{0, 2, 0, 2}}}},
|
|
// TDD Configuration Index 2
|
|
{{1, {{0, 1, 1, 2}}},
|
|
{1, {{0, 1, 1, 1}}},
|
|
{1, {{0, 1, 1, 0}}},
|
|
{1, {{0, 1, 0, 1}}},
|
|
{1, {{0, 1, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{1, {{0, 1, 1, 1}}}},
|
|
// TDD Configuration Index 3
|
|
{{1, {{0, 0, 0, 2}}},
|
|
{1, {{0, 0, 0, 1}}},
|
|
{1, {{0, 0, 0, 0}}},
|
|
{1, {{0, 0, 0, 2}}},
|
|
{1, {{0, 0, 0, 1}}},
|
|
{1, {{0, 0, 0, 0}}},
|
|
{1, {{0, 0, 0, 2}}}},
|
|
// TDD Configuration Index 4
|
|
{{1, {{0, 0, 1, 2}}},
|
|
{1, {{0, 0, 1, 1}}},
|
|
{1, {{0, 0, 1, 0}}},
|
|
{1, {{0, 0, 0, 1}}},
|
|
{1, {{0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{1, {{0, 0, 1, 1}}}},
|
|
// TDD Configuration Index 5
|
|
{{1, {{0, 0, 0, 1}}},
|
|
{1, {{0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{1, {{0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{1, {{0, 0, 0, 1}}}},
|
|
// TDD Configuration Index 6
|
|
{{2, {{0, 0, 0, 2}, {0, 0, 1, 2}}},
|
|
{2, {{0, 0, 0, 1}, {0, 0, 1, 1}}},
|
|
{2, {{0, 0, 0, 0}, {0, 0, 1, 0}}},
|
|
{2, {{0, 0, 0, 1}, {0, 0, 0, 2}}},
|
|
{2, {{0, 0, 0, 0}, {0, 0, 0, 1}}},
|
|
{2, {{0, 0, 0, 0}, {1, 0, 0, 0}}},
|
|
{2, {{0, 0, 0, 2}, {0, 0, 1, 1}}}},
|
|
// TDD Configuration Index 7
|
|
{{2, {{0, 0, 0, 1}, {0, 0, 1, 1}}},
|
|
{2, {{0, 0, 0, 0}, {0, 0, 1, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{2, {{0, 0, 0, 0}, {0, 0, 0, 2}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{2, {{0, 0, 0, 1}, {0, 0, 1, 0}}}},
|
|
// TDD Configuration Index 8
|
|
{{2, {{0, 0, 0, 0}, {0, 0, 1, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{2, {{0, 0, 0, 0}, {0, 0, 0, 1}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{2, {{0, 0, 0, 0}, {0, 0, 1, 1}}}},
|
|
// TDD Configuration Index 9
|
|
{{3, {{0, 0, 0, 1}, {0, 0, 0, 2}, {0, 0, 1, 2}}},
|
|
{3, {{0, 0, 0, 0}, {0, 0, 0, 1}, {0, 0, 1, 1}}},
|
|
{3, {{0, 0, 0, 0}, {0, 0, 1, 0}, {1, 0, 0, 0}}},
|
|
{3, {{0, 0, 0, 0}, {0, 0, 0, 1}, {0, 0, 0, 2}}},
|
|
{3, {{0, 0, 0, 0}, {0, 0, 0, 1}, {1, 0, 0, 1}}},
|
|
{3, {{0, 0, 0, 0}, {1, 0, 0, 0}, {2, 0, 0, 0}}},
|
|
{3, {{0, 0, 0, 1}, {0, 0, 0, 2}, {0, 0, 1, 1}}}},
|
|
// TDD Configuration Index 10
|
|
{{3, {{0, 0, 0, 0}, {0, 0, 1, 0}, {0, 0, 1, 1}}},
|
|
{3, {{0, 0, 0, 1}, {0, 0, 1, 0}, {0, 0, 1, 1}}},
|
|
{3, {{0, 0, 0, 0}, {0, 0, 1, 0}, {1, 0, 1, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{3, {{0, 0, 0, 0}, {0, 0, 0, 1}, {1, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{3, {{0, 0, 0, 0}, {0, 0, 0, 2}, {0, 0, 1, 0}}}},
|
|
// TDD Configuration Index 11
|
|
{{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{3, {{0, 0, 0, 0}, {0, 0, 0, 1}, {0, 0, 1, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{3, {{0, 0, 0, 1}, {0, 0, 1, 0}, {0, 0, 1, 1}}}},
|
|
// TDD Configuration Index 12
|
|
{{4, {{0, 0, 0, 1}, {0, 0, 0, 2}, {0, 0, 1, 1}, {0, 0, 1, 2}}},
|
|
{4, {{0, 0, 0, 0}, {0, 0, 0, 1}, {0, 0, 1, 0}, {0, 0, 1, 1}}},
|
|
{4, {{0, 0, 0, 0}, {0, 0, 1, 0}, {1, 0, 0, 0}, {1, 0, 1, 0}}},
|
|
{4, {{0, 0, 0, 0}, {0, 0, 0, 1}, {0, 0, 0, 2}, {1, 0, 0, 2}}},
|
|
{4, {{0, 0, 0, 0}, {0, 0, 0, 1}, {1, 0, 0, 0}, {1, 0, 0, 1}}},
|
|
{4, {{0, 0, 0, 0}, {1, 0, 0, 0}, {2, 0, 0, 0}, {3, 0, 0, 0}}},
|
|
{4, {{0, 0, 0, 1}, {0, 0, 0, 2}, {0, 0, 1, 0}, {0, 0, 1, 1}}}},
|
|
// TDD Configuration Index 13
|
|
{{4, {{0, 0, 0, 0}, {0, 0, 0, 2}, {0, 0, 1, 0}, {0, 0, 1, 2}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{4, {{0, 0, 0, 0}, {0, 0, 0, 1}, {0, 0, 0, 2}, {1, 0, 0, 1}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{4, {{0, 0, 0, 0}, {0, 0, 0, 1}, {0, 0, 0, 2}, {0, 0, 1, 1}}}},
|
|
// TDD Configuration Index 14
|
|
{{4, {{0, 0, 0, 0}, {0, 0, 0, 1}, {0, 0, 1, 0}, {0, 0, 1, 1}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{4, {{0, 0, 0, 0}, {0, 0, 0, 1}, {0, 0, 0, 2}, {1, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{4, {{0, 0, 0, 0}, {0, 0, 0, 2}, {0, 0, 1, 0}, {0, 0, 1, 1}}}},
|
|
// TDD Configuration Index 15
|
|
{{5, {{0, 0, 0, 0}, {0, 0, 0, 1}, {0, 0, 0, 2}, {0, 0, 1, 1}, {0, 0, 1, 2}}},
|
|
{5, {{0, 0, 0, 0}, {0, 0, 0, 1}, {0, 0, 1, 0}, {0, 0, 1, 1}, {1, 0, 0, 1}}},
|
|
{5, {{0, 0, 0, 0}, {0, 0, 1, 0}, {1, 0, 0, 0}, {1, 0, 1, 0}, {2, 0, 0, 0}}},
|
|
{5, {{0, 0, 0, 0}, {0, 0, 0, 1}, {0, 0, 0, 2}, {1, 0, 0, 1}, {1, 0, 0, 2}}},
|
|
{5, {{0, 0, 0, 0}, {0, 0, 0, 1}, {1, 0, 0, 0}, {1, 0, 0, 1}, {2, 0, 0, 1}}},
|
|
{5, {{0, 0, 0, 0}, {1, 0, 0, 0}, {2, 0, 0, 0}, {3, 0, 0, 0}, {4, 0, 0, 0}}},
|
|
{5, {{0, 0, 0, 0}, {0, 0, 0, 1}, {0, 0, 0, 2}, {0, 0, 1, 0}, {0, 0, 1, 1}}}},
|
|
// TDD Configuration Index 16
|
|
{{5, {{0, 0, 0, 1}, {0, 0, 0, 2}, {0, 0, 1, 0}, {0, 0, 1, 1}, {0, 0, 1, 2}}},
|
|
{5, {{0, 0, 0, 0}, {0, 0, 0, 1}, {0, 0, 1, 0}, {0, 0, 1, 1}, {1, 0, 1, 1}}},
|
|
{5, {{0, 0, 0, 0}, {0, 0, 1, 0}, {1, 0, 0, 0}, {1, 0, 1, 0}, {2, 0, 1, 0}}},
|
|
{5, {{0, 0, 0, 0}, {0, 0, 0, 1}, {0, 0, 0, 2}, {1, 0, 0, 0}, {1, 0, 0, 2}}},
|
|
{5, {{0, 0, 0, 0}, {0, 0, 0, 1}, {1, 0, 0, 0}, {1, 0, 0, 1}, {2, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}}},
|
|
// TDD Configuration Index 17
|
|
{{5, {{0, 0, 0, 0}, {0, 0, 0, 1}, {0, 0, 0, 2}, {0, 0, 1, 0}, {0, 0, 1, 2}}},
|
|
{5, {{0, 0, 0, 0}, {0, 0, 0, 1}, {0, 0, 1, 0}, {0, 0, 1, 1}, {1, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{5, {{0, 0, 0, 0}, {0, 0, 0, 1}, {0, 0, 0, 2}, {1, 0, 0, 0}, {1, 0, 0, 1}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}}},
|
|
// TDD Configuration Index 18
|
|
{{6, {{0, 0, 0, 0}, {0, 0, 0, 1}, {0, 0, 0, 2}, {0, 0, 1, 0}, {0, 0, 1, 1}, {0, 0, 1, 2}}},
|
|
{6, {{0, 0, 0, 0}, {0, 0, 0, 1}, {0, 0, 1, 0}, {0, 0, 1, 1}, {1, 0, 0, 1}, {1, 0, 1, 1}}},
|
|
{6, {{0, 0, 0, 0}, {0, 0, 1, 0}, {1, 0, 0, 0}, {1, 0, 1, 0}, {2, 0, 0, 0}, {2, 0, 1, 0}}},
|
|
{6, {{0, 0, 0, 0}, {0, 0, 0, 1}, {0, 0, 0, 2}, {1, 0, 0, 0}, {1, 0, 0, 1}, {1, 0, 0, 2}}},
|
|
{6, {{0, 0, 0, 0}, {0, 0, 0, 1}, {1, 0, 0, 0}, {1, 0, 0, 1}, {2, 0, 0, 0}, {2, 0, 0, 1}}},
|
|
{6, {{0, 0, 0, 0}, {1, 0, 0, 0}, {2, 0, 0, 0}, {3, 0, 0, 0}, {4, 0, 0, 0}, {5, 0, 0, 0}}},
|
|
{6, {{0, 0, 0, 0}, {0, 0, 0, 1}, {0, 0, 0, 2}, {0, 0, 1, 0}, {0, 0, 1, 1}, {1, 0, 0, 2}}}},
|
|
// TDD Configuration Index 19
|
|
{{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{6, {{0, 0, 0, 0}, {0, 0, 0, 1}, {0, 0, 1, 0}, {0, 0, 1, 1}, {1, 0, 0, 0}, {1, 0, 1, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{6, {{0, 0, 0, 0}, {0, 0, 0, 1}, {0, 0, 0, 2}, {0, 0, 1, 0}, {0, 0, 1, 1}, {1, 0, 1, 1}}}},
|
|
// TDD Configuration Index 20
|
|
{{1, {{0, 1, 0, 1}}},
|
|
{1, {{0, 1, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{1, {{0, 1, 0, 1}}},
|
|
{1, {{0, 1, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{1, {{0, 1, 0, 1}}}},
|
|
// TDD Configuration Index 21
|
|
{{1, {{0, 2, 0, 1}}},
|
|
{1, {{0, 2, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{1, {{0, 2, 0, 1}}},
|
|
{1, {{0, 2, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{1, {{0, 2, 0, 1}}}},
|
|
|
|
// TDD Configuration Index 22
|
|
{{1, {{0, 1, 1, 1}}},
|
|
{1, {{0, 1, 1, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{1, {{0, 1, 1, 0}}}},
|
|
|
|
// TDD Configuration Index 23
|
|
{{1, {{0, 0, 0, 1}}},
|
|
{1, {{0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{1, {{0, 0, 0, 1}}},
|
|
{1, {{0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{1, {{0, 0, 0, 1}}}},
|
|
|
|
// TDD Configuration Index 24
|
|
{{1, {{0, 0, 1, 1}}},
|
|
{1, {{0, 0, 1, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{1, {{0, 0, 1, 0}}}},
|
|
|
|
// TDD Configuration Index 25
|
|
{{2, {{0, 0, 0, 1}, {0, 0, 1, 1}}},
|
|
{2, {{0, 0, 0, 0}, {0, 0, 1, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{2, {{0, 0, 0, 1}, {1, 0, 0, 1}}},
|
|
{2, {{0, 0, 0, 0}, {1, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{2, {{0, 0, 0, 1}, {0, 0, 1, 0}}}},
|
|
|
|
// TDD Configuration Index 26
|
|
{{3, {{0, 0, 0, 1}, {0, 0, 1, 1}, {1, 0, 0, 1}}},
|
|
{3, {{0, 0, 0, 0}, {0, 0, 1, 0}, {1, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{3, {{0, 0, 0, 1}, {1, 0, 0, 1}, {2, 0, 0, 1}}},
|
|
{3, {{0, 0, 0, 0}, {1, 0, 0, 0}, {2, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{3, {{0, 0, 0, 1}, {0, 0, 1, 0}, {1, 0, 0, 1}}}},
|
|
|
|
// TDD Configuration Index 27
|
|
{{4, {{0, 0, 0, 1}, {0, 0, 1, 1}, {1, 0, 0, 1}, {1, 0, 1, 1}}},
|
|
{4, {{0, 0, 0, 0}, {0, 0, 1, 0}, {1, 0, 0, 0}, {1, 0, 1, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{4, {{0, 0, 0, 1}, {1, 0, 0, 1}, {2, 0, 0, 1}, {3, 0, 0, 1}}},
|
|
{4, {{0, 0, 0, 0}, {1, 0, 0, 0}, {2, 0, 0, 0}, {3, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{4, {{0, 0, 0, 1}, {0, 0, 1, 0}, {1, 0, 0, 1}, {1, 0, 1, 0}}}},
|
|
|
|
// TDD Configuration Index 28
|
|
{{5, {{0, 0, 0, 1}, {0, 0, 1, 1}, {1, 0, 0, 1}, {1, 0, 1, 1}, {2, 0, 0, 1}}},
|
|
{5, {{0, 0, 0, 0}, {0, 0, 1, 0}, {1, 0, 0, 0}, {1, 0, 1, 0}, {2, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{5, {{0, 0, 0, 1}, {1, 0, 0, 1}, {2, 0, 0, 1}, {3, 0, 0, 1}, {4, 0, 0, 1}}},
|
|
{5, {{0, 0, 0, 0}, {1, 0, 0, 0}, {2, 0, 0, 0}, {3, 0, 0, 0}, {4, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{5, {{0, 0, 0, 1}, {0, 0, 1, 0}, {1, 0, 0, 1}, {1, 0, 1, 0}, {2, 0, 0, 1}}}},
|
|
|
|
// TDD Configuration Index 29
|
|
{{6, {{0, 0, 0, 1}, {0, 0, 1, 1}, {1, 0, 0, 1}, {1, 0, 1, 1}, {2, 0, 0, 1}, {2, 0, 1, 1}}},
|
|
{6, {{0, 0, 0, 0}, {0, 0, 1, 0}, {1, 0, 0, 0}, {1, 0, 1, 0}, {2, 0, 0, 0}, {2, 0, 1, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{6, {{0, 0, 0, 1}, {1, 0, 0, 1}, {2, 0, 0, 1}, {3, 0, 0, 1}, {4, 0, 0, 1}, {5, 0, 0, 1}}},
|
|
{6, {{0, 0, 0, 0}, {1, 0, 0, 0}, {2, 0, 0, 0}, {3, 0, 0, 0}, {4, 0, 0, 0}, {5, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{6, {{0, 0, 0, 1}, {0, 0, 1, 0}, {1, 0, 0, 1}, {1, 0, 1, 0}, {2, 0, 0, 1}, {2, 0, 1, 0}}}},
|
|
|
|
// TDD Configuration Index 30
|
|
{{1, {{0, 1, 0, 1}}},
|
|
{1, {{0, 1, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{1, {{0, 1, 0, 1}}},
|
|
{1, {{0, 1, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{1, {{0, 1, 0, 1}}}},
|
|
|
|
// TDD Configuration Index 31
|
|
{{1, {{0, 2, 0, 1}}},
|
|
{1, {{0, 2, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{1, {{0, 2, 0, 1}}},
|
|
{1, {{0, 2, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{1, {{0, 2, 0, 1}}}},
|
|
|
|
// TDD Configuration Index 32
|
|
{{1, {{0, 1, 1, 1}}},
|
|
{1, {{0, 1, 1, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{1, {{0, 1, 1, 0}}}},
|
|
|
|
// TDD Configuration Index 33
|
|
{{1, {{0, 0, 0, 1}}},
|
|
{1, {{0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{1, {{0, 0, 0, 1}}},
|
|
{1, {{0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{1, {{0, 0, 0, 1}}}},
|
|
|
|
// TDD Configuration Index 34
|
|
{{1, {{0, 0, 1, 1}}},
|
|
{1, {{0, 0, 1, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{1, {{0, 0, 1, 0}}}},
|
|
|
|
// TDD Configuration Index 35
|
|
{{2, {{0, 0, 0, 1}, {0, 0, 1, 1}}},
|
|
{2, {{0, 0, 0, 0}, {0, 0, 1, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{2, {{0, 0, 0, 1}, {1, 0, 0, 1}}},
|
|
{2, {{0, 0, 0, 0}, {1, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{2, {{0, 0, 0, 1}, {0, 0, 1, 0}}}},
|
|
|
|
// TDD Configuration Index 36
|
|
{{3, {{0, 0, 0, 1}, {0, 0, 1, 1}, {1, 0, 0, 1}}},
|
|
{3, {{0, 0, 0, 0}, {0, 0, 1, 0}, {1, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{3, {{0, 0, 0, 1}, {1, 0, 0, 1}, {2, 0, 0, 1}}},
|
|
{3, {{0, 0, 0, 0}, {1, 0, 0, 0}, {2, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{3, {{0, 0, 0, 1}, {0, 0, 1, 0}, {1, 0, 0, 1}}}},
|
|
|
|
// TDD Configuration Index 37
|
|
{{4, {{0, 0, 0, 1}, {0, 0, 1, 1}, {1, 0, 0, 1}, {1, 0, 1, 1}}},
|
|
{4, {{0, 0, 0, 0}, {0, 0, 1, 0}, {1, 0, 0, 0}, {1, 0, 1, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{4, {{0, 0, 0, 1}, {1, 0, 0, 1}, {2, 0, 0, 1}, {3, 0, 0, 1}}},
|
|
{4, {{0, 0, 0, 0}, {1, 0, 0, 0}, {2, 0, 0, 0}, {3, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{4, {{0, 0, 0, 1}, {0, 0, 1, 0}, {1, 0, 0, 1}, {1, 0, 1, 0}}}},
|
|
|
|
// TDD Configuration Index 38
|
|
{{5, {{0, 0, 0, 1}, {0, 0, 1, 1}, {1, 0, 0, 1}, {1, 0, 1, 1}, {2, 0, 0, 1}}},
|
|
{5, {{0, 0, 0, 0}, {0, 0, 1, 0}, {1, 0, 0, 0}, {1, 0, 1, 0}, {2, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{5, {{0, 0, 0, 1}, {1, 0, 0, 1}, {2, 0, 0, 1}, {3, 0, 0, 1}, {4, 0, 0, 1}}},
|
|
{5, {{0, 0, 0, 0}, {1, 0, 0, 0}, {2, 0, 0, 0}, {3, 0, 0, 0}, {4, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{5, {{0, 0, 0, 1}, {0, 0, 1, 0}, {1, 0, 0, 1}, {1, 0, 1, 0}, {2, 0, 0, 1}}}},
|
|
|
|
// TDD Configuration Index 39
|
|
{{6, {{0, 0, 0, 1}, {0, 0, 1, 1}, {1, 0, 0, 1}, {1, 0, 1, 1}, {2, 0, 0, 1}, {2, 0, 1, 1}}},
|
|
{6, {{0, 0, 0, 0}, {0, 0, 1, 0}, {1, 0, 0, 0}, {1, 0, 1, 0}, {2, 0, 0, 0}, {2, 0, 1, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{6, {{0, 0, 0, 1}, {1, 0, 0, 1}, {2, 0, 0, 1}, {3, 0, 0, 1}, {4, 0, 0, 1}, {5, 0, 0, 1}}},
|
|
{6, {{0, 0, 0, 0}, {1, 0, 0, 0}, {2, 0, 0, 0}, {3, 0, 0, 0}, {4, 0, 0, 0}, {5, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{6, {{0, 0, 0, 1}, {0, 0, 1, 0}, {1, 0, 0, 1}, {1, 0, 1, 0}, {2, 0, 0, 1}, {2, 0, 1, 0}}}},
|
|
|
|
// TDD Configuration Index 40
|
|
{{1, {{0, 1, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{1, {{0, 1, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{1, {{0, 1, 0, 0}}}},
|
|
// TDD Configuration Index 41
|
|
{{1, {{0, 2, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{1, {{0, 2, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{1, {{0, 2, 0, 0}}}},
|
|
|
|
// TDD Configuration Index 42
|
|
{{1, {{0, 1, 1, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}}},
|
|
|
|
// TDD Configuration Index 43
|
|
{{1, {{0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{1, {{0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{1, {{0, 0, 0, 0}}}},
|
|
|
|
// TDD Configuration Index 44
|
|
{{1, {{0, 0, 1, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}}}},
|
|
|
|
// TDD Configuration Index 45
|
|
{{2, {{0, 0, 0, 0}, {0, 0, 1, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{2, {{0, 0, 0, 0}, {1, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{2, {{0, 0, 0, 0}, {1, 0, 0, 0}}}},
|
|
|
|
// TDD Configuration Index 46
|
|
{{3, {{0, 0, 0, 0}, {0, 0, 1, 0}, {1, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{3, {{0, 0, 0, 0}, {1, 0, 0, 0}, {2, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{3, {{0, 0, 0, 0}, {1, 0, 0, 0}, {2, 0, 0, 0}}}},
|
|
|
|
// TDD Configuration Index 47
|
|
{{4, {{0, 0, 0, 0}, {0, 0, 1, 0}, {1, 0, 0, 0}, {1, 0, 1, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{4, {{0, 0, 0, 0}, {1, 0, 0, 0}, {2, 0, 0, 0}, {3, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{0, {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}}},
|
|
{4, {{0, 0, 0, 0}, {1, 0, 0, 0}, {2, 0, 0, 0}, {3, 0, 0, 0}}}}};
|
|
|
|
uint8_t get_prach_fmt(int prach_ConfigIndex,int frame_type) {
|
|
if (frame_type == FDD) // FDD
|
|
return(prach_ConfigIndex>>4);
|
|
else {
|
|
if (prach_ConfigIndex < 20)
|
|
return (0);
|
|
|
|
if (prach_ConfigIndex < 30)
|
|
return (1);
|
|
|
|
if (prach_ConfigIndex < 40)
|
|
return (2);
|
|
|
|
if (prach_ConfigIndex < 48)
|
|
return (3);
|
|
else
|
|
return (4);
|
|
}
|
|
}
|
|
|
|
uint8_t get_prach_prb_offset(int frame_type,
|
|
int tdd_config,
|
|
int N_RB_UL,
|
|
uint8_t prach_ConfigIndex,
|
|
uint8_t n_ra_prboffset,
|
|
uint8_t tdd_mapindex, uint16_t Nf) {
|
|
uint8_t n_ra_prb;
|
|
uint8_t f_ra,t1_ra;
|
|
uint8_t prach_fmt = get_prach_fmt(prach_ConfigIndex,frame_type);
|
|
uint8_t Nsp=2;
|
|
|
|
if (frame_type == TDD) { // TDD
|
|
if (tdd_preamble_map[prach_ConfigIndex][tdd_config].num_prach==0) {
|
|
LOG_E(PHY, "Illegal prach_ConfigIndex %"PRIu8"", prach_ConfigIndex);
|
|
return(-1);
|
|
}
|
|
|
|
// adjust n_ra_prboffset for frequency multiplexing (p.36 36.211)
|
|
f_ra = tdd_preamble_map[prach_ConfigIndex][tdd_config].map[tdd_mapindex].f_ra;
|
|
|
|
if (prach_fmt < 4) {
|
|
if ((f_ra&1) == 0) {
|
|
n_ra_prb = n_ra_prboffset + 6*(f_ra>>1);
|
|
} else {
|
|
n_ra_prb = N_RB_UL - 6 - n_ra_prboffset + 6*(f_ra>>1);
|
|
}
|
|
} else {
|
|
if ((tdd_config >2) && (tdd_config<6))
|
|
Nsp = 2;
|
|
|
|
t1_ra = tdd_preamble_map[prach_ConfigIndex][tdd_config].map[0].t1_ra;
|
|
|
|
if ((((Nf&1)*(2-Nsp)+t1_ra)&1) == 0) {
|
|
n_ra_prb = 6*f_ra;
|
|
} else {
|
|
n_ra_prb = N_RB_UL - 6*(f_ra+1);
|
|
}
|
|
}
|
|
} else { //FDD
|
|
n_ra_prb = n_ra_prboffset;
|
|
}
|
|
|
|
return(n_ra_prb);
|
|
}
|
|
|
|
int is_prach_subframe0(int tdd_config,int frame_type,uint8_t prach_ConfigIndex,uint32_t frame, uint8_t subframe) {
|
|
uint8_t t0_ra;
|
|
uint8_t t1_ra;
|
|
uint8_t t2_ra;
|
|
int prach_mask = 0;
|
|
|
|
if (frame_type == FDD) { //FDD
|
|
//implement Table 5.7.1-2 from 36.211 (Rel-10, p.41)
|
|
if ((((frame&1) == 1) && (subframe < 9)) ||
|
|
(((frame&1) == 0) && (subframe == 9))) // This is an odd frame, ignore even-only PRACH frames
|
|
if (((prach_ConfigIndex&0xf)<3) || // 0,1,2,16,17,18,32,33,34,48,49,50
|
|
((prach_ConfigIndex&0x1f)==18) || // 18,50
|
|
((prach_ConfigIndex&0xf)==15)) // 15,47
|
|
return(0);
|
|
|
|
switch (prach_ConfigIndex&0x1f) {
|
|
case 0:
|
|
case 3:
|
|
if (subframe==1) prach_mask = 1;
|
|
|
|
break;
|
|
|
|
case 1:
|
|
case 4:
|
|
if (subframe==4) prach_mask = 1;
|
|
|
|
break;
|
|
|
|
case 2:
|
|
case 5:
|
|
if (subframe==7) prach_mask = 1;
|
|
|
|
break;
|
|
|
|
case 6:
|
|
if ((subframe==1) || (subframe==6)) prach_mask=1;
|
|
|
|
break;
|
|
|
|
case 7:
|
|
if ((subframe==2) || (subframe==7)) prach_mask=1;
|
|
|
|
break;
|
|
|
|
case 8:
|
|
if ((subframe==3) || (subframe==8)) prach_mask=1;
|
|
|
|
break;
|
|
|
|
case 9:
|
|
if ((subframe==1) || (subframe==4) || (subframe==7)) prach_mask=1;
|
|
|
|
break;
|
|
|
|
case 10:
|
|
if ((subframe==2) || (subframe==5) || (subframe==8)) prach_mask=1;
|
|
|
|
break;
|
|
|
|
case 11:
|
|
if ((subframe==3) || (subframe==6) || (subframe==9)) prach_mask=1;
|
|
|
|
break;
|
|
|
|
case 12:
|
|
if ((subframe&1)==0) prach_mask=1;
|
|
|
|
break;
|
|
|
|
case 13:
|
|
if ((subframe&1)==1) prach_mask=1;
|
|
|
|
break;
|
|
|
|
case 14:
|
|
prach_mask=1;
|
|
break;
|
|
|
|
case 15:
|
|
if (subframe==9) prach_mask=1;
|
|
|
|
break;
|
|
}
|
|
} else { // TDD
|
|
AssertFatal(prach_ConfigIndex<64,
|
|
"Illegal prach_ConfigIndex %d for ",prach_ConfigIndex);
|
|
AssertFatal(tdd_preamble_map[prach_ConfigIndex][tdd_config].num_prach>0,
|
|
"Illegal prach_ConfigIndex %d for ",prach_ConfigIndex);
|
|
t0_ra = tdd_preamble_map[prach_ConfigIndex][tdd_config].map[0].t0_ra;
|
|
t1_ra = tdd_preamble_map[prach_ConfigIndex][tdd_config].map[0].t1_ra;
|
|
t2_ra = tdd_preamble_map[prach_ConfigIndex][tdd_config].map[0].t2_ra;
|
|
#ifdef PRACH_DEBUG
|
|
LOG_I(PHY,"[PRACH] Checking for PRACH format (ConfigIndex %d) in TDD subframe %d (%d,%d,%d)\n",
|
|
prach_ConfigIndex,
|
|
subframe,
|
|
t0_ra,t1_ra,t2_ra);
|
|
#endif
|
|
|
|
if ((((t0_ra == 1) && ((frame &1)==0))|| // frame is even and PRACH is in even frames
|
|
((t0_ra == 2) && ((frame &1)==1))|| // frame is odd and PRACH is in odd frames
|
|
(t0_ra == 0)) && // PRACH is in all frames
|
|
(((subframe<5)&&(t1_ra==0)) || // PRACH is in 1st half-frame
|
|
(((subframe>4)&&(t1_ra==1))))) { // PRACH is in 2nd half-frame
|
|
if ((prach_ConfigIndex<48) && // PRACH only in normal UL subframe
|
|
(((subframe%5)-2)==t2_ra)) prach_mask=1;
|
|
else if ((prach_ConfigIndex>47) && (((subframe%5)-1)==t2_ra)) prach_mask=1; // PRACH can be in UpPTS
|
|
}
|
|
}
|
|
|
|
return(prach_mask);
|
|
}
|
|
|