SDR front end for HPSDR http://openhpsdr.org/index.php *********************************************************************** OS, needed software and recommended hardware: - Windows Win7, Windows XP, 32 or 64 Bit. - OpenGL capable graphic processor; must be at least OpenGL version 2.0. It has been tested on Nvidia and Ati (now AMD) chips. Also, Intel onboard graphic chips have been tested. - At least a DualCore processor, better: QuadCore. *********************************************************************** Current limitations / Known issues: - This version is still Beta ! - Only Rx by now. - Chirp-Decoder mode has been disabled currently. - "External" DSP mode, i.e. server functionality, is disabled currently (although implemented). - This version does not yet contain Cuda or OpenCL kernels. - Sampling rate 384 kHz requires quite a lot of computational resources when using 4 receivers! *********************************************************************** Some short explanations: If you right click with the mouse in the Pan a little window for controlling opens. You can 'fix' this window by clicking on the button on the top-right; otherwise it closes again if you leave with the mouse. These control popups can be opened for every receiver separately. Let's go through the buttons (from top to down, left to right): Pan Avg: turns averaging on/off. Pan Grid: turns grid on/off. Peak Hold: as it says. Lock Pan: tuning the 'VFO' with the mouse wheel or the big frequency display on the top of the app but keeping the center frequency fixed. Click VFO: left mouse click moves the 'VFO' to the location of the mouse. Mid=VFO: moves the center frequency to the position of the VFO frequency and centers the complete display again. VFO=Mid: moves the VFO frequency to the center frequency. Line, Filled Line, Solid: different ways of displaying the power spectrum. Simple, Enhanced: different color schemes for the waterfall display. All other buttons should be self-explanatory, and all these buttons are valid for the receiver where you opened the popup. A further remark: if 'Pan Lock' and 'Click VFO' are turned off, left clicking and dragging moves the center frequency as normal. This is also true if you left-click and drag with the mouse over the frequency scale. But, if 'Pan Lock' is on, left-clicking and dragging in the Pan moves the VFO frequency, and left-clicking and dragging with mouse over the frequency scale moves the center frequency by keeping the VFO frequency fixed. This is very practical if you want to stay on the station you are listeing to, but want to look what's on the edges or outside the visible spectrum. ESC to switch to/from full screen mode. *********************************************************************** list of changes: v0.3.2.13+ (N1GP changes): - Took VK5ABN's cudaSDR version based off v0.3.2.13 but modified to use cuda cores for DSP. Ripped the cuda DSP out and put back in the QtDSP, added local sound, added more rcvrs (20), added ADC selection in the floating rx widget. Mostly use this to test HPSDR FPGA changes. v0.3.2.13: - Improved threading model (nothing to see on the GUI). v0.3.2.12: - Added 384 ksps sample rate. Currently this only works OK for maximal 4 receivers! - Bug fix: averaging per receiver corrected. v0.3.2.11: - Rx 0 (the main receiver) increases spectrum resolution by zooming the frequency scale now automatically up to 32768 bins FFT-size. - For every receiver the Panadapter spectrum graphics can be selected seperately now; as well as the avering rate. - Windows size is saved in windowsSettings.ini v0.3.2.10: - additional control: up to now, the frequency scale could be moved up and down by clicking left-mouse on this scale. Now, to move this scale you have to hold the shift key AND left-click the mouse button. If you don't hit the shift key and use the left-mouse button on the frequency scale the center frequency is moved accordingly (by keeping any difference to the VFO frequency constant). v0.3.2.9: - several bug fixes: NCO frequency adjusted when changing sample rate NCO frequency changing when tuning other receiver than the current one Thread stopping caused a crash when using more than one receiver v0.3.2.8: - Bug fixes v0.3.2.7: - The Radio control Popup window opens now by clicking the right mouse button. These Popups can be opened for each receiver seperately, and can be made sticky. On the Popups you now find the controls for averaging, grid display, Peak-Hold function, 'VFO=Mid', and 'Mid=VFO', each of which is controlled seperately for each receiver window. - The 'Locked Pan' feature has been extended by another mode called 'Click VFO'. If only the 'Locked Pan' mode has been choosen, the VFO frequency is controlled by the mouse wheel or by dragging the mouse in the Pan/Waterfall. If in addition 'Click VFO' is choosen, the VFO frequency is controlled by clicking with the left mouse button, or by clicking and dragging. - The status of 'Locked Pan', 'Click VFO' and all center and VFO frequencies are stored in the settings.ini, and are retrieved after a restart of the application. v0.3.2.6: - added possibility to fix the Panadapter/Waterfall spectra to the center frequency, and tune the VFO independently from this center frequency. So now we have differentiate between the 'center frequency' and the 'VFO frequency', which is the frequency at which audio is demodulated. You can turn on this feature by clicking on the small button 'Lock Pan' in the Panadapter window top left. Then you can drag the VFO with the mouse (left click), or by dragging the mouse wheel (tuning in fixed mouse wheel steps). If you click in the Panadapter with right mouse button the hair cross shows up (as before), but then left clicking moves only the VFO frequency while the Panadapter is locked. Two additional buttons gives the possibility to set either the VFO frequency to the center frequency ('vfo = mid'), or the center frequency to the current VFO frequency ('mid = vfo'). A note on the implementation: this is a feature which was already present in Cathy Moss' SDRMAX3 (but not the DSP related function), where the idea of the control of this feature is taken from. Another wonderful feature of Cathy's work which I very much appreciate. The DSP implementation is adapted from cuteSDR by Moe Wheatley, AE4JY. It is actually an implementation for translating a frequency band using a quadrature oscillator, as described in Richard Lyons book 'Understanding Digital Signal Processing'. In fact, the implementation is fairly easy, and it was especially easy for me because of the very nice example code from Moe Wheatley's cuteSDR. I very much appreciate also his work on cuteSDR! I am still experimenting with the features to control this behavior, and I welcome any clever ideas for doing this! v0.3.2.5: - added possibility to switch off firmware checks. v0.3.2.4: - added Metis FW V2.2 v0.3.2.3: - Bug-fix: inital settings of demod mode corrected - Bug-fix: sample-rate changing did not care about the filter settings. v0.3.2.2: - Bug-fix: wide band scope zooming now works correctly. - Bug-fix: AGC mode 'User' caused an application crash. - for Linux/MacOs only: improved font scaling on the control panel. v0.3.1.2: - Bug-fix: a font missing caused an application crash if ADC overloads. - Thanks to Berndt Wulf, VK5ABN, a socket option was adjusted. - During HPSDR network device detection (Metis/Hermes) a message is shown on the status bar. v0.3.1.1: - Bug-fix on the Metis/Hermes network connections. - S-Meter font mismatch corrected. v0.3.1.0: - Important: please use the new settings.ini with this release ! - The tool chain has been replaced by GCC (MinGW, MinGW-w64) and Eclipse CDT. The sources have been revised for the use of GCC. Good-bye Visual Studio! If you want to follow me on that way, just let me know. You might also ask me why I did that ;-) - The HPSDR protocol is now fully implemented (Rx & Tx), but for Tx it is still a way to go. - A major revision of the internal data structure has been completed. - Alex interface has been finished. The Alex states are stored per band. - Penny OC pins (Rx & Tx) interface ready. The values are stored per band. - A CPU usage indicator has been added on the status bar. It shows the mean CPU usage percentage of cuSDR. - DoubleClick in the Panadapter opens a little window for changing Band, Demod, Filtersize, AGC mode. If you move the mouse out of this window it closes after a short time. This is a feature which was available in similar form in SDRMAX III from Cathy Moss. Just another appreciation of her work! - Growing the receiver windows (Pan + Waterfall) causes to increase the font sizes of the scales as well as the font size of the cross-hair information. - The Mercury attenuator ('Preamp') values are now stored per band. - The dBm scale resolutions on the Panadapter are now stored now per band. Note please: If you change the band by a band button in the Rx Ctrl widget, the stored value is restored. If you change band by altering the frequency (by the mouse wheel, or by dragging in the Panadapter, or by altering the big frequency display) the stored values are NOT restored. - The mode of operation (DSP mode) is stored now per band. - Added a new high resolution timer based on QueryPerformanceFrequency of Windows OS. A better control of the FPS value (frames per second) based on the high resolution timer has been implemented. The FPS values are stored per receiver in the settings.ini. Each receiver runs its own high-res timer. - Added a time scale to the waterfall spectra, which varies with the FPS value. - A first version of QtDSP has been implemented. DttSP is discarded. There is no noise reduction/noise blanker/notch filter present currently. Please note: this is by no means a judgement over DttSP! - Warren Pratt's, NR0V, AGC is now implemented in QtDSP. Added graphical control for AGC gain threshold and hang threshold. Click on the orange colored button to turn AGC threshold/hang threshold lines on and off. - Added volume mute functionality. - Added local date & time display on the status bar. - Some re-organization of the widget content. - Added firmware version control for Mercury, Penelope/Pennylane, Metis and Hermes. v0.3.0.1: - Major change on the GUI. Introduced docking windows. - Edit your Call Sign in the Display settings. v0.2.2.6: - Changed way of getting firmware version numbers. - Added warnings if another hardware has been selected as was discovered. v0.2.2.5: - Bug fixes (wide band, multi-Rx views, and more) - S-Meter min/max-Bar (the red/orange one) improved: slow reset. - Added an IP-packet 'LED' in order to indicate if there are packet losses. Useful if you encounter audio distortions caused by network problems. - Added timers to control the SYNC, ADC, and IP Packets LEDs. only cuSDR32: - Provided *.pro/*.pri files, and tested compilation under minGW. (gcc-Version 4.7.0) v0.2.2.4: - Important bug fix: memory leak closed ! v0.2.2.3: - Bug fix in the Peak-Hold function; zooming on the frequency scale can cause a crash of the application. - Added Peak-Hold for the other display styles. v0.2.2.2: - Peak Hold for the Panadapter has been added. Works currently only for display style 'Line'. v0.2.2.1: - A new averaging method has been implemented. This method is taken from Richard Lyons' book 'Understanding Digital Signal Processing', 3rd ed., p.791. It is called 'Dual-Mode Averaging', and consists of an exponential averaging together with a fast way of blending the moving averager. Note, this method introduces also a noise reduction, which can be seen on the 16k wide band spectrum if you turn averaging on and off. v0.2.2.0: - In order to ensure backward compatibility to HPSDR firmware versions, the start procedure has been changed. Now a first start is performed to read out the firmware versions of the connected HPSDR hardware. Then, with the correct initializations wrt the firmware versions, the final start is launched. This causes in general a longer starting time. - Added possibility to show wide band data with 16k sample size (Hermes firmware > v1.6, Mercury firmware > v3.2). - If there are two receivers selected, you now have the possibility to link the center frequency displays of the two receivers in the Waterfall display. This only makes sense if both receivers are on the same band. Then you can drag the frequency rulers of, e.g. receiver 1, to show only the Panadapter display, and receiver 2 to show only the Waterfall display. In this way you have a moving Panadapter display (receiver 1 in this case) and a fixed Waterfall display (receiver 2) with a line showing the frequency of receiver 1. v0.2.1.2: - Minor correction of the wideband display data wrt 20 dB attn. v0.2.1: - The DOS command window is replaced now by a log file. This file ("cuSDR.log") is normally placed in the directory where cuSDR is started. If you have problems with the application, I would be glad if you could send me this log file. v0.2.0: - many small changes/improvements/bug fixes - corrected a device discovery problem when more than one device is in the local network (Metis/Hermes) - Panadapter display (Filter, Frequency etc.) - finally a slider for the AGC gain (DttSP and QtDSP) - first instance of the QtDSP package, the Qt-adaptation of the SharpDSP package. Note: QtDSP package is not yet completed; e.g. the S-Meter is not yet working. - first implementation of Warren Pratt's, NR0V, ingenious AGC function. - Hermes (RX) support - Alexiares support prepared - First steps for the Tx path added; "Transmit" Tab added; "Ext Ctrl" Tab added; "PA" Tab added; "Alex" Tab added v0.1.10: - added averaging for wide band panadapter - fixed problem that Mercury/Metis are not correctly initialized after the first "Start" if more than one receiver is selected. - fixed wrong debug message in DOS-console after hitting "Start" command ("send Start command to Metis at ...") - fixed receiver display layout when switching from view1 to view2 v0.1.09: - fixed problem when clicking the Windows close button and app is running - fixed missing GUI link / filter and filter group changes - fixed crashes when changing sample rate during receiving: inserted an additional mutex in method dspProcessing() - changed method initMetis() to connect to Metis/Hermes: it is now based on a time out - fixed some graphical problems when showing hair cross - hair cross is switched off now when you switch receiver V0.1.08 Changes: - minor changes on the GUI; new S-Meter *********************************************************************** Since there is no manual yet, here are the most important things to know, but the GUI should mostly be self-explaining. The application is controlled by a number of widgets which opens by hitting the corresponding buttons, some of which are currently disabled. Just try before hitting "Start" to find out where to control all the parameters. Note, some of Buttons are disabled if the application is running (i.e receiving), that is, they can only be altered after hitting "Stop". If you are connecting Metis directly to the PC, chose the correct network adapter with an APIPA address (see Metis manual) in the HPSDR widget. Otherwise, if you are on a local LAN with DHCP server, the application will check for the active network adapter. Remember, if your PC has already an IP address, e.g. from your router, and you disconnect the PC from the network in order to connect Metis to your PC, you have to deactivate and re-activate your network adapter (or simply restart you PC). This is NOT necessary if your PC has two network adapters, of course. If you want to enable more than one receiver, please go to the "HPSDR" widget (-> HPSDR Button) when the application is stopped. Then choose in the right bottom the number of receivers. The corresponding number of receiver panels should show up. Then press "Start" and feel lucky. On the main button panel, right, you choose the receiver to control and listen to. Every receiver panel can be controlled by itself. The scales are zoom-able (right mouse button). The dBm scale can be moved by the left mouse button. Mouse wheel for controlling frequency if you are in the panadapter. You can also drag in the panadapter holding down the left mouse button to change frequency. If you move your mouse over the big frequency display, you can alter the digits by the mouse wheel directly. Clicking on the digits alter the mouse wheel's step size. The receiver panels are sizable. You can shut off the waterfall display by dragging the frequency scales to the bottom of each panel. Note, if you close a waterfall display by dragging the frequency scale to the bottom, there is nearly no change of CPU utilization due to the use of framebuffer objects of OpenGL. On the Display widget you have some control over FPS and colors. Higher FPS means, more data per time unit are sent to the receiver panels, and more CPU resources are needed. Waterfall update is bound from below by 20 ms. The ESCAPE key switches between full screen view and normal view. A lot of parameters are stored in a file settings.ini. You can copy/rename/edit this file, but always a file named settings.ini will be used. If you enter wrong values, the application will take default values. If you loose settings.ini, the application will create one for you. In the settings.ini there is a parameter in the server section called 'widebandData'. If 'widebandData=off', Metis/Hermes will be initialzed without sending wide band data, if 'widebandData=on', with sending wide band data. Be careful when editing settings.ini. Have fun! *********************************************************************** Acknowledgements: The writing of this software would not have been possible without previous work on famous software packages like: - Catherine Moss' SDRMAX3 for QSR1: notably the best SDR-GUI written ever, at least in my eyes. I took her design idea for the zoom-able scales - with personal permission. It's a wonderful smooth, intelligent and working GUI concept! - the SharpDSP package of Phil Covington (N8VB), which is used in KISS Konsole, and which has been the starting point for my CudaSharpDSP package. - the wonderful KISS Konsole experimental software and all who have contributed to it, and where I started to learn about SDR programming, with lots of explanations. Special thanks to George, K9TRV and Phil, VK6APH, with whom I had some longer discussions about KISS code and techniques in the beginnings. - the DttSP package, which I use currently for DSP processing. - the MultiRx multiplexer function from gHPSDR3 by John Melton, G0ORX/N6LYT. Great stuff. - People, who worked on PowerSDR; the Waterfall color scale from is taken from PowerSDR :-P - to all Qt/OpenGL/OpenCL developers and their big number of example code and snippets! Big thanks to the makers/contributors/organizers of the HPSDR hardware! Hermann, DL3HVH The author can be reached at hvh.net@gmail.com