Studio

1. RF cabling

  • The diagram shows how to cable the gNB, the channel emulator, and the UE emulator.
  • Connect gNB TX1 to emulator RX1, and emulator TX1 to UE RX1.
  • Connect UE TX1 to emulator RX3, and emulator TX3 to gNB TX1.

2. Commercial stack test

2.1 Start the channel emulator first

  1. Copy the Amarisoft GEO, MEO, and LEO profiles into the config directory.
  1. Open the NTN channel emulator at http://127.0.0.1:4678/open5g/ntn_monitor/.
  2. Open Parameters and set the uplink and downlink frequency, bandwidth, and antenna count so they match the gNB.
  1. Open Dashboard → Start simulation and choose the channel to run.
  1. After startup, SAT-TEST-99999.tle is created in the directory below. Copy it to the gNB computer, for example under ~/sdr/channel_amarisoft/.
cd /home/sdr/sdr/Open5G/channel_simulator-linux-2026-06-30/

Run only the command for the orbit you actually started. The IP address is the gNB computer.

scp SAT-TEST-99999.tle sdr@192.168.0.25:/home/sdr/sdr/channel_amarisoft/leo/
scp SAT-TEST-99999.tle sdr@192.168.0.25:/home/sdr/sdr/channel_amarisoft/meo/
scp SAT-TEST-99999.tle sdr@192.168.0.25:/home/sdr/sdr/channel_amarisoft/geo/

2.2 Start the stack

  1. Edit the gNB configuration.
cd ~/sdr/2026-06-12/lteenb-linux-2026-06-12/
vim config/oai-chan-gnb-sa-ntn.cfg

Point it at the TLE file copied from the channel emulator for the GEO, MEO, or LEO orbit you are using.

Set the gNB orbit to the same orbit the emulator is running, and turn off the gNB's own orbit simulation.

  1. Start the core and IMS. Enter the core directory.
cd ~/sdr/2026-06-12/ltemme-linux-2026-06-12/

Start the core:

sudo ./lte_init.sh
sudo ./ltemme config/mme-ims.cfg

Open a second window in the same directory and start IMS:

cd ~/sdr/2026-06-12/ltemme-linux-2026-06-12/
sudo ./lteims config/ims.cfg
  1. Start the gNB. Enter its directory and review the configuration.
cd ~/sdr/2026-06-12/lteenb-linux-2026-06-12/
vim config/oai-chan-gnb-sa-ntn.cfg

Start the file you just edited:

cd ~/sdr/2026-06-12/lteenb-linux-2026-06-12/
sudo ./lteenb config/oai-chan-gnb-sa-ntn.cfg
  1. Use the Web GUI to check the NTN satellite. On the gNB computer, open http://127.0.0.1/lte/, add a server at 127.0.0.1 port 9001, then open the NTN tab and confirm the satellite position matches the channel emulator.

2.3 Start the UE emulator

On the UE host, enter the UE directory and review the configuration.

cd ~/sdr/2026-06-12/lteue-linux-2026-06-12/
vim config/oai-chan-ue-nr-ntn.cfg

Start the UE emulator.

cd ~/sdr/2026-06-12/lteue-linux-2026-06-12
sudo ./lteue config/oai-chan-ue-nr-ntn.cfg

After it is running, type power on to attach. Open http://127.0.0.1/lte/, add a server at 127.0.0.1 port 9002, and watch the attach. The best window is when the emulated elevation is above 20°. Use power on and power off to retry.

2.4 Attach result

3. Open-source OAI NTN test

3.1 Lab layout

Use the same RF cabling as section 1.

Network: connect the orbit-simulation host and the gNB host with Ethernet and put them on the same subnet, for example 192.168.0.42/24 and 192.168.0.25/24.

Start the orbit simulation first, then the protocol stack.

