On 8/8/21 15:20, Phil Karn wrote:



Phil, have you tried playing with the c2 input instead of wav? You could
feed it I-Q from your SDR signal chain, in that case. Would perform
better, no? Its mentioned in the man page, but I havent tried it yet.
I've noticed the c2 file stuff, and yes I will probably use it. My SDR can easily generate an IQ signal 375 Hz wide and centered on the 200 Hz wide WSPR segment (e.g., 14097.1 kHz, not 14095.6). It looks like a c2 file is expected to be the full 120 seconds long: 45000 complex 32-bit floating samples at 375 Hz = 120 sec.

Oh, I forgot to mention. My SDR project uses fast convolution for filtering and downsampling. It very efficiently supports multiple independent channels on a shared wideband front end. I have an Intel i5 demodulating every FM channel in the 2m, 125cm and 70cm ham bands (622 FM channels total) with >50% of the CPU cycles left over. (The front end hardware consists of three Airspy R2s, one for each band.)

Each channel can have arbitrary tuning (within the front end passband limits) and bandwidth, but two parameters have to be common across all channels: each channel's filter impulse response is limited in duration to the overlap length in the shared forward FFT, and the output sample rate must give an integer number of samples during the FFT block time.

The first requirement is not a problem for WSPR, but I typically use block times of 10 or 20 ms, and these won't work with a 375 Hz output: 10 ms @ 375 Hz is 3.75 samples, 20 ms @ 375 Hz is 7.5 samples, neither of which is an integer. But if I increase the block time to 40 ms I'll get 15 samples @ 375 Hz, so it'll work. (I limit my block times to those supported by the Opus codec, since I typically encode received audio in it for streaming.)

A 40 ms block time increases the latency for the other channels sharing the front end, but not terribly. It will also let me make the filters a little sharper. I'm operating my WSPR decoder on a "parasitic" basis, I.e., I start a decode thread simultaneously for every band, and whenever I manually tune my interactive channel to a particular band, that band's WSPR decoder automatically gets signal and runs. I'm using an AirspyHF+ at 768 kHz complex, so except for 10m, tuning anywhere in an LF/MF/HF band is enough for that band's WSPR decoder to run. Eventually I'd like to add demodulator threads for all the common digital modes so I'll automatically decode *everything* in a band whenever I tune the front end to include it.

Phil






_______________________________________________
wsjt-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/wsjt-devel

Reply via email to