HF Explorer



Works with hardware like this




Latest version: Now has adjustable filters for AM, to better pick out stations in crowded bands (like foreign broadcasts on 40mtrs). I still have to work out some mode switching (AM to SSB) issues - it works but for now the center frequency will jump about a bit when chaning demod mode and tuning. That is, when a carrier is zero-beat in SSB it should be automatically centered in AM, and visa-versa.




Fixed AM volume/noise issue in hf_explorer_11b.py which requires weaver_isb_am1_usrp3.py. The AM problem was due to leaving out the DC-blocker / 0dc-restorer which causes the audio channel to saturate at low volumes. Also fixed an offset issue with the fft display so that AM stations are centered on 0hz as well as SSB.




Version: hf_explorer_11a.py needs weaver_isb_am_usrp3.py to run. Newest feature is our patented "Single Click Tuning". When moving the mouse around on the fft display a little pop-up window called a 'tool tip' shows up at the bottom, over the status bar, and displays the frequency that the mouse tip is on. Clicking the mouse sets that frequency as the demod center - it goes to 0Khz on the display and becomes the source for demodulated audio. With that it is easy to rapidly tune into a nearby (+- 15Khz) frequency, or just click on the right or left edge several times to rapidly go multiples of 15khz. Click on the right side of a signal to tune in a lower-sideband source, etc. So now hfx has 5 methods of setting the frequency: the slider, text control keyboard entry, text control up/down buttons, a Powermate knob or clicking on the fft display. Default decimation is now 250 - saves on disk space, and still has 256khz bandwidth, enough to cover 3.8 - 4.0Mhz. Override with the -d cmd line option or edit script to set your own preference.


This is the first release of a usable gui interface for my Weaver gnuradio demodulator code. It features Independant Sideband, where lower sideband is fed to one earphone, and upper sideband is fed to the other earphone, which, if you haven't experienced ISB, opens up a whole new world of listening. It also support mono LSB (lower sideband in both ears), mono USB or AM. This also takes advantage of the Griffin Technology Powermate knob for tuning frequency, setting volume or selecting audio filter. You can adjust the frequency slider with the mouse to quickly change large amounts then use the Powermate knob for fine tuning in 100hz steps. Also has a spin control which can adjust the frequency in 1hz steps, or you just type in the frequency in hertz to tune to. The Powermate knob function can be changed from frequency to volume, filter or time by pressing the knob, or clicking buttons on the gui. Sideband selection, USB, LSB, ISB, etc is done by clicking buttons and does not restart gnuradio (i.e., a long file does not start over at the beginning). Using this with a recorded signal file you can, for example, listen to a signal in ISB with one filter, then easily rewind and listen to it again in one sideband only with a different filter, etc. The demod code includes agc.

At least one real advantage over a typical radio set is the ability to record an entire band for later listening, while listening to one frequency. 600hkz wide is normal, but it's capable of up to 6.4Mhz wide - of course it eats up disk space faster at wider bandwidths. At 600khz wide, one hour is about 20Gb. So with a notebook with an 80Gb disk and 60Gb free space, I can listen to one qso on, say, 3938Khz, while recording up to 3 hours of 3.5 - 4.1Mhz, then later on replay the data and listen to other qsos that took place at the same time. At 6.4Mhz wide recording, 15 minutes uses up 50Gb, and I have to use a full desktop with a disk array to capture the data fast enough. Not only can the RF data be saved, but an audio file (in signed-word, *.sw, like wav but w/o the header) of the station tuned to can be saved, or piped to sox and then lame to directly save in mp3 format (see note 1. at end of this page), or to ezstream and icecast for streaming Internet audio. It also takes the usrp center frequency from command line argument now, or change bands with the re-programmable buttons. Also it has web server control so you can set frequency, volume and filter from a web page - I use this to tune around with an Ipaq while laying in bed w/o having to get up ;)

Recent addition, just added an fft display of the translated audio spectrum, averaging on by default. One of the advantages of use 32Khz for audio processing is getting to see 16Khz above and below the tuned frequency. Now it does not *require* a powermate knob to operate - use the slider for course freq and the spin control for fine adjust (a little TOO fine, slow but works). Offsets have been corrected to match the carrier point with the 0khz line in the fft plot. A LSB signal shows up below 0, USB above 0, etc. In the screen shot below there is one qso tuned in (from 0 to -3.6khz).

Recently added a slider for the Programmable Gain Amplifier in the usrp adc's, and a way to change usrp center frequency or band. Just enter the center desired in the top right box and hit enter - or reprogram a button B1 to B8 by clicking on the 'set' togglebutton, then the button to program. It then is set for the value in the text box. Edit the script to make it permenant. You can tune 300Khz above and below the center frequency. Also just added command line options for: save audio to a file, save radio data to a file, or read radio data from a file. Run -h for help. If an input file is NOT specified, the USRP is used for data. If a radio data output file is specified, you create a file at about 20Gb/Hour that can be read in later, essentially recording the entire plus/minus 320Khz (640Khz wide) band. Saving audio to file creates a 32Khz, two channel, signed word audio file. Give it a .sw extension and sox can convert it to wav with "sox -r 32000 -c 2 audio.sw audio.wav", otherwise you have to secify -s -w to sox (sox -r 32000 -c 2 -s -w audio audio.wav). Also made controls behave according to source, that is, the rewing and fast forward buttons only work when using an input file source, and the PGA slider has no effect. When no input file is specified, the PGA slider works and the time control buttons do nothing. Added a "pause" control in hf_explorer_10b.py, but had to start using oss audio in order to properly stop and start the flow graph. OSS audio introduces a bit of audio buffer, which makes the audio a little behind the fft display. You see activity on the display, then hear the sound a bit later.

Version hf_explorer_11.py with weaver_isb_am_usrp3.py adds decimation as a command line option, -d, default of 100. Seems to work, haven't thoroughly tested yet. Be sure to put decimation in your saved RF data files (like "rf_data-d_50) or something so you can play it back correctly. Recording a file with USRP decimation at 100 and playing it back with decimation set for 50 makes it sound like the chipmonks.



Older versions:






Note 1. - commands for creating mp3 files of audio output.
Start hfx with an audio file (-a option) path to something like "/tmp/audiopipe". Be sure to create the named pipe with "mkfifo /tmp/audiopipe". Then, in a command line window, run:

    $ cat /tmp/audiopipe | sox -r 32000 -c 2 -s -w -t raw - -t wav - | lame - > /usr/src/radio/hfx.mp3


That will pipe the named pipe to sox, convert from 32Khz, 2 channel signed word raw data to wav, pipe that to lame mp3 encoder and save to a file.