USRP(Universal Software Radio Peripheral)란?
USRP는 소프트웨어 정의 무선(SDR, Software Defined Radio) 시스템을 구성할 때 사용하는 범용 하드웨어 플랫폼이다.
즉, 기존에 하드웨어로 고정되어 있던 무선 통신 기능을 소프트웨어로 대체할 수 있도록 해주는 장치이다.
USRP는 안테나 ↔ RF(무선 주파수) ↔ 디지털 변환 ↔ 컴퓨터를 연결해주는 하드웨어 인터페이스로 동작한다.
이를 통해 PC에서 실행되는 무선 프로토콜 스택(OAI, srsrAN)이 실제 전파를 송수신할 수 있게 된다.
즉 PC에서 LTE/5G 기지국이나 UE 프로토콜을 소프트웨어로 구현하고, USRP가 그 신호를 실제 전파로 변환하여 송수신하는 역할을 수행한다.
USRP의 구성요소는 다음과 같다.
| 구성 요소 | 설명 |
| FPGA | 실시간 신호처리를 담당 (예: up/down conversion, filtering 등) |
| ADC/DAC | RF 신호 ↔ 디지털 신호 변환 |
| RF Front-End | 실제 무선 주파수 송수신 (예: 2.6GHz, 3.5GHz 등) |
| Ethernet/USB Interface | PC와의 데이터 통신용 (일반적으로 Gigabit/10GigE) |
| Clock & LO | 주파수 동기화용 (정확한 송수신을 위해 필요) |
USRP는 5G 실험 환경에서 기지국(gNB) 또는 단말(UE)의 무선 인터페이스 역할을 한다.
예를 들어, OAI(OpenAirInterface), srsRAN, UERANSIM(시뮬레이터) 등에서 gNB 소프트웨어를 실행하면,
USRP가 실제 안테나 역할을 하여 전파 송수신을 수행한다.
USRP 모델들

