Skip to content

Audio-DSP-Lab 1.5 — the SDR receiver

Choose a tag to compare

@andiepp andiepp released this 10 Nov 17:29
· 8 commits to main since this release

Audio-DSP-Lab 1.5 adds a seventh application: an SDR receiver backend from the IF on. A front end of your own delivers a real IF or I and Q to the line input K2; the ESP32 tunes, filters, runs the AGC and S-meter, demodulates AM, USB, LSB, CW or FM, reduces the noise and mutes with the squelch. The manual's chapter "The receiver" gives what the backend expects at K2 (full scale, noise floor, sensitivity, frequencies) so that a front end can be designed to it.

Downloads

  • Audio-DSP-Lab-1.5-windows-x64.zip: the Windows application (self-contained, no .NET needed), the board and panel firmware with the flash tool, the manual and the installation guide.
  • Audio-DSP-Lab-firmware-1.5.zip: the firmware alone.

Flash the board with Flash-Firmware.cmd, the front panel with Flash-Panel.cmd (see the installation guide). The board needs firmware 1.5 for the receiver; the other applications are unchanged.

What's new

Firmware 1.5, protocol 1 (new requests, events and errors only), application 1.5, panel firmware 1.5.

  • The receiver, application 0x07 (receiver, "SDR receiver"): an SDR receiver backend from the IF on, the receiver chain of the author's TMS320C6713 DSP-Box on the ESP32, defined at its input K2: a real IF on K2 left, or I and Q (I left, Q right), from your front end. At K2, in 2.4 kHz: full scale 2.98 Vpp (+2.7 dBu), noise-equivalent input 3.7 µV RMS (−106 dBu) per channel with I/Q and 5.4 µV RMS (−103 dBu) with an IF, 10 dB S/N at 12 and 17 µV RMS, a dynamic range of about 109 and 106 dB; the I/Q correction covers ±3 dB and ±10°, with an image rejection of its own above 130 dB. The IF or I and Q go untouched to the DSP's serial output; the ESP32 down-converts them to 12 kHz complex (DC removal, I/Q correction), filters the channel, runs a hang AGC with look-ahead and the S-meter, demodulates AM, USB, LSB, CW or FM, reduces the noise (LMS or spectral), mutes with the squelch and interpolates back to 48 kHz; the audio goes back to the DSP through the equalizer and volume to K3 and K4. Offset ±21 kHz, filter edges ±5.5 kHz; the internal test signal (tone, noise, keying, I/Q errors) for checks without a front end. 15 to 31 % of one core.
  • Channel filters of up to 511 complex taps, designed on the board from two edges and the stop band (Kaiser) in a background task and switched in without a click, run as a partitioned FFT convolution (RxChain.cpp at -O2, esp-dsp's FFT): a tenth of the direct form's time.
  • Firmware: the new DSP image DspImageReceiver.h from the SigmaStudio project sigmastudio/Receiver (the Radio project plus SerialOutL / SerialOutR from ADC0 / ADC1; recipe Receiver-Instructions.md). New requests meter (S-meter, AGC gain, FM offset, squelch, audio level, CPU load, spectral NR gain), rxfilter (the filter in force; load, data, end <crc32> for a filter designed on the PC, float32 values, CRC-32 as zlib's) and diag rx; the event ! meter, five times a second; new errors count-wrong, crc-wrong, not-loading. diag capture and diag record answer busy while the receiver runs.
  • Pots in the receiver: P1 the filter width (100 Hz to 11 kHz, logarithmic), P2 the NR level (0 to 30 dB), P3 the squelch (off over the first 5 %, then −130 to −30 dBFS), P4 the volume. With Last application the receiver comes up at power-up with its defaults (USB, offset +10 kHz) and its output on.
  • Application: a Receiver page with three views. Receiver: mode keys, the offset dial, which with the author's test front end (a QRP Labs module whose Si5351A an Arduino Uno with the author's sketch SDRFrontend 1.0 drives on its own USB port) becomes an RF dial that tunes the front end and the offset together, keeping the station 6 to 18 kHz above the front end and re-centring it at +10 kHz; the S-meter and meters, the filter, AGC, noise reduction, squelch, the input with its I/Q correction and Null image, the card for the test front end (port, LO drive, crystal correction), the equalizer. Filter: the channel filter's response with draggable edges and stop band, Measure with the test tone and the S-meter, the test tone. Designer: mask filters (bands at any gain, templates) designed on the PC and downloaded, CSV import and export, designs kept on the PC. The simulator runs the receiver and a simulated test front end; app/tools/RxTuneCheck checks the tuning on the bench.
  • Panel: a Receiver page: an offset dial of five digits (tap a digit, − and +, or drag along the dial), the S-meter bar with the squelch's mark and the AGC gain (the FM offset in FM), the squelch's dot, mode keys, width keys that suit the mode with a passband sketch, the noise reduction keys with the CPU load; the other values as tiles below. Home has seven application keys. USB command digit <n> for screenshots.
  • Docs: the manual's chapter "The receiver" (what the receiver expects at K2: inputs, full scale, noise and sensitivity, frequencies for an IF and for I/Q, band-limiting, I/Q balance, and what a front end should deliver; what you need, wiring, the three views, the pots, levels and sensitivity; the author's test front end with its card and the Uno's commands as an optional example), the receiver in the protocol, the front panel guide, Building and SigmaStudio; the Receiver project's recipe. With the author's test front end the receiver reaches about −108 dBm in 2.4 kHz (−102 dBm with the generator's own noise in the channel).