2015-03-03 07:50:46 +08:00
|
|
|
QSpectrumAnalyzer
|
|
|
|
=================
|
|
|
|
|
2017-02-19 18:37:30 +08:00
|
|
|
Spectrum analyzer for multiple SDR platforms (PyQtGraph based GUI for soapy_power,
|
|
|
|
rx_power, rtl_power, hackrf_sweep and other backends)
|
2015-03-03 07:50:46 +08:00
|
|
|
|
2016-05-17 08:51:19 +08:00
|
|
|
Screenshots
|
|
|
|
-----------
|
2015-03-03 08:07:00 +08:00
|
|
|
|
2015-04-24 22:26:42 +08:00
|
|
|
.. image:: https://xmikos.github.io/qspectrumanalyzer/qspectrumanalyzer_screenshot.png
|
2015-03-03 08:07:00 +08:00
|
|
|
|
2016-05-17 08:51:19 +08:00
|
|
|
.. image:: https://xmikos.github.io/qspectrumanalyzer/qspectrumanalyzer_screenshot2.png
|
|
|
|
|
2015-03-03 07:50:46 +08:00
|
|
|
Requirements
|
|
|
|
------------
|
|
|
|
|
2015-03-03 08:07:00 +08:00
|
|
|
- Python >= 3.3
|
2017-03-14 05:50:54 +08:00
|
|
|
- PyQt4 / PyQt5 / PySide / PySide2
|
|
|
|
- Qt.py (https://github.com/mottosso/Qt.py)
|
2015-03-03 07:50:46 +08:00
|
|
|
- PyQtGraph (http://www.pyqtgraph.org)
|
2017-03-11 00:39:04 +08:00
|
|
|
- soapy_power (https://github.com/xmikos/soapy_power)
|
|
|
|
- Optional: rx_tools / rtl-sdr / rtl_power_fftw / hackrf
|
2017-02-19 18:37:30 +08:00
|
|
|
|
|
|
|
Backends
|
|
|
|
--------
|
|
|
|
|
|
|
|
Universal SDR backends
|
|
|
|
**********************
|
|
|
|
|
|
|
|
- soapy_power (https://github.com/xmikos/soapy_power)
|
|
|
|
|
|
|
|
``soapy_power`` is default recommended universal backend in QSpectrumAnalyzer.
|
|
|
|
It is based on `SoapySDR <https://github.com/pothosware/SoapySDR>`_ and supports
|
|
|
|
nearly all SDR platforms (RTL-SDR, HackRF, Airspy, SDRplay, LimeSDR, bladeRF,
|
|
|
|
USRP and some other SDR devices).
|
|
|
|
|
|
|
|
- rx_power (https://github.com/rxseger/rx_tools)
|
|
|
|
|
|
|
|
``rx_power`` (part of ``rx_tools``) is also based on SoapySDR and therefore
|
|
|
|
supports nearly all SDR platforms, but it is much slower than soapy_power, doesn't support
|
2017-03-11 00:39:04 +08:00
|
|
|
near real-time continuous measurement (minimum interval is 1 second, same as ``rtl_power``)
|
2017-02-19 18:37:30 +08:00
|
|
|
and is little buggy.
|
|
|
|
|
|
|
|
RTL-SDR backends
|
|
|
|
****************
|
|
|
|
|
|
|
|
- rtl_power (https://github.com/keenerd/rtl-sdr)
|
2015-03-03 07:50:46 +08:00
|
|
|
|
2015-12-10 07:08:26 +08:00
|
|
|
You should use `Keenerds fork of rtl-sdr <https://github.com/keenerd/rtl-sdr>`_
|
2017-02-19 18:37:30 +08:00
|
|
|
(latest Git revision), because ``rtl_power`` in original rtl-sdr package (from osmocom.org)
|
2015-12-10 07:08:26 +08:00
|
|
|
is broken (especially when used with cropping).
|
|
|
|
|
2017-02-19 18:37:30 +08:00
|
|
|
- rtl_power_fftw (https://github.com/AD-Vega/rtl-power-fftw)
|
|
|
|
|
|
|
|
Another alternative for RTL-SDR is
|
2015-12-10 07:08:26 +08:00
|
|
|
`rtl_power_fftw <https://github.com/AD-Vega/rtl-power-fftw>`_ which has various
|
|
|
|
benefits over ``rtl_power``. E.g. better FFT performance (thanks to
|
|
|
|
use of ``fftw`` library) and possibility to use much shorter acquisition time
|
|
|
|
for more real-time continuous measurement (minimum interval in original
|
|
|
|
``rtl_power`` is 1 second, but in ``rtl_power_fftw`` you are only limited
|
|
|
|
by number of frequency hops).
|
2015-03-03 07:50:46 +08:00
|
|
|
|
2017-02-19 18:37:30 +08:00
|
|
|
HackRF backends
|
|
|
|
***************
|
|
|
|
|
|
|
|
- hackrf_sweep (https://github.com/mossmann/hackrf)
|
|
|
|
|
|
|
|
``hackrf_sweep`` backend enables wideband spectrum monitoring by rapidly retuning the radio
|
|
|
|
without requiring individual tuning requests from the host computer. This allows unprecedented
|
|
|
|
sweep rate of 8 GHz per second.
|
|
|
|
|
2015-03-03 07:50:46 +08:00
|
|
|
Usage
|
|
|
|
-----
|
|
|
|
|
2015-04-24 22:26:42 +08:00
|
|
|
Start QSpectrumAnalyzer by running ``qspectrumanalyzer``.
|
2015-03-04 07:15:20 +08:00
|
|
|
|
2017-02-19 18:37:30 +08:00
|
|
|
You can choose which backend you want to use in *File* -> *Settings*
|
2017-03-11 00:39:04 +08:00
|
|
|
(default is ``soapy_power``). Sample rate, path to backend executable
|
|
|
|
and additional backend parameters can be also manually specified there.
|
|
|
|
You can also set waterfall plot history size. Default is 100 lines, be aware
|
|
|
|
that really large sweeps (with a lot of bins) would require a lot of system
|
|
|
|
memory, so don't make this number too big.
|
2015-03-04 07:15:20 +08:00
|
|
|
|
|
|
|
Controls should be intuitive, but if you want consistent results, you should
|
2017-03-11 00:39:04 +08:00
|
|
|
turn off automatic gain control (set gain to some fixed number) and also set
|
2015-03-04 07:15:20 +08:00
|
|
|
crop to 20% or more. For finding out ppm correction factor for your rtl-sdr
|
2015-04-24 22:26:42 +08:00
|
|
|
stick, use `kalibrate-rtl <https://github.com/steve-m/kalibrate-rtl>`_.
|
2015-03-04 07:15:20 +08:00
|
|
|
|
|
|
|
You can move and zoom plot with mouse, change plot settings or export plots
|
|
|
|
from right-click menu. Waterfall plot black/white levels and color lookup
|
2015-12-14 09:16:30 +08:00
|
|
|
table can be changed in mini-histogram widget (on *Levels* tab).
|
2015-12-10 08:38:17 +08:00
|
|
|
|
|
|
|
Installation
|
|
|
|
------------
|
|
|
|
|
2017-02-19 18:37:30 +08:00
|
|
|
Arch Linux:
|
|
|
|
***********
|
|
|
|
|
|
|
|
Stable version:
|
2015-12-10 08:38:17 +08:00
|
|
|
::
|
|
|
|
|
|
|
|
git clone https://aur.archlinux.org/qspectrumanalyzer.git
|
|
|
|
cd qspectrumanalyzer
|
|
|
|
makepkg -sri
|
|
|
|
|
2017-02-19 18:37:30 +08:00
|
|
|
Git master branch:
|
|
|
|
::
|
|
|
|
|
|
|
|
git clone https://aur.archlinux.org/qspectrumanalyzer-git.git
|
|
|
|
cd qspectrumanalyzer-git
|
|
|
|
makepkg -sri
|
|
|
|
|
2017-03-11 00:39:04 +08:00
|
|
|
Or simply use `pacaur <https://aur.archlinux.org/packages/pacaur>`_ (or any other AUR helper)
|
|
|
|
which will also automatically install all QSpectrumAnalyzer dependencies:
|
2015-12-10 08:38:17 +08:00
|
|
|
::
|
|
|
|
|
|
|
|
pacaur -S qspectrumanalyzer
|
2017-02-19 18:37:30 +08:00
|
|
|
pacaur -S qspectrumanalyzer-git
|
2015-12-10 08:38:17 +08:00
|
|
|
|
2017-03-11 00:39:04 +08:00
|
|
|
Ubuntu:
|
|
|
|
*******
|
2015-12-10 08:38:17 +08:00
|
|
|
::
|
|
|
|
|
2017-03-11 00:39:04 +08:00
|
|
|
# Add SoapySDR PPA to your system
|
|
|
|
sudo add-apt-repository -y ppa:myriadrf/drivers
|
|
|
|
|
|
|
|
# Update list of packages
|
|
|
|
sudo apt-get update
|
|
|
|
|
|
|
|
# Install basic dependencies
|
2017-03-14 05:50:54 +08:00
|
|
|
sudo apt-get install python3-pip python3-pyqt5 python3-numpy python3-scipy soapysdr python3-soapysdr
|
2017-03-11 00:39:04 +08:00
|
|
|
|
|
|
|
# Install SoapySDR drivers for your hardware (e.g. RTL-SDR, Airspy, HackRF, LimeSDR, etc.)
|
|
|
|
sudo apt-get install soapysdr-module-rtlsdr soapysdr-module-airspy soapysdr-module-hackrf soapysdr-module-lms7
|
|
|
|
|
|
|
|
# Install QSpectrumAnalyzer
|
2015-12-10 08:38:17 +08:00
|
|
|
sudo pip3 install qspectrumanalyzer
|
|
|
|
|
|
|
|
Warning! ``pip`` will install packages system-wide by default, but you
|
|
|
|
should always use your distribution package manager for this.
|
|
|
|
|
|
|
|
You can install it locally only for your current user by running this (without ``sudo``):
|
|
|
|
::
|
|
|
|
|
|
|
|
pip3 install --user qspectrumanalyzer
|
|
|
|
|
2015-12-10 08:42:04 +08:00
|
|
|
Executables will be then placed in ``~/.local/bin`` directory, you can add it to your
|
2015-12-10 08:38:17 +08:00
|
|
|
PATH in ``~/.bashrc``.
|
|
|
|
|
2017-02-19 18:37:30 +08:00
|
|
|
If you want to install QSpectrumAnalyzer directly from Git master branch, you can use this procedure:
|
|
|
|
::
|
|
|
|
|
|
|
|
git clone https://github.com/xmikos/qspectrumanalyzer.git
|
|
|
|
cd qspectrumanalyzer
|
|
|
|
pip3 install --user .
|
|
|
|
|
2015-12-10 08:38:17 +08:00
|
|
|
Todo:
|
|
|
|
-----
|
|
|
|
|
2017-02-19 18:37:30 +08:00
|
|
|
- show scan progress
|
|
|
|
- allow setting LNB LO frequency
|
|
|
|
- save & load FFT history (allow big waterfall plot saved to file)
|
2015-12-10 08:38:17 +08:00
|
|
|
- automatic peak detection / highlighting
|
2015-12-19 04:54:39 +08:00
|
|
|
- display average noise level
|
2015-12-10 08:38:17 +08:00
|
|
|
- frequency markers / bookmarks with notes (even importing / exporting .csv file with
|
|
|
|
predefined channels, etc.)
|