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
OpenXG
OpenXG UE
Commits
58145a43
Commit
58145a43
authored
Dec 24, 2020
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added missing files
parent
9d9c09dd
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
465 additions
and
0 deletions
+465
-0
common/utils/lte/prach_utils.c
common/utils/lte/prach_utils.c
+425
-0
common/utils/lte/prach_utils.h
common/utils/lte/prach_utils.h
+40
-0
No files found.
common/utils/lte/prach_utils.c
0 → 100644
View file @
58145a43
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
/*! \file common/utils/lte/prach_utils.c
* \brief utils for PRACH common to both PHY and MAC
* \author R. Knopp
* \date 2020
* \version 0.1
* \company Eurecom
* \email: knopp@eurecom.fr
* \note
* \warning
*/
#include <stdint.h>
#include "PHY/LTE_TRANSPORT/transport_common.h"
// This is table 5.7.1-4 from 36.211
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
);
}
common/utils/lte/prach_utils.h
0 → 100644
View file @
58145a43
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
/*! \file common/utils/prach_utils.h
* \brief computation of some PRACH variables used in both MAC and PHY
* \author R. Knopp
* \date 2020
* \version 0.1
* \company Eurecom
* \email: raymond.knopp@eurecom.fr, florian.kaltenberger@eurecom.fr, oscar.tonelli@yahoo.it
* \note
* \warning
*/
uint8_t
get_prach_fmt
(
int
prach_ConfigIndex
,
int
frame_type
);
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
);
int
is_prach_subframe0
(
int
tdd_config
,
int
frame_type
,
uint8_t
prach_ConfigIndex
,
uint32_t
frame
,
uint8_t
subframe
);
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