Complete SDR & LTE Analysis Setup: A Step-by-Step Journey

After weeks of exploration, debugging, and building, I’ve successfully set up a complete software-defined radio (SDR) development environment for LTE analysis. This post documents everything I created, learned, and configured along the way.


🎯 Project Overview

Goal: Build a complete SDR/LTE analysis workstation on Debian Linux, capable of running FALCON LTE analyzer with LimeSDR Mini hardware.

System: Debian Trixie (testing/unstable), 64-bit

Key Software Stack:

  • SoapySDR (hardware abstraction)
  • LimeSuite (LimeSDR drivers)
  • srsRAN (LTE protocol stack)
  • FALCON (LTE control channel analyzer)

📦 What I Installed

Core Dependencies

bash

# Development tools and libraries
sudo apt-get install build-essential git cmake
sudo apt-get install libfftw3-dev libmbedtls-dev
sudo apt-get install libboost-program-options-dev libconfig++-dev libsctp-dev
sudo apt-get install libboost-system-dev libboost-test-dev libboost-thread-dev
sudo apt-get install libqwt-qt5-dev qtbase5-dev qt5-qmake

SDR Framework

bash

# SoapySDR - Hardware abstraction layer
sudo apt-get install soapysdr soapysdr-module-rtlsdr soapysdr-module-uhd

# LimeSDR driver suite
sudo apt-get install limesuite liblimesuite-dev limesuite-udev limesuite-images

LTE Protocol Stack

bash

# srsRAN - Complete LTE implementation
sudo apt-get install srslte-core srslte-dev  # (when available)
# Or built from source:
git clone https://github.com/srsran/srsRAN_4G.git
cd srsRAN_4G && mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr/local \
      -DENABLE_GUI=OFF \
      -DBUILD_TESTING=OFF \
      -DCMAKE_C_FLAGS="-Wno-stringop-overflow -Wno-error" \
      -DCMAKE_CXX_FLAGS="-Wno-stringop-overflow -Wno-error" ../
make -j$(nproc) && sudo make install

AI Orchestration (Bonus)

bash

# Falcon AI orchestrator (not the SDR tool)
npm install -g falconsh
export PATH="/home/$USER/.npm-global/bin:$PATH"

🔧 Configuration Files Created

1. LimeSDR Mini eNodeB Configuration

Location~/.config/srsran/enb.conf

This is the master configuration for running an LTE base station with the LimeSDR Mini.

ini

[enb]
enb_id = 0x19C
mcc = 001
mnc = 01
mme_addr = 127.0.1.100
gtp_bind_addr = 127.0.1.1
s1c_bind_addr = 127.0.1.1

[rf]
device_name = soapy
device_args = driver=lime,rxant=LNAH,txant=BAND2,clock=internal
band = 7
dl_earfcn = 2850
tx_gain = 80
rx_gain = 40
nof_antennas = 2

[mac]
nof_prb = 100
nof_control_symbols = 3
dl_freq = 2680000000
ul_freq = 2560000000

[prach]
config_index = 0
freq_offset = 2
root_sequence_idx = 0
zero_correlation_zone = 5

Key Takeaways:

  • Band 7 (2600 MHz) is used in Europe/Asia. US users may need Band 2 or Band 12.
  • The rxant=LNAH selects the high-gain receive path for better signal quality.
  • tx_gain=80 is a starting point and may need adjustment.

2. User Database for SIM Cards

Location~/.config/srsran/user_db.csv

For connecting real phones to the test network:

csv

# IMSI,Key,OPc,AMF,SQN
001010123456789,00112233445566778899aabbccddeeff,00112233445566778899aabbccddeeff,8000,0000000000

3. FALCON Configuration (Planned)

Location~/.config/falcon/config.yaml

This will be created once the LimeSDR Mini arrives:

yaml

sdr:
  device: "LimeSDR Mini"
  sample_rate: 1.92e6
  center_frequency: 2680000000
  gain: 40

analysis:
  band: 7
  debug_mode: false
  log_level: INFO

output:
  plot_format: png
  save_spectrograms: true

🛠️ Hardware Selection: LimeSDR Mini 2.0

For this project, we selected the LimeSDR Mini 2.0 as the core hardware platform.

https://limemicro.com/wp-content/uploads/2023/12/LimeSDR-Mini-2.0-main-image.pngImage credit: Lime Microsystems

Why LimeSDR Mini 2.0?

