Category Archives: General

More weather pictures….

Well, I decided to give NOAA 18 a try during a nice 18 degree pass. The resulting image was actually pretty good, although still spoiled in spots by some nasty interference (some of which sounded like a phone ringing, very odd). Still, I think this is th first image that I had that made it all the way up the coast to Puget Sound. Very neat.

NOAA 18 pass, South To North, on Feb 17, 2008

HF-FAX

Well, I was playing around with cocoaModem a bit more, and decided to try to decode some of the HF-FAX images sent by the station here in Point Reyes. The quality isn’t quite what I would imagine it should be, and there were a number of sync issues, so I’m not sure what’s going on here. But here’s the very first image I decoded: the bar in the center is when I tried to shift it into DIGITAL mode on the FT-817, which didn’t work very well.

HF Fax Image from Point Reyes, my first

A Satellite Two-fer…

Got on board the late night pass for the ISS, and right after that went down, turned around and worked SO-50. Sadly, the recorder I normally used didn’t pick up the passes, must have hit the stop button (annoying!). But I worked N6RSX via the ISS, then got KB7F and … rats.. memory… failed me… i heard him on the ISS too…. Mountain View, CM87, November… something… O… Sigh.

Awesome High Altitude Balloon Flight

Well, the price of launching a satellite for real is still way too high to be even an insane possibility, but there are some fun things that a space minded individual or club can do: notably, high altitude balloon launches. Witness this one, which came across the Make Blog today. It includes some pretty nifty high altitude video from the edge of space.

Flight 2 – High ALtitude Object



MVI_0466 from natrium42 on Vimeo.

AO-16 lives, in a very strange way…

This just came across the amsat-bb mailing list:

Since AO-16 was recovered approximately 6 months ago, the command team has 
attempted to reload the satellite software almost a dozen times without 
success. Subsequently a series of memory tests were performed which points 
towards a hardware failure which prevents restarting the spacecraft software 
successfully. This team included Bruce Rahn WB9ANQ and Jim White WD0E 
advising Mark Hammond N8MH as the primary groundstation. Mark put in many 
early hours during the multiple reloads and test sessions, with Bruce, Jim, 
and others advising. Thank you to all involved for your hard work.

After the conclusion that the spacecraft computer system was damaged and as 
discussions about decommissioning were taking place, Jim recalled a series 
of low level commands included in the spacecraft design by Tom Clark, K3IO 
during construction. One of these commands allows an uplink receiver to be 
directly tied to a downlink transmitter. The twist is that the uplink is 
regular FM but the downlink via the BPSK transmitter is DSB (Double 
Sideband). Mark placed the satellite in this mode early this week and some 
testing was undertaken. The satellite hears VERY well, and the reduced 
bandwidth by using either USB or LSB on the groundstation receiver allows 
for a very robust downlink. Tuning the downlink is just like on a linear 
transponder, meaning it is tight and with fast Doppler. Uplink tuning is not 
required, just as with the FM mode V/U satellites. QSOs were made between 
N8MH, WD4ASW, KO4MA, K5QXJ, and WA6FWF. My personal observations include 
being able to access and hear the satellite within one degree of the 
horizon, much lower than any other current bird for my QTH. This should be 
an easy satellite with omni antennas and a 70cm preamp.

With that explanation, I'm happy to open the satellite to general use on 
voice for a test period. Please submit reports either to the -bb or to 
ao16@amsat.org . The uplink is 145.920 FM, and the downlink is 437.026 SSB 
± Doppler shift. Please restrict your uplink power to a reasonable level, 
and do not transmit without being able to hear the downlink. All the general 
single-channel guidelines apply. Enjoy this bird's new life!

73, Drew KO4MA
AMSAT-NA VP Operations 

Whacky! I don’t have any UHF SSB equipment, so it really doesn’t help me much, but I can imagine that using a cheap 2m handheld for the uplink, and either a TH-F6A or more capable transciever for the downlink would be possible. Neat! I’ll have to give this a try sometime.

Plan13 code nearing alpha test…

My Python port of the Plan13 algorithm is pretty much working now. I wrote a simple script to find the next pass of NOAA-17, and here is the result for finding the next pass. It outputs the time and date (in UTC), the elevation, azimuth, latitude and longitude of the point directly under the satellite, the range to the satellite, and the Doppler corrected downlink frequency.

It seems to work pretty well.