3.2 Configure and start orbit simulation

  1. Copy the two OAI orbit profiles into the config directory.
  1. Open http://127.0.0.1:4678/open5g/ntn_monitor/.
  1. Open Parameters and set the values.
  1. On the dashboard, click Start simulation, choose the orbit profile, and confirm.

3.3 Start the stack

From the Web UI

  1. Open https://127.0.0.1/open5g/ and sign in as admin / 123456.
  2. Open Open5GS core → Metrics and click Start.
  1. Open OAI gNB → Metrics, click Start, choose the configuration, and start the gNB.

Keep the green values in the next screenshot aligned with the UE. -C 2495690000 is the downlink frequency. The uplink frequency derived from --CO 873500000 must match the orbit simulation. The bandwidth derived from -r 106 and --numerology 0 must match the sample rate used by the orbit simulation.

From the shell

  1. Enter the core directory.
cd ~/sdr/Open5G/5gc/open5gs_docker_v2.6.5/
  1. Start the core.
sudo docker compose -f open5g_studio.yaml up -d
  1. Enter the gNB directory.
cd ~/sdr/Open5G/oai/openairinterface5g-2026-w21/cmake_targets/
  1. Start the gNB with the same NTN orbit the simulator is running.

GEO:

sudo ./ran_build/build/nr-softmodem -O ../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band254.u0.106prb.yunsdr.ntn-geo.conf

LEO:

sudo ./ran_build/build/nr-softmodem -O ../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band256.u0.106prb.yunsdr.ntn-leo.conf

3.4 Start the UE emulator

  1. Enter the UE build directory.
cd ~/sdr/Open5G/oai/openairinterface5g-2026-w21/cmake_targets/
  1. Start the UE emulator.

GEO:

sudo ./ran_build/build/nr-uesoftmodem -O ../targets/PROJECTS/GENERIC-NR-5GC/CONF/ntn-ue.conf --band 254 -C 2495690000 --CO -873500000 -r 106 --numerology 0 --ssb 60 --usrp-args "dev=pcies:0.0,auxdac1=1660" --ue-fo-compensation --ue-rxgain 50

LEO:

sudo ./ran_build/build/nr-uesoftmodem -O ../targets/PROJECTS/GENERIC-NR-5GC/CONF/ntn-ue.conf --usrp-args "dev=pcies:0.0,auxdac1=1660" --band 256 -C 2185000000 --CO -190000000 -r 106 --numerology 0 --ssb 146 --time-sync-I 0.1 --ntn-initial-time-drift -46 --cont-fo-comp 2 --ue-fo-compensation --autonomous-ta --ue-rxgain 50 --initial-fo 50000

For LEO, set --initial-fo 50000 from the Doppler shown by the orbit simulator before you start. If Doppler is 51.32, use 51000. A small error is acceptable.

UE emulator configuration:

The UE coordinates in the orbit simulator must match the UE configuration.

3.5 Result

4. Change coordinates

4.1 gNB coordinates

Orbit simulator

  1. Open http://127.0.0.1:4678/open5g/ntn_monitor/.
  2. Open Parameters, select the profile, and edit the gNB coordinates.

Amarisoft gNB

  1. Enter the gNB config directory.
cd ~/sdr/2026-06-12/lteenb-linux-2026-06-12/config/
  1. Edit the coordinates so they match the orbit simulator.
vim oai-chan-gnb-sa-ntn.cfg

OAI gNB

  1. LEO needs no coordinate change in the current mode.
  2. GEO does. Enter the gNB config directory.
cd ~/sdr/Open5G/oai/openairinterface5g-2026-w21/targets/PROJECTS/GENERIC-NR-5GC/CONF/
  1. Edit the GEO profile and convert the position to xyz.
vim gnb.sa.band254.u0.106prb.yunsdr.ntn-geo.conf
  1. Also update ta-common-r17. Start the GEO channel simulation and read the uplink and downlink delay.