| 구분 | 연결 방식 | 대역폭 | 특징 |
| Ethernet형 (N시리즈) | Gigabit Ethernet | 20 ~ 100 MHz | MIMO 확장 단자 지원, 연구용 |
| PCIe형 (RIO) | PCI Express | 120 ~ 160 MHz | PC 메인보드 직접 연결, 내부 FPGA 내장 |
| USB형 (B시리즈) | USB 3.0 | 최대 56 MHz | 휴대용·저가형, 교육·실험용 |
| Embedded형 (E시리즈) | 독립형(Zynq SoC) | 56 ~ 100 MHz | PC 없이 단독 동작 가능 |
- Ethernet형(N200/N210 등)
가장 일반적인 USRP로, PC와 Gigabit Ethernet으로 연결된다.
TX/RX 안테나 포트가 하나씩 있으며, MIMO 확장 단자(MIMO Expansion Terminal) 를 통해
두 대의 USRP를 쉽게 동기화하여 MIMO 시스템을 구현할 수 있다.
- PCIe형(USRP RIO)
다른 모델과 달리 PCI Express 슬롯을 통해 PC의 메인보드와 직접 연결된다.
이 방식은 전송 속도와 대역폭이 가장 넓고 지연이 적어, 고속 DSP(디지털 신호처리) 실험이나 실시간 통신 연구에 적합하다.
내부에 2개의 TX/RX 채널과 FPGA가 내장되어 있어 병렬 신호처리 및 다중채널 동작이 가능하다.
- USB형(B200/B210)
USB 3.0을 통해 PC와 연결되며, 최대 56 MHz의 순간 대역폭을 지원한다.
가장 저렴하고 설치가 간편해 대학 교육 및 간단한 실험용으로 널리 사용된다.
모델에 따라 2채널 TX/RX 구성을 제공하기도 한다.
OAI(OpenAirInterface)에서 USRP를 연결하는 방법
USRP는 OAI gNB(RAN) 시스템의 무선 송수신 장치(SDR 하드웨어) 역할을 하며,
PC(또는 서버)에 직접 연결되어 실제 전파 송수신을 담당한다.
아래 가이드에서 USRP B210 / N300 / X300을 사용하는 방법에 대해 설명되어 있다.
https://hackmd.io/@praveeng/6GMLAB-OAI-5G-SETUP-GUIDE
OAI 5G SA setup Guide - HackMD
Steps to setup OAI 5G SA and the following checklist.
hackmd.io
일단, OAI의 gNB와 GN5G는 무선 신호처리와 패킷 전송이 실시간으로 이루어지기 때문에,
리눅스 시스템의 CPU 절전 기능이나 클럭 스케일링이 latency를 유발할 수 있다.
따라서 이를 방지하기 위해 Low Latency Kernal과 고정 주파수(performance mode)로 설정해야 한다. (링크 참고)
1. 연결 확인
- USRP를 연결한 후 ip link show 또는 dmesg 명령어로 어떤 네트워크 인터페이스에 연결되었는지 확인한다.
(예: enp2s0f0, enp3s0f1 등) - 케이블을 뽑았다 다시 꽂으면 dmesg에 “link up/down” 로그가 출력된다. 이를 통해 USRP용 인터페이스를 식별할 수 있다.
2. 네트워크 인터페이스 설정
- MTU 변경 (점보 프레임 활성화)→ 데이터 전송 효율 향상
sudo ifconfig <usrp-interface> mtu 9000
- IPv4 수동 설정
- IPv4 Method: Manual
- Address: USRP와 동일 서브넷의 IP (예: 192.168.30.15)
- Netmask: 255.255.255.0
- DNS, Routes: 자동(Default)
- IPv6 비활성화
- 인터페이스를 OFF → ON 후 연결 확인:
ping 192.168.30.2
3. UHD 설치
USRP 장치를 사용하려면 UHD(USRP Hardware Driver) 가 필수입니다.
이 드라이버는 Ettus Research에서 제공하며, OAI gNB가 USRP를 제어할 때 사용된다.
1) UHD 설치 확인
uhd_usrp_probe
- 시스템에 UHD 드라이버가 설치되어 있으면 명령이 정상 실행된다.
- 장치가 연결되어 있지 않아도 실행 자체는 가능해야 한다.
- USRP가 연결되어 있다면 모델명, 시리얼, IP 주소 등이 출력된다.
2) 설치된 UHD 버전 확인
- 6G Lab에서 사용 중인 버전: UHD_3.15.0.0-0-gaea0e2de
- 권장 버전: UHD 3.15 LTS (4.5.0.0 버전도 작동은 가능하나 실험 검증 미비)
3) UHD 미설치 시 설치 절차
- 필요 패키지 설치
sudo apt-get install autoconf automake build-essential ccache cmake cpufrequtils \
doxygen ethtool g++ git inetutils-tools libboost-all-dev libncurses5 libncurses5-dev \
libusb-1.0-0 libusb-1.0-0-dev libusb-dev python3-dev python3-mako python3-numpy \
python3-requests python3-scipy python3-setuptools python3-ruamel.yaml
- UHD 소스 빌드→ uhd_images_downloader는 USRP 하드웨어용 펌웨어 이미지 다운로드를 수행한다.
git clone https://github.com/EttusResearch/uhd.git ~/uhd
cd ~/uhd
git checkout v3.15.LTS
cd host
mkdir build && cd build
cmake ../
make -j $(nproc)
sudo make install
sudo ldconfig
sudo uhd_images_downloader
4. OAI gNB 설정에서 USRP 정보 지정
OAI의 gNB 설정 파일(.conf) 안에는 USRP 장치의 네트워크 주소 및 클록 설정이 명시되어야 한다.
예: ~/openairinterface5g/ci-scripts/conf_files/gnb.sa.band78.106prb.n310.7ds2u.conf
예시 구문 :
sdr_addrs = "addr=192.168.30.15,clock_source=internal,time_source=internal";
5. 네트워크 인터페이스 설정
- USRP는 Gigabit Ethernet을 통해 gNB-PC에 연결되어야 하며,
연결된 인터페이스(enp2s0f0, eth1 등)의 MTU를 9000으로 설정해야 한다.
sudo ifconfig <usrp-interface> mtu 9000
- IPv4를 수동 설정(Manual) 으로 지정하고, USRP와 같은 서브넷 IP를 부여한다. 예: 192.168.30.15/24
- IPv6는 비활성화해도 무방하다.
6. gNB 실행 시 USRP 인식 확인
OAI gNB 실행 명령:
cd ~/openairinterface5g
source oaienv
cd cmake_targets/ran_build/build
sudo ./nr-softmodem --sa -O ../../../ci-scripts/conf_files/gnb.sa.band78.106prb.n310.7ds2u.conf --usrp-tx-thread-config 1