==============================================================
================ UPCOMING PASSES FOR NOAA-17 =================
==============================================================
2008/01/20 03:55:00  +1.9 102.8 28.4N  93.3W 3141km 137.622Mhz
2008/01/20 03:56:00  +4.4  96.1 31.9N  94.3W 2890km 137.622Mhz
2008/01/20 03:57:00  +6.8  88.2 35.4N  95.3W 2679km 137.621Mhz
2008/01/20 03:58:00  +8.7  79.0 38.8N  96.4W 2520km 137.621Mhz
2008/01/20 03:59:00 +10.0  68.7 42.3N  97.6W 2422km 137.620Mhz
2008/01/20 04:00:00 +10.4  57.8 45.8N  98.8W 2396km 137.620Mhz
2008/01/20 04:01:00  +9.8  47.0 49.3N 100.2W 2442km 137.619Mhz
2008/01/20 04:02:00  +8.4  37.0 52.7N 101.8W 2556km 137.619Mhz
2008/01/20 04:03:00  +6.3  28.1 56.2N 103.6W 2731km 137.618Mhz
2008/01/20 04:04:00  +3.9  20.5 59.6N 105.8W 2955km 137.618Mhz
2008/01/20 04:05:00  +1.3  14.2 62.9N 108.3W 3216km 137.618Mhz
--------------------------------------------------------------

Addendum: I ran my script to find the next pass for AO-27, and wow, it turns out that it passes almost directly over my position. I changed the pass predictor to produce lines every 15 seconds.

