AO-40 Satellite Telemetry Project
As part of my B.Eng. final year project / Dipl.Ing. (FH) diploma
thesis this project was created. The goal was to develop an application
to demodulate and decode AO-40's 400bps BPSK telemetry data using
digital signal processing techniques ("soundmodem").
This page shows most of the results for the end-user (other hams) and/or
people interested in the communication engineering and signal processing
aspects themselves.
All software and models are available for download on this
page are brought to you under the terms of the GNU general public license,
i.e. freely usable/copyable/changable. Source code is included. Enjoy!
Telemetry demodulator as Ptolemy Model
The following package contains an archive of all elements required to run
a 400bps BPSK telemetry demodulator as Ptolemy
Classic model. I created it to try out all DSP algorithms and schemes
as well as to discover reasonable operational parameters (such as loop
filter coefficients) in an easy-to-use environment. As Ptolemy users probably
know, it allows to quickly "wire up" a DSP implementation much like an
electric device in an analog circuit simulator. Parts ("stars" in Ptolemy
terms) are written in C++ and can be concatenated (to "galaxies") to implement
higher level functions. I used the predefined modules to build a complete
demodulator including an AGC, a Costas loop PLL plus downmixer and a DD
ML symbol timing estimator and sampler. As a bonus a decision feedback
equalizer with automatic DD tap adjustment (as a self-made star, written
in C++) is included as well. You can use this package to find out how software
modulators work and how parameter changes affect demodulation performance.
Telemetry demodulator as KDE application
As the DSP and receiver algorithms were nailed down and working acceptable
I decided to implement them in a KDE 2.0 conform application. I called
it KTelemetryDemod. Here are the features of this application:
-
Fully KDE-2.0 compliant, fits nicely on desktop (works also without KDE but
needs at least KDE-2.0 libraries and Qt-2.2.2)
-
Should run on any OS barely Posix compatible with no or few modifications
-
Reads audio data either direct from sound card (Linux (OSS) only currently)
or from .WAV file
-
Nice user interface with lots of "bells and whistles"
-
Many DSP parameters are tweakable
-
Demodulation performance should be fairly optimum - coherent demodulation
is employed with a Costas loop PLL scheme to track carrier phase. Maximum
likelihood decision directed timing estimator for symbol timing recovery.
-
Decision Feedback Equalizer (DFE) with decision directed tap adjustment
to correct linear distortions on the "channel"
-
Does initial carrier frequency discovery using spectral estimation method,
thus generally no manual tuning necessary
-
Supports various output formats (RAW / RAW+stuff / KA9Q STP)
-
Supports TCP and UDP output sockets
-
Supports multicast for mass telemetry distribution over the Internet
-
Probably many features I just forgot...
And here is a screen shot (130 kB).
You can download it here:
-
KTelemetryDemod-0.9 -- gz'ipped
source tarball (recommended) (516 kB)
-
KTelemetryDemod-0.9 -- source
RPM (520 kB)
-
KTelemetryDemod-0.9 -- binary
RPM (Mandrake 7.x, >=i686, deprecated) (99 kB)
(compiled on my heavily messed-up Mandrake-7.0 workstation, unlikely to
work anywhere else, on display here only for completeness and as last resort)
Please provide some feedback about how it works for you. Be sure to read
the README file first (yeah, I know, you are not going to anyway, but at
least I tried).
I recommend to get the source tarball and compile it from scratch.
It's very simple and probably the cleanest solution. The RPMs are my first
tries so they are probably not very well.
Telemetry viewer
Most of the data transmitted by the spacecraft consists of binary information,
mostly temperature, voltage and current data from the various sensors spread
around its units. To make these readings human-readable they have to be
decoded and presented in some readable fashion. This is what QTelemetryView
does. It's designed to work together with KTelemetryDemod but
since it connects to the demodulator using UDP and STP protocols it should
work just fine with any other demodulator (it does with Tom's (HB9JNX)
nice one). It also supports multicast, so you can join Internet telemetry
sessions as well.
As the name implies, QTelemetryView is not a KDE application but
a Qt one. It is written in Python and is more a proof-of-concept than a
"colorful" application like KTelemetryDemod. It fulfills its requirements
pretty well, although being a little bit slow (which is surprisingly Qt's
fault, not Python's). It requires TheKompany's
great PyQt-2.2 bindings and at least Qt-2.2 from Trolltech
as well as Python-2.0. Thus it should
work just fine on any platform supported by Qt, PyQt and Python itself
which include most Unix/Linux variants as well as the toy operating systems.
Here is a screen shot (together
with KTelemetryDemod) (130 kB).
Download:
Diploma Thesis
I decided to make the thesis itself available as well. You can download it
below. However, I would not yet like to post this item under the GPL. You
may download and use it for your own private purposes. Commercial usage and
sale is prohibited, though. As is distribution of the document, independent
of whether this is done in its original form or modified. If one of your
friends would like a copy as well please tell him to get his own version
from this site. I would like to keep track of how many copies are floating
around in the world.
This thesis deals with the prototype stage (including a small introduction
into Ptolemy), the implementation stage of KTelemetryDemod as well as the
implementation of QTelemetryView. It contains many theoretical aspects as
well as some practical ones. I was told by many people that it makes an
interesting read. Enjoy!
This thesis by the way won the "Prof. Doehrer Award", an award for
the best diploma thesis this year at (ex-) FH-Dieburg. I would hereby like
to thank the committee again.
Download:
Happy hunting!
created by Jens
David, DG1KJD - last update 07/27/2001