f4exb / sdrangel

SDR Rx/Tx software for Airspy, Airspy HF+, BladeRF, HackRF, LimeSDR, PlutoSDR, RTL-SDR, SDRplay and FunCube
GNU General Public License v3.0
2.72k stars 420 forks source link

Rx plugin based on WDSP #2156

Open f4exb opened 2 weeks ago

f4exb commented 2 weeks ago

WDSP is a powerful DSP library made for SDRs by Warren Pratt, NR0V. I have experienced it with the Radioberry and piHPSDR that uses it. It has a very good noise reduction algorithm and a properly working AGC in contrast with the same features in the present SSB demod.

BTW the Radioberry is supported by the Metis MISO plugin setting it with at least 2 Rx.

There are two possible approaches. Implement the desired DSP blocks in the SSB demod and possibly others or take the opportunity to use the WDSP "RXA" chain that supports the common audio amateur radio modes: SSB and derivatives, AM, FM. This latest approach has a few interests mostly the present demods are kept as they are and the new plugin is just yet another option. Also it brings in the familiar "VFO" approach with all modes in the same plugin. The FM part may be missing features found in the NFM demod but I suppose this plugin will mostly target SSB and CW and possibly AM.

There are also blocks to support transmission and a complete "TXA" chain so this could be interesting for a Tx plugin too but for now let's focus on Rx mainly to overcome the shortcomings of the present SSB demod.

There are many forks available the most complete and advanced seems to be the one included in this version of piHPSDR which is the one I am currently using.

I don't think the C code can be used as is in the Qt and SDRangel context so similarly to what was done in the above version of piHPSDR the code will have to be included and refactored in a section (subdirectory) of the SDRangel code. Fortunately it is well written enough so that the very DSP code in the blocks does not need to be touched or only slightly mostly for what concerns memory allocation and semaphore (mutex) handling. Only the glue around has to be adapted. This is the first part to do before using the code in a plugin. We could even use the RXA block chain without the original threading support. It is also possible to translate it to Qt threads and events.