==============================================================
================ UPCOMING PASSES FOR OSCAR-27 ================
==============================================================
2008/01/19 22:43:15  +0.8 165.2 12.2N 115.6W 3173km 436.807Mhz
2008/01/19 22:43:30  +1.8 165.2 13.1N 115.8W 3073km 436.807Mhz
2008/01/19 22:43:45  +2.8 165.2 14.0N 116.0W 2972km 436.807Mhz
2008/01/19 22:44:00  +3.8 165.2 14.8N 116.2W 2872km 436.807Mhz
2008/01/19 22:44:15  +4.9 165.3 15.7N 116.4W 2771km 436.807Mhz
2008/01/19 22:44:30  +6.0 165.3 16.6N 116.6W 2671km 436.807Mhz
2008/01/19 22:44:45  +7.1 165.3 17.5N 116.8W 2571km 436.807Mhz
2008/01/19 22:45:00  +8.4 165.3 18.4N 117.0W 2472km 436.807Mhz
2008/01/19 22:45:15  +9.7 165.3 19.3N 117.2W 2372km 436.807Mhz
2008/01/19 22:45:30 +11.0 165.3 20.1N 117.4W 2273km 436.807Mhz
2008/01/19 22:45:45 +12.5 165.4 21.0N 117.6W 2175km 436.807Mhz
2008/01/19 22:46:00 +14.0 165.4 21.9N 117.9W 2077km 436.806Mhz
2008/01/19 22:46:15 +15.6 165.4 22.8N 118.1W 1980km 436.806Mhz
2008/01/19 22:46:30 +17.4 165.4 23.7N 118.3W 1884km 436.806Mhz
2008/01/19 22:46:45 +19.3 165.4 24.6N 118.5W 1788km 436.806Mhz
2008/01/19 22:47:00 +21.4 165.4 25.4N 118.7W 1694km 436.806Mhz
2008/01/19 22:47:15 +23.6 165.4 26.3N 119.0W 1601km 436.806Mhz
2008/01/19 22:47:30 +26.1 165.4 27.2N 119.2W 1510km 436.806Mhz
2008/01/19 22:47:45 +28.8 165.4 28.1N 119.4W 1421km 436.806Mhz
2008/01/19 22:48:00 +31.8 165.4 29.0N 119.6W 1335km 436.805Mhz
2008/01/19 22:48:15 +35.2 165.4 29.8N 119.9W 1251km 436.805Mhz
2008/01/19 22:48:30 +39.0 165.3 30.7N 120.1W 1171km 436.805Mhz
2008/01/19 22:48:45 +43.3 165.3 31.6N 120.3W 1095km 436.804Mhz
2008/01/19 22:49:00 +48.1 165.2 32.5N 120.6W 1025km 436.804Mhz
2008/01/19 22:49:15 +53.5 165.1 33.4N 120.8W  962km 436.803Mhz
2008/01/19 22:49:30 +59.5 164.9 34.2N 121.1W  907km 436.802Mhz
2008/01/19 22:49:45 +66.3 164.5 35.1N 121.3W  861km 436.801Mhz
2008/01/19 22:50:00 +73.6 163.7 36.0N 121.6W  827km 436.800Mhz
2008/01/19 22:50:15 +81.4 161.5 36.9N 121.9W  806km 436.798Mhz
2008/01/19 22:50:30 +89.1 113.7 37.8N 122.1W  798km 436.797Mhz
2008/01/19 22:50:45 +82.4 351.7 38.6N 122.4W  805km 436.796Mhz
2008/01/19 22:51:00 +74.6 348.9 39.5N 122.7W  825km 436.794Mhz
2008/01/19 22:51:15 +67.3 348.1 40.4N 123.0W  858km 436.793Mhz
2008/01/19 22:51:30 +60.5 347.7 41.3N 123.3W  903km 436.792Mhz
2008/01/19 22:51:45 +54.4 347.5 42.1N 123.6W  957km 436.791Mhz
2008/01/19 22:52:00 +48.9 347.3 43.0N 123.9W 1020km 436.791Mhz
2008/01/19 22:52:15 +44.1 347.3 43.9N 124.2W 1089km 436.790Mhz
2008/01/19 22:52:30 +39.8 347.2 44.8N 124.5W 1164km 436.789Mhz
2008/01/19 22:52:45 +36.0 347.2 45.6N 124.8W 1244km 436.789Mhz
2008/01/19 22:53:00 +32.6 347.2 46.5N 125.1W 1327km 436.789Mhz
2008/01/19 22:53:15 +29.5 347.2 47.4N 125.5W 1414km 436.788Mhz
2008/01/19 22:53:30 +26.8 347.2 48.3N 125.8W 1502km 436.788Mhz
2008/01/19 22:53:45 +24.3 347.2 49.1N 126.2W 1593km 436.788Mhz
2008/01/19 22:54:00 +22.0 347.2 50.0N 126.6W 1686km 436.788Mhz
2008/01/19 22:54:15 +19.9 347.2 50.9N 126.9W 1780km 436.788Mhz
2008/01/19 22:54:30 +18.0 347.2 51.7N 127.3W 1875km 436.788Mhz
2008/01/19 22:54:45 +16.2 347.3 52.6N 127.8W 1971km 436.788Mhz
2008/01/19 22:55:00 +14.6 347.3 53.5N 128.2W 2068km 436.788Mhz
2008/01/19 22:55:15 +13.0 347.3 54.3N 128.6W 2166km 436.787Mhz
2008/01/19 22:55:30 +11.6 347.4 55.2N 129.1W 2264km 436.787Mhz
2008/01/19 22:55:45 +10.2 347.4 56.1N 129.5W 2362km 436.787Mhz
2008/01/19 22:56:00  +8.9 347.4 56.9N 130.0W 2461km 436.787Mhz
2008/01/19 22:56:15  +7.7 347.5 57.8N 130.5W 2561km 436.787Mhz
2008/01/19 22:56:30  +6.5 347.5 58.7N 131.1W 2661km 436.787Mhz
2008/01/19 22:56:45  +5.4 347.6 59.5N 131.6W 2760km 436.787Mhz
2008/01/19 22:57:00  +4.4 347.6 60.4N 132.2W 2860km 436.787Mhz
2008/01/19 22:57:15  +3.3 347.6 61.2N 132.8W 2961km 436.787Mhz
2008/01/19 22:57:30  +2.3 347.7 62.1N 133.4W 3061km 436.787Mhz
2008/01/19 22:57:45  +1.4 347.7 62.9N 134.1W 3161km 436.787Mhz
2008/01/19 22:58:00  +0.5 347.8 63.8N 134.8W 3262km 436.787Mhz
--------------------------------------------------------------

Another weather satellite pass…

Jan 19, 2008, NOAA-17Another pass of NOAA-17 this morning. A pretty nice one too, lots of good detail. Not the most noise-free image though: not sure what the regularly timed, strong interference was that comes in at the beginning, but it too seems to be synchronized at the 1hz rate, and may even be tracking the same Doppler. Another satellite? Not sure.

Lawrence Lessig @ Pixar

