I took a Raspberry Pi and attached a 48KHz USB sound card, with a big magnetic loop antenna fed into the mic. A little cheesy? yes! But I'd like to try and see if I can receive VLF. It's in a remote location with little to no interference so I'm thinking my chances should be good. The challenge I'm facing is that I need to write the SDR logic to "tune" throughout the 0-24KHz tuning range.
My question is, being that a sound card source presents samples in float and not the usual complex data type, can I still apply the same SDR logic that we use for SSB/FM/AM demodulation such as those presented in the Gnuradio tutorials (eg. http://www.csun.edu/~skatz/katzpage/sdr_project/sdr/grc_tutorial3.pdf
) and if not, how do I go about translating the float input into something I can use to feed existing AM/FM/SSB demodulator flowgraphs?
The first thing you need to do is a "float to complex" operation (which will leave the imaginary/Q part zero). If you were to plot the spectrum of the resulting you would see that it is symmetric around 0 Hz, containing an extra copy of all the signals you're receiving, but that is no worse than a more typical received spectrum where the other half contains unrelated signals.
After that, the approach is exactly the same as any other receiver flowgraph that supports receiving at an offset from the hardware center/zero frequency. You can use either the "Frequency Xlating FIR Filter" block (which combines a frequency shift and a low pass filter) or the "Rotator" block (which performs a frequency shift and would usually be followed by a separate filter), and the frequency shift of that block should be under user control for "tuning". Then you have a baseband signal that you can demodulate.