Skip to main content

Spectrogram (80MHz bandwidth) accelerator for LimeSDR

Project description

# Spectrogram (80MHz bandwidth) accelerator for LimeSDR


# Install

```pip install spectrogram```

_**Note:** On Rasperry Pi you wanto to use pip3_

Turning on WiFi on a handset:

![alt text](https://github.com/gasparka/realtime_spectrogram/blob/master/doc/wifi.gif "Wifi")

Or turning on Bluetooth:

![alt text](https://github.com/gasparka/realtime_spectrogram/blob/master/doc/blue.gif "Bluetooth")

Block diagram:

![alt text](https://github.com/gasparka/realtime_spectrogram/blob/master/doc/diagram.bmp "Diagram")

Average-pooling reduces the noise of the spectrogram
and downsamples the USB bandwidth to 2.5MB/s, which allows remote deployment by using SoapySDR-Remote on RaspberryPi3.

**NOTE: LimeSDR-Mini needs to have a cooling solution, see below for an example.**

# Running the driver on ARM devices

Install Docker:

`curl -fsSL https://get.docker.com | sh`

For the first time, flash the FPGA (drop the ':arm' tag to run on non-ARM devices):

`docker run -it --privileged gasparka/spectrogram_driver:arm LimeUtil --fpga=LimeSDR-Mini_GW/LimeSDR-Mini_bitstreams/LimeSDR-Mini_lms7_trx_HW_1.2_auto.rpd`

You can always restore the default image by running:

`docker run -it --privileged --net=host gasparka/spectrogram_driver:arm LimeUtil --update`

Note that you need to power-cycle the Lime after the FPGA programming, this is a LimeSuite bug [#216](https://github.com/myriadrf/LimeSuite/issues/216).

Next, start the SoapySDR-Remote server:

`docker run -it --privileged --net=host gasparka/spectrogram_driver:arm`

Test that the server is discoverable on a client machine:

```
~> SoapySDRUtil --find="driver=remote"
######################################################
## Soapy SDR -- the SDR abstraction library
######################################################

Found device 0
addr = 24607:1027
driver = remote
label = LimeSDR Mini [USB 3.0] 1D40EC49F23932
media = USB 3.0
module = FT601
name = LimeSDR Mini
remote = tcp://192.168.1.136:55132
remote:driver = lime
serial = 1D40EC49F23932
```

See the [Demo Notebook](https://github.com/gasparka/realtime_spectrogram/blob/master/driver/usage_demo.ipynb)
on how to access the server, control the SDR and plot the spectrogram.

Tested on:
* ODROID-XU4
* RaspberryPi3 - Pi was powered from a USB3 port, Lime connected to USB2 port of Pi.

# Realtime GUI

Python GUI that plots the FFT frames from the remote diver in real-time.

Run (add ':arm' to run on ARM devices-slow!):

`docker run -it --net=host --env="DISPLAY" --volume="$HOME/.Xauthority:/root/.Xauthority:rw" gasparka/spectrogram_gui`

Tip: Use 'Space' to pause the stream.

# Accuracy vs floating-point model


Accelerator is implemented mostly in 18-bit fixed-point format, thus it might be interesting
to compare the accuracy against 64-bit floating-point model.

High power input signal:

![alt text](https://github.com/gasparka/realtime_spectrogram/blob/master/doc/vs_high.png)

The 'phantom' peak at -5MHz is the leakage of the peak at 15MHz.
This happens only when a high power is concentrated into one FFT bin and is due to the 9-bit twiddle
factors used in the FFT core

Low power input signal:

![alt text](https://github.com/gasparka/realtime_spectrogram/blob/master/doc/vs_low.png)

Accelerator can detect low power input signals, but the accuracy vs floating-point model
is degraded due to the input having only ~2 bits of useful information - using SDR gains improves the situation.

# Cooling the LimeSDR-mini

Using a '~2mm thermal pad' and a piece of metal:

![alt text](https://github.com/gasparka/realtime_spectrogram/blob/master/doc/IMG_9411.JPG)
![alt text](https://github.com/gasparka/realtime_spectrogram/blob/master/doc/IMG_9408.JPG)

Using small heatsinks wont cut it:
https://discourse.myriadrf.org/t/rpi3-heat-sinks-on-limesdr-mini/3523


# Sources

Gateware sources:

https://github.com/gasparka/LimeSDR-Mini_GW/tree/fpga_fft/LimeSDR-Mini_lms7_trx/src/fft

There is also a fork of LimeSuite that enables oversampling and has various hacks
related to the custom FPGA image:

https://github.com/gasparka/LimeSuite/tree/fpga_fft

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for spectrogram, version 0.0.7
Filename, size File type Python version Upload date Hashes
Filename, size spectrogram-0.0.7.tar.gz (4.5 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page