Stanford law professor and copyright champion Lawrence Lessig came for a lunchtime lecture here at Pixar. I’ve been interested in copyright law and intellectual property rights for quite some time, and Lessig’s thoughtful writing and championing of the Creative Commons has had a significant effect in helping me formulate what I think is a nuanced and reasonable understanding of the issues. Since I have followed much of his writings and his blog, I didn’t find a lot that was significantly new in his presentation. He did take the opportunity to offer a challenge to Pixar and our mouse-eared overlords to take a leadership role in trying to transition into a more sensible culture were “read-write” access to creative works are more sensibly understood.

It’s a pity that his entire time was spent talking about copyright though: I’m now more interested in his new windmill to tilt at.

UVM CricketSat Program

I’ve been toying with the idea of doing a balloon launch, perhaps carrying a full GPS and radio transmitter payload, but I think it would behoove me to get some experience attempting to find payloads that cost only a few bucks before risking hundreds of dollars. This would appear to be the answer: the Cricketsat.

UVM CricketSat Program

These are little transmitters that are kind of like your key fob or whatever. They output a weak signal, but are capable of relaying some basic telemetry back via simple modulation. They cost about $10, and can be carried by a small balloon. Very neat.

Extreme Homebrew Electronics

Every once in a while, I encounter one of those odd hams who likes to homebrew his own electronics, but who views using integrated circuits as “cheating”. He’ll assure you that you can’t possibly understand how radios work if you use integrated circuits: that real homebrew radios are constructed from simple transistors. Or maybe even more perversely, he’ll assure you that all “real” radios are constructed from parts that glow, and that they will be the only technology that survives the EMP burst of the the nuclear bombs that that Soviets Russians North Koreans Iraqis the Axis of Evil are set to send against the United States.

I think this is hilarious. I mean, with the exception of one person I know (and she’s insane 🙂 ) nobody is capable of making a transistor anymore than they are capable of making an integrated circuit. Objecting to their use on a basis of some kind of “electronic purity code” is just silly.

But anyway, enough of that. Here’s a website about a French guy who makes his own tubes. From wire, glass tubing and pieces of metal. And apparently builds radios out of them. The number of steps he needs to go through to assemble a tube is just amazing. He’s got all these crazy jigs and torches and tools and vacuum pumps. Just freaking amazing. Check out the 17 minute video (very expertly done, and with no voice, just some soothing music). It’s just crazy.

French guy makes his own tubes, by hand.

Sines and Cosines of the Times….

I can never remember these formulas, so I wrote this program. I’m putting it here so I won’t lose it, and so others may benefit.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

/* $Id$
 *
 * Written by Mark VandeWettering.
 *
 * Any copyright would be pretty stupid.  Use this code as you see
 * fit, for any purpose, commercial or non-commercial, with or
 * without attribution.
 *
 * I wrote this little test program mostly as documentation for some
 * interesting recurrence relationships which I keep forgetting and
 * have to dig up from time to time.
 *
 * To generate a continuous tone, you basically are repeatedly
 * evaluating sin(n * ang), for n = 0... however many you need (or,
 * alternatively, cos).  Writing the loop in this naive way is pretty
 * horrible though, it takes many cycles to evaluate a sine or cosine.
 * Another way to do so is to compute the complex number m = cos(i *
 * ang) (where i is the sqrt(-1)) and then maintain an accumulator which
 * is repeatedly multiplied by m.  Unfortunately, eventually numerical
 * roundoff makes the resulting vector diverge.
 *
 * Luckily, there is a third option: to use a recurrence relationship
 * for cos(n * ang) and sin(n * ang).
 *
 * From section 5.4 of Numerical Recipes: The Art of Scientific Computing:
 *
 * cos(n*ang) = 2 cos(ang) cos((n-1) * ang) - cos((n-2)*ang)
 * sin(n*ang) = 2 cos(ang) sin((n-1) * ang) - sin((n-2)*ang)
 *
 * Somewhat amazingly, these recurrence relationships are _incredibly_
 * stable.  The program below implements both of them (generating a
 * sin and a cosine in each iteration) using only two multiplies and
 * two adds per iteration.  On the 3.4Ghz Intel machine I have, this
 * entire program runs in about 11 seconds, and the vectors traced
 * out by the program are still unit vectors to the precision of
 * a normal printf.  You can try replacing the "doubles", with "floats",
 * and you will see the precision isn't as good, but might be adequate
 * for your needs.  It should be noted, however, that the program runs
 * in exactly the same time in either case (doubles and floats are both
 * single cycle operations) with my machine/compiler.
 */

/* This test program runs for a billion cycles, which at the sample rate
 * specified is just about a full day.  The idea here is to see if the
 * generated sines and * cosines continue to trace out unit vectors. */

