The digital filtering, decimation and digital downconverter functions all have an extremely hard realtime requirement. Coupled with something other than a realtime operating system, that’s a losing deal, especially without a FIFO even for a receive
only system.
Using an FX3 gets you a FIFO but it’s still a fools errand even if you can make it work.
And that’s for RX only.
While receive only, glitches and lost data lead to some corruption, including out of band noise, clicks, pops, etc leaking into your receiver….something other than a phase continuous drop free signal leads to spurious emissions on transmit. That’s
a deal killer.
The RTL dongles, used as they were intended to, have hardware FEC, synchronization recovery and all other functions necessary to simply specific an RX frequency and be delivered a bitstream to decode. Used the way they’ve been hacked to, they’re
a tuner, with AGC, and effectively a 9 bit ADC(8 bit IQ) receiving around 30MHz IF from tuner, kneecapped to provide up to a few mega samples per second before they start dropping samples.
It is reasonable to ask whether the IO coprocessor and state machines in the RP1 found on the Pi5 can be used for a more efficient transport similar to the role the juice board or an Ethernet MAC transport provide.
Then again in a “nice” world, something like an Lattice ECP3 versa (or its successors) PCIe native interface with scatter gather DMA either running the whole thing, or just offloading IO to hardware would be nice. Scatter gather DMA essentially
allows you to specify in virtual address space where you want the data to appear or be pulled from, and the hardware/driver does the translation and data just streams into/out of a circular buffer. Wrap in a circular buffer and all you’re left to do is handle
the DSP and user interface while the transport uses almost zero processor cycles. The problem is a chip like that used to run around 75 USD and need a four layer board.
There have been a few examples on kickstarter or crowd supply implementing such methods. They’re all costly, low volume products. They might be less costly if they achieved high volume.
Then again think about how many RTL2832 USB tuner dongles running SDR are out there precisely because they are cheap, or how USB won out over FireWire for a difference in patent royalties of maybe a third to a half USD per unit. It’s unfortunate,
because FireWire “400” actually has a clock of 393.216 MHz which is divisible exactly by 48KHz (and multiples) and that depending on sample rate, clock leakage aliases to DC or Nyquist null(96KHz for example) and that multiple units can by synchronous to same
clock…avoiding buffer cross runs. It’s unfortunate, but is reality.
Texas Instruments for HDAudio codec interfaces running at 24MHz or USB interfaces can use 250x oversampling to get the same benefit.
Bottom line, if I were running a Pi 5, I’d use a Juice or plug the radioberry into a Pi4 or similar board where the GPIO is closely coupled to the AXI bus.
Maybe someday we’ll have a better option on the Pi5 but we’re not there yet.
For the record, I have no hate on the FX3…just don’t try to eliminate the FPGA unless you want to eliminate the platform appeal.
I do wish there was a more expensive but still reasonably affordable radioberry type device with a 16 bit ADC. The Hermes lite sucks because it’s not and it’s not all that cheap. The Anvelina SDR isn’t quite what I’m after, and the Apache Angelia
board is nearly ideal for my desires except that I’d really want to use 1st Nyquist to provide a high performance 144-148MHz transceiver to drive microwave transverters for amateur radio.
There’s more to digest here than is obvious, but I’ll leave these thoughts to consider.