Category Archives: General

SpaceX launch reaches orbit…

I didn’t get a chance to watch the online webcast, but the SpaceX launch of flight 4 of their Falcon 1 launch vehicle managed to reach earth orbit, becoming the first privately developed vehicle to do so. They don’t have video up yet, but when they do, I’ll try to link it. Congratulations to the team.

Addendum: Here’s the Youtube!



World Map

I’m still playing around with GMT to generate some maps. I’m not sure I’ve really got it figured out, but here is an attempt to draw a world globe with some of the great circles that connect me to the various stations that have received my WSPR beacon messages.



Addendum: Robert pointed out that I didn’t give a link to the GMT tools. Consider this to be the remedy. They are kind of a quirky set of tools that can be used to create very nice output in a number of different projections, but they aren’t the simplest to figure out. I first learned about them from the book Mapping Hacks which is well worth owning.

Thunderbirds are go!

Yesterday, I took the wife and the future daughter-in-law to Travis AFB for their airshow. It was a blast. Lots of cool planes, culminating in a nice show by the Air Force Thunderbirds. I snapped a lot of photos, this one probably being the best.

Slow Feld Hell Examples…

Hellschreiber is a method of sending text over radio. It basically is a kind of primitive fax machine: it sends each character as a 7×14 matrix of dots. If the receiver hears a signal, it plots a dot, otherwise it plots a space. Each character is scanned left to right, bottom to top, and are sent at 2.5 chars per second.

But all this playing around with QRSS makes me want to try for something different. I wanted to send a character every 20 seconds or so, so I represent each of the 14 rows of the character by a oscillator. Each oscillator is spaced 1Hz apart. All rows for a column are thus sent simultaneously, and we send each column for three seconds.

If you don’t have any noise, it’s really easy to decode:

Same message, with lots of noise…

Here is what the audio sounds like with the noise in place. I can barely hear the signal most of the time, but it does sort of warble in every once in a while.

I’ll have to try an on-the-air test sometime soon.

Addendum: You can see little spurs at the beginning and end of each column. That’s because each of the oscillators snaps on to full volume. That generates a little click, which contains lots of energy. Slowing on that pop would help keep the signal narrow. But the reality is that in practice, it probably doesn’t matter at all.

QRSS experiment…

Well, last night, conditions on 40 and 30 were frankly pretty terrible. I tried to get a couple of VE3s to pay attention to me on 40m PSK31, but it was not gonna happen. I was lamenting this on the IRC freenode.net #hamradio channel, and NM5DV decided to give PSK-31 a try. He was running higher power than I, so I didn’t have too much trouble picking him out, but I was marginal (but good enough to rack up the QSO). After that, we dropped back to the good ole Internet, and mused about what we could do.

I had been goofing around with trying to receive QRSS (very slow Morse signals), and for fun had jury rigged a setup to actually send them (in the most stupid way imagineable). Here’s how I send it with my FT-817:

I generate a sound file (using a program I wrote) that contains morse at the very slow speed I want, and say a sidetone of 1000Hz. QRSS3 specifies a 3 second dit time, which makes the file that contains my callsign three minutes long. We started out with that, but I made a version that was QRSS1 (1 second dits) which makes my transmit periods that much shorter, a mere one minute to get my call out. Here’s what it sounds like:

KF6KYI in QRSS1

Now, the sleezy part: to transmit it, I just loaded it up into iTunes on my macbook, and then let it loop endlessly. I set my FT-817 to digital mode, tuned 1Khz below where I want the signal to appear, and then use cocoaPTT to key on the transmitter. Voila! Beacon!

And here’s what NM5DV captured using glfer from grid DM75. It’s not really that impressive: I was running 5 watts for this transmission, we diddled around with trying to use 500mw. He could still see that, but it was hard to pick out the callsign. As it is, this one shows significant fading during the last dash of the second K. Still, conditions really were terrible, and the distance was about 1000 miles, so I thought it wasn’t a complete failure. I also think that if we really knew what we were doing, we could probably tune glfer to do something a little better.

Anywho… it was kind of amusing.

Receiving QRSS

Conditions have been really bad on 30m. I haven’t had any luck at recording any beacons at all in the MEPT subband, so I was bored. I went to this page and found a recording of some QRSS signals:

Receiving QRSS

My software renders this out as this, clearly showing the two FSK shifted morse signals.


IBP software for Linux/Unix

