This commit includes changes to the function footprints for vaiours NR UE and gNB functions. It does not updated the LTE code. For functions shared by both LTE and 5G, we maintained the original LTE footprint and argument structure. Several of the simulators that use these functions have been updated as well. The specific usage of these functions which index into the int32_t buffers and treat the first int16_t and the real and the second as the complex should be modified in the near future.
79 lines
2.7 KiB
C
79 lines
2.7 KiB
C
/*
|
|
* 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
|
|
*/
|
|
|
|
#include "PHY/NR_TRANSPORT/nr_transport_proto.h"
|
|
|
|
//#define NR_SSS_DEBUG
|
|
|
|
int nr_generate_sss( c16_t *txdataF,
|
|
int16_t amp,
|
|
uint8_t ssb_start_symbol,
|
|
nfapi_nr_config_request_scf_t* config,
|
|
NR_DL_FRAME_PARMS *frame_parms)
|
|
{
|
|
int16_t x0[NR_SSS_LENGTH];
|
|
int16_t x1[NR_SSS_LENGTH];
|
|
const int x0_initial[7] = { 1, 0, 0, 0, 0, 0, 0 };
|
|
const int x1_initial[7] = { 1, 0, 0, 0, 0, 0, 0 };
|
|
|
|
/// Sequence generation
|
|
int Nid = config->cell_config.phy_cell_id.value;
|
|
int Nid2 = Nid % 3;
|
|
int Nid1 = (Nid - Nid2)/3;
|
|
|
|
for (int i=0; i < 7; i++) {
|
|
x0[i] = x0_initial[i];
|
|
x1[i] = x1_initial[i];
|
|
}
|
|
|
|
for (int i=0; i < NR_SSS_LENGTH - 7; i++) {
|
|
x0[i+7] = (x0[i + 4] + x0[i]) % 2;
|
|
x1[i+7] = (x1[i + 1] + x1[i]) % 2;
|
|
}
|
|
|
|
int m0 = 15*(Nid1/112) + (5*Nid2);
|
|
int m1 = Nid1 % 112;
|
|
|
|
#ifdef NR_SSS_DEBUG
|
|
write_output("d_sss.m", "d_sss", (void*)d_sss, NR_SSS_LENGTH, 1, 1);
|
|
#endif
|
|
|
|
/// Resource mapping
|
|
|
|
// SSS occupies a predefined position (subcarriers 56-182, symbol 2) within the SSB block starting from
|
|
int k = frame_parms->first_carrier_offset + frame_parms->ssb_start_subcarrier + 56; //and
|
|
int l = ssb_start_symbol + 2;
|
|
|
|
for (int i = 0; i < NR_SSS_LENGTH; i++) {
|
|
int16_t d_sss = (1 - 2*x0[(i + m0) % NR_SSS_LENGTH] ) * (1 - 2*x1[(i + m1) % NR_SSS_LENGTH] ) * 23170;
|
|
((int16_t*)txdataF)[2*(l*frame_parms->ofdm_symbol_size + k)] = (((int16_t)amp) * d_sss) >> 15;
|
|
k++;
|
|
|
|
if (k >= frame_parms->ofdm_symbol_size)
|
|
k-=frame_parms->ofdm_symbol_size;
|
|
}
|
|
#ifdef NR_SSS_DEBUG
|
|
// write_output("sss_0.m", "sss_0", (void*)txdataF[0][l*frame_parms->ofdm_symbol_size], frame_parms->ofdm_symbol_size, 1, 1);
|
|
#endif
|
|
|
|
return 0;
|
|
}
|