Multiple independent receivers - how to set up on Windows

From HPSDRwiki
Revision as of 19:14, 1 August 2010 by KV0S (Talk | contribs)

Jump to: navigation, search

The ability to have multiple independent receivers using a single Mercury is made possible by the efforts of Kirk Weedman KD7IRS, John Melton G0ORX / N6LYT, and Bruce Walker W1BW. Two of the parts of John Melton's ghpsdr3 have been ported to Windows (tested on XP 32 bit) The two pieces are "server" and "dspserver". These two, with Mercury FPGA version 3.0 and the corresponding Ozy code (version 1.8), provide for four simulteneous independent receivers for a single MERCURY board, using John's jmonitor as the (minimal) receiver graphical user interface. The controls available for each receiver are fewer than with PowerSDR or KISS Konsole, but are quite adequate for monitoring up to four 96kHz segments in the frequency range 0 to 55 MHz simultaneously.

No transmit capability is provided.

All files needed to run server and dspserver on Windows may be found on the SVN


You'll find the following folders

Folder             Contents
bin                Executables and all files needed to run
dist               java files for jmonitor (you'll need to have installed java)
dspserver          source for dspserver, with solution/project files
DttSP              source for DSP package, with solution/project files to create .dll
LoadMercuryFirmware      all files needed to load Mercury FPGA with V3.0
server	           source for server, with VS2003 solution/project files

Both server and dspserver are written in pure C (no C++). The files include project (solution) files for Visual Studio 2003. You'll probably have no trouble using VS2005 or VS2008. I've added #ifdef ... #endif so that (hopefully) the same code may be compiled on Windows and on Linux. Once any problems have been ironed out, the merged code will be placed in the SVN trunk, rather than branch, so that further development will simultaneously apply to both Windows and Linux.

In the future, additional options will be explored / implemented. These include using the fully- featured ghpsdr3 receiver user interface, other receiver interfaces, connections to digital mode software, and special communication software, such as WSPR. Transmit capability may also be possible. (Of course WSPR needs to transmit. I'd hope that one could run WSPR on four bands simultaneously, with the software setting Penelope frequency as needed.)

The server part loads Ozy FX2 and FPGA via the USB, sends I & Q samples to dspservers 0 thru 3, and sends demodulated audio (for receiver 0 only) back to Ozy and Mercury. Each jmonitor sends demodulated audio to computer's sound card. When more than one receiver is active, the sound card output is the sum of audio from all active receivers. If you want to listen to only one, reduce the AFGain to zero on other instances of jmonitor. The server does not read the 55 MHz wide spectrum samples from OZY / MERCURY (USB endpoint 4).

Each functional receiver uses its own instances of dspserver and jmonitor. dspserver provides the passband filtering, demodulation, AGC, and noise reduction.

server and dspserver are launched from a command window ("DOS window"), and each is started with some command-line arguments, or options.

For the server, the options are--

receivers      1, 2, 3, or 4   The number of simultaneous receivers to be supported
samplerate     96000           One of 48000, 96000, 192000 (only tested with 96000)
dither         on / off        Setting for Mercury ADC
random         on / off        Setting for Mercury ADC
preamp         on / off        Setting for Mercury
10mhzsource    atlas / penelope / mercury
122.8mhzsource penelope / mercury
micsource      penelope / janus
class          other / E
The default settings are
receivers 1
samplerate 96000
dither  off
random  off
preamp off
10mhzsource mercury
122.88mhzsource mercury
micsource penelope
class other

You only need to specify the options whose values need to be different from the defaults.

For the dspserver, the options are--

dspserver options:
receiver	0 - 3
server		IP address
offset		?

default values:
soundcard	HPSDR
server	(this is "localhost")
receiver	0
offset		0

To make it easy to launch multiple receivers, make a folder with a short path name, such as C:\MultiRx

Into this folder place the following--

folder "lib" from the java dist folder

Here's how to start the system--

First command window
cd \MultiRx
server --receivers 4 

2nd command window
cd \MultiRx
dspserver --receiver 0

3rd command window
cd \MultiRx
java -jar "jmonitor.jar" --server --receiver 0

Now you have one receiver running.

To use more than one simultaneous receiver,

When launching server, use a value greater than 1 for the number of receivers.
Launch multiple copies of dspserver and jmonitor, each from their own command window, using different receiver numbers--ie 0, 1, 2, 3 
(Only one instance of server is needed--it supplies connection to the hardware for all receivers.)

With 4 receivers running, you'll have 9 command windows open.

When server starts it says--

Listening for TCP connections on port 11000
    (a few seconds delay while Ozy FX2 and FPGA are loaded)
... (hex dumps of 9 USB frames)
server configured for 4 receivers at 96000
Ozy Software version 18
Mercury Software version 30

client_socket 1832
client connected
client connected:
parse_command(Rx-842150451): 'attach 0'
response(Rx0): OK 96000'
parse_command(Rx0): 'start iq 13000'
response(Rx0): 'OK'
audio_thread port=15000
listening for rx 0 audio on port 15000

When dspserver starts it says (socket numbers and buffer addresses will be different on your system)--

hHPSDR rx 0 (Version 0.6)
getSoundcardID: HPSDR id=8
setSoundcard: 8
setSoundcard -11 000000 -25 000000
setup_system_audio: sdr-5044-0
setup_system_audio: sdr-5044-1
client_init audio_buffer_size=2000 audio_buffer=9736336
client_thread: listening on port 8000
ozy_init: command bound to port 12000 socket 1808
ozy_init: server
connect: sampleRate=96000
setSpeed 1
ozy_init: iq bound to port 13000 socket=1776
iq_thread: socket 1784

(when jmonitor for Rx 0 starts, dspserver says:)

26/06/2010 23:48:29 RX0: client connection from
client message: setFrequency 7048000
client message: setMode 0
client message: setFilter -2850 -150
client message: SetRXOutputGain 30
client message: start AudioStream 480

As you start additional receivers, and make changes to the state of each of the receivers, you'll see more output from server and the dspservers.

Some information on how to make a receiver available on the internet may be found at

Please post your comments and questions to the openhpsdr email reflector, hpsdr (at)