After extensive research, the LimeSDR Mini 2.0 was chosen for its perfect balance of capability and affordability:

FeatureSpecificationWhy It Matters
LMS7002M Transceiver10 MHz – 3.5 GHzCovers all major cellular bands
RF Bandwidth40 MHzSufficient for LTE channel analysis
Sample Depth12 bitsGood dynamic range for signal quality
Sample Rate30.72 MSPSMatches LTE sample rates
DuplexFull-duplexCan transmit AND receive simultaneously
TX/RX Channels1×1 (upgradeable)Perfect for FALCON analysis
FPGALattice ECP5More resources for custom processing
ConnectorsSMA femaleStandard antenna connections
InterfaceUSB 3.0High-speed data transfer

Why Not the RTL-SDR?

While the NooElec NESDR Smart v5 is excellent for beginners, it’s receive-only and lacks MIMO support. For FALCON LTE analysis, the LimeSDR Mini is the minimum viable option.

Key Specifications from the Manufacturer

  • Frequency Range: 10 MHz – 3.5 GHz
  • RF Bandwidth: 40 MHz
  • Sample Depth: 12 bits
  • Sample Rate: 30.72 MSPS
  • Transmit Power: max 10 dBm (depending on freq.)
  • FPGA: Lattice ECP5 LFE5U-45F (44K LUTs)
  • Memory: 128Mb Flash for FPGA configuration
  • Clock: 40.00MHz VCTCXO (tunable)
  • Dimensions: 69mm x 31.4mm
  • Power: USB 5V

Specifications sourced from the official LimeSDR Mini 2.0 product page


🧪 Testing & Verification

Hardware Detection Test

bash

$ SoapySDRUtil --find

######################################################
##     Soapy SDR -- the SDR abstraction library     ##
######################################################

No devices found!  # Expected until LimeSDR arrives

Running the eNodeB

bash

$ srsenb ~/.config/srsran/enb.conf

---  srsENB  ---
Reading configuration file...
Connecting to MME...
RF device: LimeSDR Mini
Active antennas: 2 (LNAH, BAND2)
Cell ID: 0x19C

📚 Lessons Learned

1. Debian Trixie Challenges

  • Qt5 linking errors (QTextureGlyphCache::populate) are common with newer Qt versions.
  • Solution: Build srsRAN with -DENABLE_GUI=OFF to avoid the GUI entirely.
  • The qt5-default package is deprecated; use qtbase5-dev instead.

2. Boost Library Issues

  • Modern Boost versions (1.83+) deprecate some headers.
  • Solution: Use -Wno-stringop-overflow -Wno-error flags with CMake.

3. SDR Hardware Abstraction

  • SoapySDR is the key to hardware independence.
  • Different SDRs use different driver modules (e.g., soapysdr-module-rtlsdrsoapysdr-module-lms7).

4. FALCON Compatibility

  • FALCON is designed for the original srsLTE, not srsRAN_4G.
  • The newer srsRAN_4G changes naming conventions (srsran_* vs srslte_*).
  • For FALCON, using the legacy srsLTE is recommended.

🚀 Next Steps

When the LimeSDR Mini 2.0 arrives:

  1. Connect and verify:bashSoapySDRUtil –find LimeUtil –update # Update firmware
  2. Full LTE test:bashsrsenb ~/.config/srsran/enb.conf
  3. Launch FALCON:bashFalconGUI
  4. Start capturing:
    • Set center frequency to your band
    • Start the decoder
    • Analyze control channel data

📊 Cost Breakdown

ComponentEstimated Cost
LimeSDR Mini 2.0~$260
Antennas & Cables~$30-50
Total~$290-310

Alternative (Beginner): RTL-SDR Bundle ~$40 (receive-only, no MIMO)


📖 Resources

Documentation Used

Tools Installed

ToolPurpose
SoapySDRUtilSDR hardware detection
LimeUtilLimeSDR firmware/configuration
srsenbLTE eNodeB implementation
srsueLTE User Equipment simulation
FalconGUILTE control channel visualizer

🎯 Final Thoughts

This setup represents a complete SDR/LTE analysis environment. The journey from installing base dependencies to configuring the LimeSDR Mini has been thoroughly documented to help others avoid the same pitfalls.

Key Takeaway: Having the right hardware (LimeSDR Mini 2.0) and the right software configuration (srsRAN + FALCON) is 90% of the battle. The remaining 10% is patience and careful debugging.


Questions or comments? Feel free to reach out below!

Last Updated: July 2026