실행 후 정상 로그 예시:
[USRP] Using Device: addr=192.168.30.15
[USRP] Detected USRP N310
[USRP] RX/TX channels configured
[USRP] Clock source: internal
[USRP] RF frontend initialized
이 메시지가 뜨면 OAI가 USRP를 인식하고 성공적으로 RF 송수신을 시작했다는 의미이다.
OAI에서 UE 설정하는 방법
크게 3단계로 구분된다.
| 단계 | 내용 | 핵심 목적 |
| 5.1 SIM 설정 (pySim) | SIM 카드의 IMSI, MCC, MNC, 키(Ki), OPC 설정 | 단말이 어떤 네트워크(PLMN)에 연결할지 정의 |
| 5.2 모뎀 설정 (Quectel RM500Q) | 모뎀과 SIM을 연결하고 드라이버/통신 테스트 | PC에서 모뎀을 제어 가능하게 만듦 |
| 5.3 UE → OAI 접속 (AT 명령) | AT 명령으로 OAI 네트워크에 등록 및 데이터 통신 | 실제로 OAI 5G 네트워크에 연결됨 |
1. SIM 카드 구성 (pySim)
OAI Core Network는 IMSI, Ki, OPC 등의 SIM 인증 정보를 기반으로 UE를 인증합니다.
따라서 단말의 SIM 정보가 Core의 DB(oai_db2.sql) 에 등록된 값과 일치해야 한다.
오픈소스 SIM 카드 프로그래밍 툴인 pySim과 USB SIM Reader(PC/SC 리더기)를 사용한다.
1) SIM 읽기
./pySim-read.py -p0
# 출력 예시
# ICCID: 1791198229180000071
# IMSI: 001640000000071
2) SIM 쓰기 (IMSI 변경 예시)
./pySim-prog.py -p 0 -x 230 -y 36 -t sysmoISIM-SJA2 \
-i 230360000070591 \
-o 69c9116f802195a7835abbd2ef683b74 \
-k 2166eb6a29caeecfbd94fb9c6e1458fa \
-s 8988211000000700000 \
-a 40377618
여기서 주요 파라미터는 다음의 의미를 가진다.
| 옵션 | 의미 |
| -x 230 | MCC (국가 코드, 예: 체코 = 230, 한국이라면 450) |
| -y 36 | MNC (통신사 코드) |
| -i | IMSI (UE의 고유 ID) |
| -k | Ki (인증 키) |
| -o | OPC (운영자 키) |
| -s | ICCID (카드 ID) |
| -a | ADM1 (관리자 암호) |
2. 모뎀 설정 (Quectel RM500Q-GL)
이제 설정한 SIM을 5G 모뎀에 장착하여 PC와 통신할 수 있도록 구성한다.
- Quectel RM500Q-GL 모뎀 (M.2 → USB 어댑터로 연결)
- SIM 카드 삽입
- 드라이버 설치
- Windows: Quectel 공식 드라이버 (추천)
- Linux: ModemManager 또는 qmcli 드라이버
모뎀과 통신하기 (Minicom)
sudo apt install minicom
sudo minicom -D /dev/ttyUSB2
# /dev/ttyUSB2는 AT 커맨드용 포트이다
# 실행 후 ATI 명령으로 모뎀 정보 확인
ATI
# Quectel RM500Q-GL Revision: RM500QGLABR11A06M4G
# 이때 펌웨어 버전이 RM500QGLABR11A06M4G 이상이어야 OAI 네트워크와 호환된다.
3. UE를 OAI 네트워크에 연결하기
모뎀을 통해 실제로 OAI Core Network에 접속하고, IP를 받아 네트워크 통신이 가능한지 확인하는 단계이다.
# AT 명령 순서 (Quectel 기준)
AT+CGDCONT=1,"IP","oai" # APN 설정 (OAI 기본 APN은 "oai")
AT+CGACT=1,1 # PDP 컨텍스트 활성화 (데이터 세션 시작)
AT+CGPADDR=1 # IP 주소 확인
AT+QPING=1,"openairinterface.org" # 인터넷 연결 테스트
성공 시:
- AT+CGPADDR=1 → 단말이 192.168.x.x IP를 받음
- AT+QPING → ping 성공
- gNB 로그에서도 UE attach 메시지가 표시됨 (RRC Connection Complete)
UE(단말) 관련 하드웨어 요약
| 항목 | 권장 사양 |
| OS | Windows 10 x64 (처음 설정 시 권장) |
| CPU | 4 cores x86_64 |
| RAM | 8 GB 이상 |
| 모뎀 | Quectel RM500Q (펌웨어 ≥ RM500QGLABR11A06M4G) |
| 기타 | M.2 to USB 어댑터, 안테나, SIM 카드 필요 |
Quectel-rm500q를 사용한 튜토리얼 :
Quectel-RM500Q 모듈은 5G Sub-6GHz 모듈로, 상업용/산업용 IoT-eMBB 애플리케이션을 위해 설계되었다.
이 모듈은 5G NSA(Non-Standalone) 및 SA(Standalone) 모드를 모두 지원하며, M.2 폼팩터로 설계되어 PC 또는 임베디드 시스템에 통합하기에 적합하다.
doc/NR_SA_Tutorial_COTS_UE.md · develop · oai / openairinterface5G · GitLab
Openairinterface 5G Wireless Implementation
gitlab.eurecom.fr
실제 상용 스마트폰 (COTS UE)를 사용한 튜토리얼 :
OAI Reference Architecture for 5G and 6G Research with USRP - Ettus Knowledge Base
Authors Neel Pandeya, Bharat Agarwal, Gerardo Trevino Application Note Number AN-956 Abstract This Application Note presents a reference design for using the Eurecom OpenAirInterface (OAI) software stack to implement 5G NR Stand-Alone (SA) systems on the U
kb.ettus.com
- 실제 스마트폰이 연결되는지 검증하는 것은, 연구용 OAI 네트워크가 상용 단말과 호환되는지를 확인하는 핵심 단계이다.
- 연구실 테스트베드에서 Pixel 5A 같은 폰을 붙이면, “5G Core ↔ 기지국 ↔ 상용 단말” 의 실제 E2E 데이터 플로우를 관찰할 수 있다.
- 따라서 이 시나리오는 “OAI 기반 5G SA 네트워크의 현실적 검증 환경” 으로 제시된다.
확인해야 할 점은 아래와 같다.
- Pixel 5A 가 밴드 78(Sub-6 GHz) 를 지원해야 하고, gNB 와 주파수 일치 필요.
- SIM 카드는 Open-Cells 같은 개발자용 5G SIM 이 필요하며, IMSI/키 값이 CN DB와 일치해야 함.
- USRP 기지국의 RF 출력 레벨과 폰 안전 거리 조절 필수.
- 상용폰은 루팅이 어렵기 때문에, UE 측 로그 캡처나 RRC 레이어 분석은 제한적.
추가로, 2대의 gNB 사이의 Handover (F1 Interface) Reference
doc/handover-tutorial.md · 6b3f26f538f4f3d99733ca43cef1ecb942ca857c · oai / openairinterface5G · GitLab
Openairinterface 5G Wireless Implementation
gitlab.eurecom.fr
'RAN CN 테스트베드 구축 > OAI & FlexRIC (RAN)' 카테고리의 다른 글
| OAI 5G - OAI RAN - FlexRIC Setup 방법 (0) | 2025.10.16 |
|---|---|
| Near-RT RIC 오픈소스 플랫폼인 FlexRIC의 개념과 구조 (0) | 2025.10.16 |
| Window에서 Linux 사용하기 - wsl2 (0) | 2025.10.15 |
| Lab에서 쓸 수 있는 O-RAN Testbed 정리 (OAI, srsRAN) (2) | 2025.10.15 |
| O-RAN의 개념과 특징 (0) | 2025.10.15 |