#define NCYCLES         1000000000
#define SAMPLE_RATE     11025
#define FREQ            (800.0)

main()
{
    double ang = 2.0 * M_PI * FREQ / SAMPLE_RATE ;
    double c0, c1, c2 ;
    double s0, s1, s2 ;
    double cm =  2.0 * cos(ang) ;
    int i ;

    c0 = cos(-2.0 * ang) ;
    c1 = cos(-1.0 * ang) ;

    s0 = sin(-2.0 * ang) ;
    s1 = sin(-1.0 * ang) ;

    for (i=0; i<NCYCLES; i++) {
            c2 = cm * c1 - c0 ; /* c2 is cos(i * ang) ; */
            s2 = cm * s1 - s0 ; /* s2 is sin(i * ang) ; */
            c0 = c1 ;
            c1 = c2 ;
            s0 = s1 ;
            s1 = s2 ;
    }

    for (i=0; i<100; i++) {
            c2 = cm * c1 - c0 ; /* c2 is cos(i * ang) ; */
            s2 = cm * s1 - s0 ; /* s2 is sin(i * ang) ; */
            printf("%f %f %f\n", s2, c2, s2*s2+c2*c2) ;
            c0 = c1 ;
            c1 = c2 ;
            s0 = s1 ;
            s1 = s2 ;
    }
}

/* $Log$ */


Addendum: Jim Blinn has a chapter on circle drawing in his book, JIm Blinn’s Corner which is probably relevent. It’s been some time since I read it (and I can’t find it on my shelf at the moment), but I believe it also points you to Minksy’s circle drawing algorithm that appeared in HAKMEM. It’s clever, but doesn’t really draw circles, and is no faster than the method above. What’s really odd is that it uses less storage for temporaries, which makes it look as if it were buggy.

Addendum2: Well, I coded that program up, just for fun. It turns out that you can use it as well. Gosper explains how to compute the desired value of epsilon in the Minsky’s algorithm, and unlike the code above, it is stable when evaluated using floating point arithmetic. Unfortunately, it generates a fairly notable ellipse, which doesn’t change over repeated evaluation, but isn’t very round either. As the speed the points go around the curve decrease, the curve becomes more circular.

Still, pretty interesting.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

/*
 * According to Gosper, Item 151 in HAKMEM,
 * 1-epsilon^2/2 = cos(theta), where theta
 * is the desired angular increment.
 * This means that...
 * 1 - cos(theta) = epsilon^2 / 2
 * epsilon = sqrt(2.0 * (1-cos(theta))) ;
 */

#define SAMPLE_RATE 11025
#define FREQ        800.0

main()
{
    float x = 1.0, y = 0.0 ;
    float ang = 2.0 * M_PI * FREQ / SAMPLE_RATE ;
    int i ;
    float epsilon = sqrt(2.0 * (1-cos(ang))) ;

    for (i=0; i<1000000000; i++) {
        x -= epsilon * y ;
        y += epsilon * x ;
    }
    for (i=0; i<1000; i++) {
        x -= epsilon * y ;
        y += epsilon * x ;
        printf("%f %f %f\n", x, y, sqrt(x*x+y*y)) ;
    }
}

Addendum3: I’m not sure what I really said about the “complex multiply” method really is true. Using the builtin gcc complex support, it runs in about the same time (even though I think it should have twice as many multiplies, perhaps it pipelines better?) and works just as well with respect to roundoff.

For completeness:

#include <stdio.h>
#include <stdlib.h>
#include <complex.h>
#include <math.h>

#define SAMPLE_RATE 11025
#define FREQ        800.0

main()
{
        int i ;
        complex m = cexp(2.0i * M_PI * FREQ / SAMPLE_RATE) ;
        complex acc = 1 ;

        for (i=0; i<1000000000; i++)
                acc *= m ;
        for (i=0; i<1000; i++) {
                printf("%f %f %f\n", creal(acc), cimag(acc), cabs(acc)) ;
                acc *= m ;
        }
}

Colorized Sat Pictures

Colorized Sat Picture (sort of)I was trying to figure out how people really colorize satellite pictures, but wasn’t making any headway, so I just went ahead and did some relatively straightforward gimp work. I’ll write this up too, eventually. Basically it is just a set of thresholds to establish some masks (one for the ocean, one for brown land, one for green, and one for the clouds. Less green would probably be better than more, because it begins to leak into the clouds. Oh well.