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:
- hf_explorer_11.py
requires weaver_isb_am_usrp3.py radio guts.
- hf_explorer_10b.py
needs weaver_isb_am_usrp2a.py radio guts.
- hf_explorer_10a.py
needs weaver_isb_am_usrp2a.py radio guts.
- hf_explorer_9a.py
GUI, control
- weaver_isb_am_usrp2.py
Radio guts
- hf_explorer_9.wxg
wxglade file
- hf_explorer_1.py
The first
proof of gui-concept and should work with just a Powermate knob but has
no radio guts, just a gui shell, but the knob moves the sliders, the active button changes when knob is pressed, etc. No menubar or statusbar.
- hf_explorer_1.wxg
The wxGlade file for hf_explorer_1.py.
- hf_explorer_3.py
The full working gui + radio. It imports
- weaver_isb_1.py
for signal processing (and includes the src and output to audio). You need weaver_isb_1.py to run hf_explorer_3.py.
- wxGlade file for hf_explorer_3.py
- hf_explorer_4.py
Now with AM (works but hasty hacked in - will be improving). Requires
- weaver_isb_am_usrp.py
- hf_explorer_6.py
Added command line
option to set center freq for changing bands, e.g., -c 1e6 starts with middle
of AM broadcast band at center, can tune +-600Khz. -c 3.8e6 allows tuning
from 3.5 to 4.1Mhz. Uses same weaver_isb_am_usrp.py as above, which now has
provisions for recording stereo audio to disk.
- hf_explorer_7.py
and
- weaver_isb_am_usrp2.py
As 6 above but with
web interface. Commands for frequency, volume, filter and mode are placed into
directory /var/www/cgi-bin/commands (change to fit your web server). If the
command 'chfreq' contains an integer between (self.usrp_center - 300k) and
(self.usrp_center + 300k) it will change frequency. Command 'chvol' must
be between 0 and self.vol_max. Command 'chfilter' between 0 - 30, and 'chmode' must be 'lsb', 'usb', 'am', 'isb1' or 'isb2' (with trailing \n EOL).
Example php and cgi-bin scripts:
- hf_explorer_8.py
All above with spectrum display.
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.