Compute delay / 4.072 * 1000000. The parameter step is 4.072 / 1000 microseconds, and the stored value is in milliseconds. For example, 250 / 4.072 * 1000000 = 61394891.

  1. Also set CellSpecificKoffset_r17. For 15 kHz subcarrier spacing the unit is slots. A one-way delay of 250 ms is a 500 ms round trip, so Koffset = RTT(ms) = 500. Leave 2 to 5 extra slots of margin.

4.2 UE coordinates

Orbit simulator

  1. Open http://127.0.0.1:4678/open5g/ntn_monitor/.
  2. Open Parameters, select the profile, and edit the UE coordinates.

Amarisoft UE

  1. Enter the UE config directory.
cd ~/sdr/2026-06-12/lteue-linux-2026-06-12/config/
  1. Edit the UE profile so the coordinates match the orbit simulator.
vim oai-chan-ue-nr-ntn.cfg

OAI UE emulator

  1. Enter the UE config directory.
cd ~/sdr/Open5G/oai/openairinterface5g-2026-w21/targets/PROJECTS/GENERIC-NR-5GC/CONF/
  1. Edit the UE profile. Change the xyz values so the converted latitude and longitude match the orbit simulator.
vim ntn-ue.conf

5. Notes

  1. Always start the orbit simulator before the protocol stack.
  2. For the commercial stack, copy the generated TLE to the gNB and point the gNB at that file before you start it. Copy it again after every restart.
  3. The orbit selected in the simulator must match the gNB.
  4. The orbit-simulator computer currently supports only the 7400 PCIES Split.
  5. The RF cables must match the diagram, or the signal will not be received.
  6. Transmit and receive frequencies on all three parts must match. Confirm them with the method above.
  7. If the orbit simulator uses a TLE file, give it an absolute path, not a relative path.
  8. Open-source OAI does not need the ephemeris file, but the simulator still broadcasts UDP to the gNB. Connect the two computers with Ethernet and put them on the same subnet.
  9. Keep the system clocks of the three computers synchronized, either through a public network or by syncing them to each other.

6. Synchronize clocks on the LAN

6.1 chronyd

sudo apt-get install chrony

Server

sudo vim /etc/chronyd/chronyd.conf

Disable the original time sources and append:

allow 192.168.1.0/24
local stratum 10

Restart chronyd:

sudo systemctl restart chronyd
sudo systemctl status chronyd

Client

sudo vim /etc/chrony/chrony.conf

Disable the original time sources and add:

server 192.168.0.42 iburst

Restart chronyd:

sudo systemctl restart chronyd
sudo systemctl status chronyd

6.2 ptp4l

Give the three computers 192.168.0.42/24, 192.168.0.25/24, and 192.168.0.58/24. Connect them to the same switch so they can reach each other.

  1. Install linuxptp and ethtool on all three.
sudo apt install linuxptp ethtool
  1. Use one computer as the master. On 192.168.0.42/24, start the master clock. enp95 is the interface that reaches the other two. Check it with ip a.
sudo ptp4l -i enp95 -m -H -2
  1. Start the slave service on the other two. On 192.168.0.25/24 and 192.168.0.58/24, enp89s0 is the interface that reaches the master. Check it with ip a.
sudo ptp4l -i enp89s0 -m -H -s -2

If hardware timestamping is not available, use software sync:

ptp4l -i enp89s0 -m -S -s -2
sudo phc2sys -s enp89s0 -c CLOCK_REALTIME -w -m

Software sync is at nanosecond scale, but it needs about 1 to 2 minutes. Leave the terminal open.

7. Problems

7.1 The orbit simulator fails to start

  1. Error: [HW] DOWNLINK read samples failed.

One cause is that sync and clock in the configuration did not lock. Without an external source or GPS, set both to internal.

  1. Error: No TLEs read from <path>/iss.tle.

iss.tle was not found. Check the path. It must be absolute.

  1. Error: Model rfsimu_channel_uplink_tdl not found.

Check whether the configuration file references that model. If it does not, ignore the error and the simulator should still run. If it does, check the model name.