Well, the bands were really dead this evening, so I decided to try to see if I could find some software that might be useful. I sometimes monitor various beacons, and the NCDXF beacons are the most famous. There is luckily this neat little program:

IBP software for Linux/Unix

available for Linux that can help you figure out what beacon you are hearing. It’s even got a nice little graphical display of the earth, showing what portions are lit and which are dark, and what the bearing is to the transmitting beacon.


For instance, tonight I could hear VE8AT in Canada fairly clearly, of course W6WX (it’s only 98 km from here), and KH6WHO in Hawaii.

YouTube – Adam’s Airman Run, July 31, 2008

YouTube – Adam’s Airman Run, July 31, 2008 (Higher Quality)

Today we got to see Adam for the first time in six and a half weeks. He’s been off for Basic Military Training in the Air Force, and tomorrow will be his graduation ceremony. Today, we saw him take part in the Airman’s Run. Around 1:38 into the video, you’ll see him pass in the back, wearing a red shirt, and flashing a little hello our way.

On Monday, he ships out for Sheppard, where he’ll do 11+ weeks of technical training.

We’re very proud of him. Well done, son.

Here he is, looking damned fine in his dress blues.

Writing a tunable bandpass filter…

Today, I decided to code up a little test of something that I’ve been meaning to do for quite some time: to write an implementation of a tunable bandpass filter. The algorithm is actually pretty darned simple, at least if you have a couple of pieces of code available. Let’s say you want to create a 500hz wide filter. You begin by designing a low pass filter with a cutoff at 250hz or so. If you don’t know how to do that, you can start by using this excellent webpage, which allows you to enter a filter specification and which dumps out code for the filtering operation. Once you have this, the algorithm is pretty simple: you generate two signals (which we will call I and Q) by multiplying your real-valued input signal by a sine and cosine at the frequency you wish to be the center of the bandpass. You then low pass filter each I and Q signals, and then remultiply them again by the sine and cosine as before. You then add the two channels back together, and voila! You’re done. Here’s the spectrogram of an original signal:


And then after filtering…

It works! Here’s the basic code, compressed down. It uses the libsndfile library to read and write .wav files.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <sndfile.h>
SNDFILE*sf_inp,*sf_out;SF_INFO sf_info_inp;SF_INFO sf_info_out;
#define NZEROS 6
#define NPOLES 6
#define GAIN 1.602073263e+06
double cx[NZEROS+1],sx[NZEROS+1];double cy[NPOLES+1],sy[NPOLES+1];static double
filter(double xv[NZEROS+1],double yv[NPOLES+1],double n){xv[0]=xv[1];xv[1]=xv[2
];xv[2]=xv[3];xv[3]=xv[4];xv[4]=xv[5];xv[5]=xv[6];xv[6]=n/GAIN;yv[0]=yv[1];yv[1
]=yv[2];yv[2]=yv[3];yv[3]=yv[4];yv[4]=yv[5];yv[5]=yv[6];yv[6]=(xv[0]+xv[6])+6*(
xv[1]+xv[5])+15*(xv[2]+xv[4])+20*xv[3]+(-0.4675793776*yv[0])+(3.1600883661*yv[1
])+(-8.9237117766*yv[2])+(13.4798197900*yv[3])+(-11.4902571630*yv[4])+(
5.2416002121*yv[5]);return yv[6];}
#define BUFFERSIZE (8192)
main(){int i;double din[BUFFERSIZE];double dout[BUFFERSIZE];sf_count_t total,n;
double ang=0.0,dang;double s,c;sf_inp=sf_open("input.wav",SFM_READ,&sf_info_inp
);sf_info_out.channels=1;sf_info_out.samplerate=sf_info_inp.samplerate;
sf_info_out.format=SF_FORMAT_WAV|SF_FORMAT_PCM_16;sf_out=sf_open("output.wav",
SFM_WRITE,&sf_info_out);dang=2.0*M_PI*1000.0/sf_info_inp.samplerate;total=0;
while(total<sf_info_inp.frames){n=sf_read_double(sf_inp,din,BUFFERSIZE);for(i=0
;i<n;i++){s=sin(ang);c=cos(ang);dout[i]=2.0*(c*filter(cx,cy,c*din[i])+s*filter(
sx,sy,s*din[i]));ang+=dang;ang=fmod(ang,2.0*M_PI);}sf_write_double(sf_out,dout,
n);total+=n;}sf_close(sf_inp);sf_close(sf_out);}