Multiple independent receivers - how to set up on Windows
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
svn://svn.openhpsdr.org/svn/repos_hpsdr_kiss/branches/WA8YWQ/ghpsdr3-Windows
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 timing 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: soundcard SANTA_CRUZ, AUDIGY_2_ZS, MP3_PLUS, EXTIGY, DELTA_44, FIREBOX, EDIROL_FA_66, HPSDR receiver 0 - 3 server IP address offset ? default values: soundcard HPSDR server 127.0.0.1 (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--
libfftw3f-3.dll pthreadVC2.dll jmonitor.jar ozyfw-sdr1k.hex Ozy_Janus.rbf server.exe dspserver.exe 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 127.0.0.1 --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 127.0.0.1:12000 client connected: 127.0.0.1:12000 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 client_thread: listening on port 8000 ozy_init: command bound to port 12000 socket 1808 ozy_init: server 127.0.0.1 connect: sampleRate=96000 setSpeed 1 ozy_init: iq bound to port 13000 socket=1776 iq_thread: socket 1784 output_sample_increment=2
(when jmonitor for Rx 0 starts, dspserver says:)
26/06/2010 23:48:29 RX0: client connection from 127.0.0.1:2995 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
http://www.n9vv.com/N6LYT-Online-Mercury-Receiver.pdf
Please post your comments and questions to the openhpsdr email reflector, hpsdr (at) openhpsdr.org.
See also
- Multi-Receiver - not the same as above, but related.