sdrangel icon indicating copy to clipboard operation
sdrangel copied to clipboard

Specialized plugins to pipe data between device sets

Open f4exb opened this issue 4 years ago • 0 comments

This is a fairly generic issue just to mention an interesting discussion between Jon and myself on the group chat and keep track not to forget it. Here is the slightly reformatted transcript:

It’s not something everyone is likely to want to do, but there are a few similar things I’ve wanted to do recently, so I thought it would be worth mentioning. Here’s a few that spring to mind:

  • For some devices like the Discovery HF that support a very small MDS with large dynamic range, a digital gain stage on RX would be useful. Now this could be implemented in the device or in the channel plugins (and in fact the change you made to the gain in the SSB demod last week has helped when piping audio to other apps), but it seems to me a global gain control might be better – as it would save it being implemented multiple times in difference device and plugins and provide a consistent UI.
  • I’ve also wanted to be able to insert a variety of filters on the baseband signal, but on RX before the File Sink. Currently, I perform the filtering as a post-processing step in Matlab, but it would be nicer if that could be done in realtime, particularly for high sample rates. While filtering could be added to the File Sink, it seems more flexible to support it on the baseband signal, as there may be other uses. E.g. you might want to drop a notch filter somewhere in the spectrum, to block some interference for other channels.
  • Similarly, when I added the extra decimation stages for the Discovery a few weeks ago, I thought that would possibly be better implemented outside of the device plugin, so all devices would have the option of an increased number of decimation stages, rather than just the discovery. (There’s an added complication there currently though, of different devices using different decimation routines).

This can be done without compromising the current design. Let's take the example of the Rx chain. You have the "local sink" channel plugin https://github.com/f4exb/sdrangel/tree/master/plugins/channelrx/localsink that transfers the whole or part of the baseband to another device set. Originally this was designed to be able to split the narrowband QO-100 downlink into smaller chunks but of course this may be used for any different purpose where you need to zoom in into not only the spectrum but the entire I/Q baseband. This is to be used in conjunction with the local input plugin: https://github.com/f4exb/sdrangel/tree/master/plugins/samplesource/localinput

Now you can imagine a more complex and specialized local sink plugin that would do any sort of filtering before passing to the next device set. It is even possible to apply any complex to complex transform (correlation, convolution...) since the only requirement for the local input plugin is to get complex (I/Q) data.

The same applies the other way round with local output: https://github.com/f4exb/sdrangel/tree/master/plugins/samplesink/localoutput and local source: https://github.com/f4exb/sdrangel/tree/master/plugins/channeltx/localsource. In this case the specialized plugin would be a variant of the local output plugin.

As mentioned earlier this is not something everyone is likely to want to do so the added complexity if piping from a device set to another device set does not matter

f4exb avatar Apr 26 '21 09:04 f4exb