- Version 20250929-0
- For macOS (Apple Silicon) and Linux
See CONTRIBUTING.md for the details.
- Please read CHANGES.md before using the software.
- Refer to doc/old-README-until-2023.md for the other miscellaneous technical details.
- airspy-fmradion is software-defined radio receiver (SDR) software with command-line interface.
- Supported SDR frontends: Airspy R2/Mini, Airspy HF+, and RTL-SDR
- Playing back from I/Q WAV files
- Monaural/stereo decoding of FM broadcasting stations
- Monaural decoding of AM stations
- Decoding NBFM/DSB/USB/LSB/CW/WSPR station audio
- Playback to soundcard through PortAudio or saving to file through libsndfile
- Command-line interface
# Portaudio output
airspy-fmradion -t airspy -q \
-c freq=82500k,srate=1000k,lgain=2,mgain=0,vgain=10 \
-P -
# 16-bit signed integer WAV output (pipe is not supported)
airspy-fmradion -t airspyhf -q \
-c freq=82500000,srate=384000 \
-W output_s16_le.wav
# 32-bit float WAV output (pipe is not supported)
airspy-fmradion -m am -t airspyhf -q \
-c freq=666k \
-G output_f32_le.wav- Linux / macOS
- C++20 (gcc, clang/llvm)
- Airspy library
- Airspy HF library
- RTL-SDR library
- libsndfile
- r8brain-free-src, a sample rate converter designed by Aleksey Vaneev of Voxengo
- VOLK
- PortAudio
- jj1bdx's fork of cmake-git-version-tracking
- {fmt}
- Official releases are tagged
- main is the "production" branch with the most stable release (often ahead of the latest release though)
- dev is the development branch that contains current developments that will be eventually released in the main branch
- Other branches are experimental (and presumably abandoned)
sudo apt-get install cmake pkg-config \
libusb-1.0-0-dev \
libasound2-dev \
libairspy-dev \
libairspyhf-dev \
librtlsdr-dev \
libsndfile1-dev \
portaudio19-dev \
libvolk2-dev- Install HomeBrew libraries as in the following shell script
- Use HEAD for
airspyandairspyhf
brew update
brew install portaudio
brew install libsndfile
brew install rtl-sdr
brew install airspy --HEAD
brew install airspyhf --HEAD
brew install volk
brew install fmt- Install libvolk as described in libvolk.md.
- Run
volk_profileand save the configuration data for speed optimization.
- You may need to install libsndfile as described in libsndfile.md.
- You need to install libfmt as described in libfmt.md.
/bin/rm -rf build
mkdir build
git submodule update --init --recursive
cmake -S . -B build
cmake --build build --target all-m devtypeis modulation type, one offm,nbfm,am,dsb,usb,lsb,cw,wspr(default fm)-t devtypeis mandatory and must beairspyfor Airspy R2 / Airspy Mini,airspyhffor Airspy HF+,rtlsdrfor RTL-SDR, andfilesourcefor the File Source driver.-qQuiet mode.-c configComma separated list of configuration options as key=value pairs or just key for switches. Depends on device type (see next paragraph).-d devidxDevice index, 'list' to show device list (default 0)-MDisable stereo decoding-R filenameWrite audio data as rawS16_LEsamples. Use filename-to write to stdout-F filenameWrite audio data as rawFLOAT_LEsamples. Use filename-to write to stdout-W filenameWrite audio data as RF64/WAVS16_LEsamples. Use filename-to write to stdout (pipe is not supported)-G filenameWrite audio data as RF64/WAVFLOAT_LEsamples. Use filename-to write to stdout (pipe is not supported)-C filenameWrite audio data to MP3 file of VBR -V 1. Use filename '-' to write to stdout. (This function is available when linked with supported libsndfile only.)-P device_numPlay audio via PortAudio device index number. Use string-to specify the default PortAudio device-T filenameWrite pulse-per-second timestamps. Use filename '-' to write to stdout-XShift pilot phase (for Quadrature Multipath Monitor) (-X is ignored under mono mode (-M))-USet deemphasis to 75 microseconds (default: 50)-fSet Filter type- for FM: wide and default: none, medium: +-156kHz, narrow: +-121kHz
- for AM: wide: +-9kHz, default: +-6kHz, medium: +-4.5kHz, narrow: +-3kHz
- for NBFM: wide: +-20kHz, default: +-10kHz, medium: +-8kHz, narrow: +-6.25kHz
-l dBEnable IF squelch, set the level to minus given value of dB-E stagesEnable multipath filter for FM (For stable reception only: turn off if reception becomes unstable)-r ppmSet IF offset in ppm (range: +-1000000ppm) (Note: this option affects output pitch and timing: use for the output timing compensation only!
- For FM:
pps_index sample_index unix_time if_level - For the other modes:
block unix_time if_level - if_level is in dB
- Output maximum level is nominally -6dB (0.5) but may increase up to 0dB (1.0)
- Output audio sample rate is fixed to 48000Hz
- A Normalized LMS-based multipath filter can be enabled after IF AGC
- IF sample stages is defined by
-Eoptions - Practical upper limit of
-Evalue: 200 - Practical
-Evalue: up to 50 for Raspberry Pi 4, approx. 100 for a modern computer
freq=<int>Desired tune frequency in Hz. Valid range from 1M to 1.8G. (default 100M:100000000)srate=<int>Device sample rate.listlists valid values and exits. (default10000000). Valid values depend on the Airspy firmware. Airspy firmware and library must support dynamic sample rate query.lgain=<x>LNA gain in dB. Valid values are:0, 1, 2, 3, 4, 5, 6, 7, 8 ,9 ,10, 11 12, 13, 14, list.listlists valid values and exits. (default8)mgain=<x>Mixer gain in dB. Valid values are:0, 1, 2, 3, 4, 5, 6, 7, 8 ,9 ,10, 11 12, 13, 14, 15, list.listlists valid values and exits. (default8)vgain=<x>VGA gain in dB. Valid values are:0, 1, 2, 3, 4, 5, 6, 7, 8 ,9 ,10, 11 12, 13, 14, 15, list.listlists valid values and exits. (default0)antbiasTurn on the antenna bias for remote LNA (default off)lagcTurn on the LNA AGC (default off)magcTurn on the mixer AGC (default off)
freq=<int>Desired tune frequency in Hz. Valid range from 0 to 31M, and from 60M to 240M. (default 100M:100000000)srate=<int>Device sample rate.listlists valid values and exits. (default384000). Valid values depend on the Airspy HF firmware. Airspy HF firmware and library must support dynamic sample rate query.hf_att=<int>HF attenuation level and AGC control.- 0: enable AGC, no attenuation
- 1 - 8: disable AGC, apply attenuation of value * 6dB
freq=<int>Desired tune frequency in Hz. Accepted range from 10M to 2.2G. (default 100M:100000000)gain=<x>(defaultauto)autoSelects gain automaticallylistLists available gains and exit<float>gain in dB. Possible gains in dB are:0.0, 0.9, 1.4, 2.7, 3.7, 7.7, 8.7, 12.5, 14.4, 15.7, 16.6, 19.7, 20.7, 22.9, 25.4, 28.0, 29.7, 32.8, 33.8 , 36.4, 37.2, 38.6, 40.2, 42.1, 43.4, 43.9, 44.5, 48.0, 49.6
srate=<int>Device sample rate. valid values in the [900001, 3200000] range. (default1152000)blklen=<int>Device block length in bytes (default RTL-SDR default i.e. 64k)agcActivates device AGC (default off)antbiasTurn on the antenna bias for remote LNA (default off)
freq=<int>Frequency of radio station in Hz.srate=<int>IF sample rate in Hz.filename=<string>Source file name. Supported encodings:FLOAT,S24_LE,S16_LEzero_offsetSet if the source file is in zero offset, which requires Fs/4 IF shifting.blklen=<int>Set block length in samples.rawSet if the file is raw binary.format=<string>Set the file format for the raw binary file. Supported formats:U8_LE,S8_LE,S16_LE,S24_LE,FLOAT
- Joris van Rantwijk, primary author of SoftFM
- Edouard Griffiths, F4EXB, primary author of NGSoftFM (no longer involving in maintaining NGSoftFM)
- Kenji Rikitake, JJ1BDX, maintainer/developer/experimenter
- András Retzler, HA7ILM, for the former AF/IF AGC code in csdr
- Youssef Touil, Airspy Founder, aka Twitter @lambdaprog, for the intriguing exchange of Airspy product design details and the technical support
- Iowa Hills Software, for their FIR and IIR filter design tools
- Brian Beezley, K6STI, for his comprehensive Web site of FM broadcasting reception expertise and the idea of Quadrature Multipath Monitor
- Ryuji Suzuki, for reviewing the FM multipath filter coefficients and suggesting putting more weight on picking up more previous samples from the reference point than the samples after
- Teruhiko Hayashi, JA2SVZ, the creator of FM FPGA Tuner popular in Japan, for reviewing the measurement results of FM broadcast reception of airspy-fmradion, and various constructive suggestions
- Takehiro Sekine, for suggesting using GNU Radio's VOLK for faster calculation, and implementing Filesource device driver
- Takeru Ohta, for his Rust implementation of Tisserand-Berviller AGC algorithm
- Cameron Desrochers, for his readerwriterqueue implementation of a single-producer-single-consumer lock-free queue for C++
- Clayton Smith, for a bugfix pull request to airspy-fmradion to find an uninitialized variable and his help during bug tracking in VOLK.
- Andrew Hardin, for cmake-git-version-tracking
- As a whole package: GPLv3 (and later). See LICENSE.
- Each source code file might state a GPLv3-compatible license.
[End of README.md]