Merge remote-tracking branch 'origin/NR_PBCHSIM_changes' into integration_2024_w44 (!3040)
Update pbchsim to work with other numerologies NR PBCHSIM updated to work with 15Khz and 120Khz.
This commit is contained in:
@@ -0,0 +1,36 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
name: oai-nr-pbchsim-scs
|
||||||
|
description: A Helm subchart for nr-pbchsim network function ("Other SCS" tests)
|
||||||
|
|
||||||
|
# A chart can be either an 'application' or a 'library' chart.
|
||||||
|
#
|
||||||
|
# Application charts are a collection of templates that can be packaged into versioned archives
|
||||||
|
# to be deployed.
|
||||||
|
#
|
||||||
|
# Library charts provide useful utilities or functions for the chart developer. They're included as
|
||||||
|
# a dependency of application charts to inject those utilities and functions into the rendering
|
||||||
|
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
|
||||||
|
type: application
|
||||||
|
|
||||||
|
icon: http://www.openairinterface.org/wp-content/uploads/2015/06/cropped-oai_final_logo.png
|
||||||
|
|
||||||
|
# This is the chart version. This version number should be incremented each time you make changes
|
||||||
|
# to the chart and its templates, including the app version.
|
||||||
|
version: 0.1.1
|
||||||
|
|
||||||
|
# This is the version number of the application being deployed. This version number should be
|
||||||
|
# incremented each time you make changes to the application.
|
||||||
|
appVersion: v1
|
||||||
|
|
||||||
|
keywords:
|
||||||
|
- Physical Simulator
|
||||||
|
- nr-pbchsim
|
||||||
|
- RAN
|
||||||
|
- 5G
|
||||||
|
|
||||||
|
sources:
|
||||||
|
- https://gitlab.eurecom.fr/oai/openairinterface5g
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- name: OPENAIRINTERFACE
|
||||||
|
email: contact@openairinterface.org
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
{{/* vim: set filetype=mustache: */}}
|
||||||
|
{{/*
|
||||||
|
Expand the name of the chart.
|
||||||
|
*/}}
|
||||||
|
{{- define "oai-nr-pbchsim-scs.name" -}}
|
||||||
|
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create a default fully qualified app name.
|
||||||
|
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||||
|
If release name contains chart name it will be used as a full name.
|
||||||
|
*/}}
|
||||||
|
{{- define "oai-nr-pbchsim-scs.fullname" -}}
|
||||||
|
{{- if .Values.fullnameOverride -}}
|
||||||
|
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $name := default .Chart.Name .Values.nameOverride -}}
|
||||||
|
{{- if contains $name .Release.Name -}}
|
||||||
|
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create chart name and version as used by the chart label.
|
||||||
|
*/}}
|
||||||
|
{{- define "oai-nr-pbchsim-scs.chart" -}}
|
||||||
|
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Common labels
|
||||||
|
*/}}
|
||||||
|
{{- define "oai-nr-pbchsim-scs.labels" -}}
|
||||||
|
helm.sh/chart: {{ include "oai-nr-pbchsim-scs.chart" . }}
|
||||||
|
{{ include "oai-nr-pbchsim-scs.selectorLabels" . }}
|
||||||
|
{{- if .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
||||||
|
{{- end }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Selector labels
|
||||||
|
*/}}
|
||||||
|
{{- define "oai-nr-pbchsim-scs.selectorLabels" -}}
|
||||||
|
app.kubernetes.io/name: {{ include "oai-nr-pbchsim-scs.name" . }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create the name of the service account to use
|
||||||
|
*/}}
|
||||||
|
{{- define "oai-nr-pbchsim-scs.serviceAccountName" -}}
|
||||||
|
{{- if .Values.serviceAccount.create -}}
|
||||||
|
{{ default (include "oai-nr-pbchsim-scs.fullname" .) .Values.serviceAccount.name }}
|
||||||
|
{{- else -}}
|
||||||
|
{{ default "default" .Values.serviceAccount.name }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
apiVersion: batch/v1
|
||||||
|
kind: Job
|
||||||
|
metadata:
|
||||||
|
name: {{ .Chart.Name }}
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: physim
|
||||||
|
spec:
|
||||||
|
securityContext:
|
||||||
|
{{- toYaml .Values.podSecurityContext | nindent 8 }}
|
||||||
|
{{- if .Values.imagePullSecrets }}
|
||||||
|
imagePullSecrets:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
containers:
|
||||||
|
- name: physim
|
||||||
|
image: "{{ .Values.global.image.repository }}:{{ .Values.global.image.version }}"
|
||||||
|
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||||
|
securityContext:
|
||||||
|
{{- toYaml .Values.securityContext | nindent 12 }}
|
||||||
|
env:
|
||||||
|
- name: OPENAIR_DIR
|
||||||
|
value: /opt/oai-physim
|
||||||
|
command: ["/bin/sh", "-c"]
|
||||||
|
args:
|
||||||
|
- >
|
||||||
|
cmake_targets/autotests/run_exec_autotests.bash -g "nr_pbchsim.otherSCS" -d bin/ &&
|
||||||
|
echo "FINISHED" && sleep infinity
|
||||||
|
dnsPolicy: ClusterFirst
|
||||||
|
restartPolicy: Never
|
||||||
|
schedulerName: default-scheduler
|
||||||
|
serviceAccountName: {{ .Values.global.serviceAccountName }}
|
||||||
|
terminationGracePeriodSeconds: 30
|
||||||
|
{{- if .Values.global.nodeSelector}}
|
||||||
|
nodeSelector:
|
||||||
|
{{- toYaml .Values.global.nodeSelector | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.global.nodeName.nrpbchsim273rb}}
|
||||||
|
nodeName: {{ .Values.global.nodeName.nrpbchsim273rb }}
|
||||||
|
{{- end }}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
# Default values for oai-nr-pbchsim-scs
|
||||||
|
# This is a YAML-formatted file.
|
||||||
|
# Declare variables to be passed into your templates.
|
||||||
|
|
||||||
|
replicaCount: 1
|
||||||
|
|
||||||
|
image:
|
||||||
|
# pullPolicy: IfNotPresent or Never or Always
|
||||||
|
pullPolicy: Always
|
||||||
|
|
||||||
|
imagePullSecrets: []
|
||||||
|
|
||||||
|
nameOverride: ""
|
||||||
|
fullnameOverride: ""
|
||||||
|
|
||||||
|
serviceAccount:
|
||||||
|
# Specifies whether a service account should be created
|
||||||
|
create: true
|
||||||
|
# Annotations to add to the service account
|
||||||
|
annotations: {}
|
||||||
|
# The name of the service account to use.
|
||||||
|
# If not set and create is true, a name is generated using the fullname template
|
||||||
|
name: "oai-nr-pbchsim-scs"
|
||||||
|
|
||||||
|
podSecurityContext:
|
||||||
|
runAsUser: 0
|
||||||
|
runAsGroup: 0
|
||||||
|
|
||||||
|
securityContext:
|
||||||
|
privileged: false
|
||||||
|
|
||||||
|
resources: {}
|
||||||
|
# We usually recommend not to specify default resources and to leave this as a conscious
|
||||||
|
# choice for the user. This also increases chances charts run on environments with little
|
||||||
|
# resources, such as Minikube. If you do want to specify resources, uncomment the following
|
||||||
|
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
|
||||||
|
# limits:
|
||||||
|
# cpu: 100m
|
||||||
|
# memory: 128Mi
|
||||||
|
# requests:
|
||||||
|
# cpu: 100m
|
||||||
|
# memory: 128Mi
|
||||||
|
|
||||||
|
nodeSelector: {}
|
||||||
|
|
||||||
|
tolerations: []
|
||||||
|
|
||||||
|
affinity: {}
|
||||||
@@ -27,6 +27,7 @@ global:
|
|||||||
nrpbschsim106rb: dedale
|
nrpbschsim106rb: dedale
|
||||||
nrpbchsim217rb: dedale
|
nrpbchsim217rb: dedale
|
||||||
nrpbchsim273rb: dedale
|
nrpbchsim273rb: dedale
|
||||||
|
nrpbchsimscs: dedale
|
||||||
nrpsbchsim: dedale
|
nrpsbchsim: dedale
|
||||||
nrprachsim: dedale
|
nrprachsim: dedale
|
||||||
nrpucchsim: dedale
|
nrpucchsim: dedale
|
||||||
|
|||||||
@@ -163,7 +163,7 @@ class PhySim:
|
|||||||
mySSH.command('oc get pods -o wide -l app=physim | tee -a cmake_targets/log/physim_pods_summary.txt', '\$', 30, resync=True)
|
mySSH.command('oc get pods -o wide -l app=physim | tee -a cmake_targets/log/physim_pods_summary.txt', '\$', 30, resync=True)
|
||||||
running_count = mySSH.getBefore().count('Running')
|
running_count = mySSH.getBefore().count('Running')
|
||||||
completed_count = mySSH.getBefore().count('Completed')
|
completed_count = mySSH.getBefore().count('Completed')
|
||||||
if (running_count + completed_count) == 22:
|
if (running_count + completed_count) == 23:
|
||||||
logging.debug('\u001B[1m Running the physim test Scenarios\u001B[0m')
|
logging.debug('\u001B[1m Running the physim test Scenarios\u001B[0m')
|
||||||
isRunning = True
|
isRunning = True
|
||||||
podNames = re.findall('oai-[\S\d\w]+', mySSH.getBefore())
|
podNames = re.findall('oai-[\S\d\w]+', mySSH.getBefore())
|
||||||
|
|||||||
@@ -149,6 +149,18 @@
|
|||||||
<nruns>3</nruns>
|
<nruns>3</nruns>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="nr_pbchsim.otherSCS">
|
||||||
|
<desc>nr_pbchsim Test cases. (Test1: PBCH-only, 15Khz, 5Mhz),
|
||||||
|
(Test2: PBCH-only, 120Khz, 50Mhz)</desc>
|
||||||
|
<main_exec>nr_pbchsim</main_exec>
|
||||||
|
<main_exec_args>-s-10 -S-8 -n10 -m0 -R25
|
||||||
|
-s-10 -S-8 -n10 -m3 -R32</main_exec_args>
|
||||||
|
<tags>test1 test2</tags>
|
||||||
|
<search_expr_true>PBCH test OK</search_expr_true>
|
||||||
|
<search_expr_false>segmentation fault|assertion|exiting|fatal</search_expr_false>
|
||||||
|
<nruns>3</nruns>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
<testCase id="nr_dlsim.basic">
|
<testCase id="nr_dlsim.basic">
|
||||||
<desc>nr_dlsim Test cases. (Test1: 106 PRB),
|
<desc>nr_dlsim Test cases. (Test1: 106 PRB),
|
||||||
(Test2: 217 PRB),
|
(Test2: 217 PRB),
|
||||||
|
|||||||
@@ -125,55 +125,6 @@ int nr_ue_pdcch_procedures(PHY_VARS_NR_UE *ue,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void nr_phy_config_request_sim_pbchsim(PHY_VARS_gNB *gNB,
|
|
||||||
int N_RB_DL,
|
|
||||||
int N_RB_UL,
|
|
||||||
int mu,
|
|
||||||
int Nid_cell,
|
|
||||||
uint64_t position_in_burst)
|
|
||||||
{
|
|
||||||
NR_DL_FRAME_PARMS *fp = &gNB->frame_parms;
|
|
||||||
nfapi_nr_config_request_scf_t *gNB_config = &gNB->gNB_config;
|
|
||||||
//overwrite for new NR parameters
|
|
||||||
|
|
||||||
uint64_t rev_burst=0;
|
|
||||||
for (int i=0; i<64; i++)
|
|
||||||
rev_burst |= (((position_in_burst>>(63-i))&0x01)<<i);
|
|
||||||
|
|
||||||
gNB_config->cell_config.phy_cell_id.value = Nid_cell;
|
|
||||||
gNB_config->ssb_config.scs_common.value = mu;
|
|
||||||
gNB_config->ssb_table.ssb_subcarrier_offset.value = 0;
|
|
||||||
gNB_config->ssb_table.ssb_offset_point_a.value = (N_RB_DL-20)>>1;
|
|
||||||
gNB_config->ssb_table.ssb_mask_list[1].ssb_mask.value = (rev_burst)&(0xFFFFFFFF);
|
|
||||||
gNB_config->ssb_table.ssb_mask_list[0].ssb_mask.value = (rev_burst>>32)&(0xFFFFFFFF);
|
|
||||||
gNB_config->cell_config.frame_duplex_type.value = TDD;
|
|
||||||
gNB_config->ssb_table.ssb_period.value = 1; //10ms
|
|
||||||
gNB_config->carrier_config.dl_grid_size[mu].value = N_RB_DL;
|
|
||||||
gNB_config->carrier_config.ul_grid_size[mu].value = N_RB_UL;
|
|
||||||
gNB_config->carrier_config.num_tx_ant.value = fp->nb_antennas_tx;
|
|
||||||
gNB_config->carrier_config.num_rx_ant.value = fp->nb_antennas_rx;
|
|
||||||
|
|
||||||
gNB_config->tdd_table.tdd_period.value = 0;
|
|
||||||
//gNB_config->subframe_config.dl_cyclic_prefix_type.value = (fp->Ncp == NORMAL) ? NFAPI_CP_NORMAL : NFAPI_CP_EXTENDED;
|
|
||||||
|
|
||||||
fp->dl_CarrierFreq = 3600000000;//from_nrarfcn(gNB_config->nfapi_config.rf_bands.rf_band[0],gNB_config->nfapi_config.nrarfcn.value);
|
|
||||||
fp->ul_CarrierFreq = 3600000000;//fp->dl_CarrierFreq - (get_uldl_offset(gNB_config->nfapi_config.rf_bands.rf_band[0])*100000);
|
|
||||||
if (mu>2) fp->nr_band = 257;
|
|
||||||
else fp->nr_band = 78;
|
|
||||||
fp->threequarter_fs= 0;
|
|
||||||
frequency_range_t frequency_range = fp->nr_band > 256 ? FR2 : FR1;
|
|
||||||
int bw_index = get_supported_band_index(mu, frequency_range, N_RB_DL);
|
|
||||||
gNB_config->carrier_config.dl_bandwidth.value = get_supported_bw_mhz(frequency_range, bw_index);
|
|
||||||
|
|
||||||
fp->ofdm_offset_divisor = UINT_MAX;
|
|
||||||
nr_init_frame_parms(gNB_config, fp);
|
|
||||||
init_timeshift_rotation(fp);
|
|
||||||
|
|
||||||
init_symbol_rotation(fp);
|
|
||||||
|
|
||||||
gNB->configured = 1;
|
|
||||||
LOG_I(PHY,"gNB configured\n");
|
|
||||||
}
|
|
||||||
configmodule_interface_t *uniqCfg = NULL;
|
configmodule_interface_t *uniqCfg = NULL;
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
@@ -499,9 +450,14 @@ int main(int argc, char **argv)
|
|||||||
frame_parms->ssb_type = nr_ssb_type_C;
|
frame_parms->ssb_type = nr_ssb_type_C;
|
||||||
frame_parms->freq_range = mu<2 ? FR1 : FR2;
|
frame_parms->freq_range = mu<2 ? FR1 : FR2;
|
||||||
|
|
||||||
nr_phy_config_request_sim_pbchsim(gNB,N_RB_DL,N_RB_DL,mu,Nid_cell,SSB_positions);
|
nr_phy_config_request_sim(gNB, N_RB_DL, N_RB_DL, mu, Nid_cell, SSB_positions);
|
||||||
gNB->gNB_config.tdd_table.tdd_period.value = 6;
|
gNB->gNB_config.tdd_table.tdd_period.value = 6;
|
||||||
set_tdd_config_nr(&gNB->gNB_config, mu, 7, 6, 2, 4);
|
if (mu == 0)
|
||||||
|
set_tdd_config_nr(&gNB->gNB_config, mu, 3, 6, 1, 4);
|
||||||
|
else if (mu == 1)
|
||||||
|
set_tdd_config_nr(&gNB->gNB_config, mu, 7, 6, 2, 4);
|
||||||
|
else if (mu == 3)
|
||||||
|
set_tdd_config_nr(&gNB->gNB_config, mu, 27, 6, 12, 4);
|
||||||
phy_init_nr_gNB(gNB);
|
phy_init_nr_gNB(gNB);
|
||||||
frame_parms->ssb_start_subcarrier = 12 * gNB->gNB_config.ssb_table.ssb_offset_point_a.value + ssb_subcarrier_offset;
|
frame_parms->ssb_start_subcarrier = 12 * gNB->gNB_config.ssb_table.ssb_offset_point_a.value + ssb_subcarrier_offset;
|
||||||
initFloatingCoresTpool(ssb_scan_threads, &nrUE_params.Tpool, false, "UE-tpool");
|
initFloatingCoresTpool(ssb_scan_threads, &nrUE_params.Tpool, false, "UE-tpool");
|
||||||
@@ -511,40 +467,10 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
double fs=0, eps;
|
double fs=0, eps;
|
||||||
double scs = 30000;
|
double scs = 30000;
|
||||||
double bw = 100e6;
|
double txbw, rxbw;
|
||||||
|
uint32_t samples;
|
||||||
switch (mu) {
|
|
||||||
case 1:
|
get_samplerate_and_bw(mu, N_RB_DL, frame_parms->threequarter_fs, &fs, &samples, &txbw, &rxbw);
|
||||||
scs = 30000;
|
|
||||||
frame_parms->Lmax = 8;
|
|
||||||
if (N_RB_DL == 217) {
|
|
||||||
fs = 122.88e6;
|
|
||||||
bw = 80e6;
|
|
||||||
}
|
|
||||||
else if (N_RB_DL == 245) {
|
|
||||||
fs = 122.88e6;
|
|
||||||
bw = 90e6;
|
|
||||||
}
|
|
||||||
else if (N_RB_DL == 273) {
|
|
||||||
fs = 122.88e6;
|
|
||||||
bw = 100e6;
|
|
||||||
}
|
|
||||||
else if (N_RB_DL == 106) {
|
|
||||||
fs = 61.44e6;
|
|
||||||
bw = 40e6;
|
|
||||||
}
|
|
||||||
else AssertFatal(1==0,"Unsupported numerology for mu %d, N_RB %d\n",mu, N_RB_DL);
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
frame_parms->Lmax = 64;
|
|
||||||
scs = 120000;
|
|
||||||
if (N_RB_DL == 66) {
|
|
||||||
fs = 122.88e6;
|
|
||||||
bw = 100e6;
|
|
||||||
}
|
|
||||||
else AssertFatal(1==0,"Unsupported numerology for mu %d, N_RB %d\n",mu, N_RB_DL);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// cfo with respect to sub-carrier spacing
|
// cfo with respect to sub-carrier spacing
|
||||||
eps = cfo/scs;
|
eps = cfo/scs;
|
||||||
@@ -560,19 +486,7 @@ int main(int argc, char **argv)
|
|||||||
printf("FFO = %lf; IFO = %d\n",eps-IFO,IFO);
|
printf("FFO = %lf; IFO = %d\n",eps-IFO,IFO);
|
||||||
}
|
}
|
||||||
|
|
||||||
gNB2UE = new_channel_desc_scm(n_tx,
|
gNB2UE = new_channel_desc_scm(n_tx, n_rx, channel_model, fs, 0, txbw, 300e-9, 0.0, CORR_LEVEL_LOW, 0, 0, 0, 0);
|
||||||
n_rx,
|
|
||||||
channel_model,
|
|
||||||
fs,
|
|
||||||
0,
|
|
||||||
bw,
|
|
||||||
300e-9,
|
|
||||||
0.0,
|
|
||||||
CORR_LEVEL_LOW,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0);
|
|
||||||
|
|
||||||
if (gNB2UE==NULL) {
|
if (gNB2UE==NULL) {
|
||||||
printf("Problem generating channel model. Exiting.\n");
|
printf("Problem generating channel model. Exiting.\n");
|
||||||
|
|||||||
Reference in New Issue
Block a user