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=LNAHselects the high-gain receive path for better signal quality. tx_gain=80is 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.
Why LimeSDR Mini 2.0?
After extensive research, the LimeSDR Mini 2.0 was chosen for its perfect balance of capability and affordability:
| Feature | Specification | Why It Matters |
|---|---|---|
| LMS7002M Transceiver | 10 MHz – 3.5 GHz | Covers all major cellular bands |
| RF Bandwidth | 40 MHz | Sufficient for LTE channel analysis |
| Sample Depth | 12 bits | Good dynamic range for signal quality |
| Sample Rate | 30.72 MSPS | Matches LTE sample rates |
| Duplex | Full-duplex | Can transmit AND receive simultaneously |
| TX/RX Channels | 1×1 (upgradeable) | Perfect for FALCON analysis |
| FPGA | Lattice ECP5 | More resources for custom processing |
| Connectors | SMA female | Standard antenna connections |
| Interface | USB 3.0 | High-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=OFFto avoid the GUI entirely. - The
qt5-defaultpackage is deprecated; useqtbase5-devinstead.
2. Boost Library Issues
- Modern Boost versions (1.83+) deprecate some headers.
- Solution: Use
-Wno-stringop-overflow -Wno-errorflags with CMake.
3. SDR Hardware Abstraction
- SoapySDR is the key to hardware independence.
- Different SDRs use different driver modules (e.g.,
soapysdr-module-rtlsdr,soapysdr-module-lms7).
4. FALCON Compatibility
- FALCON is designed for the original srsLTE, not srsRAN_4G.
- The newer srsRAN_4G changes naming conventions (
srsran_*vssrslte_*). - For FALCON, using the legacy srsLTE is recommended.
🚀 Next Steps
When the LimeSDR Mini 2.0 arrives:
- Connect and verify:bashSoapySDRUtil –find LimeUtil –update # Update firmware
- Full LTE test:bashsrsenb ~/.config/srsran/enb.conf
- Launch FALCON:bashFalconGUI
- Start capturing:
- Set center frequency to your band
- Start the decoder
- Analyze control channel data
📊 Cost Breakdown
| Component | Estimated 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
- SoapySDR Documentation
- LimeSDR Quick Start Guide
- srsRAN Documentation
- FALCON GitHub Repository
- LimeSDR Mini 2.0 Official Page
Tools Installed
| Tool | Purpose |
|---|---|
SoapySDRUtil | SDR hardware detection |
LimeUtil | LimeSDR firmware/configuration |
srsenb | LTE eNodeB implementation |
srsue | LTE User Equipment simulation |
FalconGUI | LTE 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