[Date Prev][Date Next][Thread Prev][Thread Next] - [Date Index][Thread Index][Author Index]
Re: R: Observed AO-40 FEC coded telemetry
- Subject: Re: R: [amsat-bb] Observed AO-40 FEC coded telemetry
- From: Phil Karn <karn@xxxxxxxx>
- Date: Wed, 11 Jun 2003 14:52:13 -0700
- In-Reply-To: <007301c32ef6$f23b2220$8bc5b650@b3o7f1>
- User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.3) Gecko/20030312
i8cvs wrote:
> If a different syncronization vector is transmitted by AO40 at the beginning
> of a FEC coded A block than the beginning of this block cannot be
> recognized by the actual demodulators or by the actual software until
> modifications are made by the experts to make possible to manage 39 15 ED 30
> and the other code for FEC at the same time.
I perform synchronization very differently in the FEC format. Because
the whole purpose of the FEC format is to withstand deep, rapid fading,
I didn't want to rely on a conventional sync vector at the beginning of
the frame that could be taken out by a short fade at the wrong moment.
So my FEC format interleaves both the encoded data and the sync. The
purpose of interleaving is to take a short fade (or interference hit)
that would otherwise kill several consecutive bits and spread those
errors out over the whole frame where the FEC decoder (in this case, a
Viterbi decoder) has an easier time correcting them. The sync vector is
similarly spread out over the whole frame.
I use 2D bit block interleaving with dimensions 65 x 80. That is, I form
a 2-dimensional array of bits with 65 rows and 80 columns, for a total
of 65x80 = 5200 bits. That takes exactly 13 seconds to transmit at 400
bps, the fixed rate of the IHU telemetry stream.
The first row of the interleaver always contains a fixed 65 bit sync
vector; the other rows contain the FEC-encoded telemetry data. While the
interleaver is filled by rows, it is transmitted by columns. So the
first bit on the channel is the first bit of the sync vector, followed
by the first bit of FEC-encoded data, then the 65th, the 130th, and so
on. After 80 bits, the second bit of the sync vector is transmitted,
followed by the 2nd bit of FEC encoded data, and so on until the whole
interleaver array has been transmitted. Combine this with the two layers
of FEC coding, and any single bit in the original user data will affect
*many* transmitted bits all throughout the frame -- just what you need
to protect it against a fade.
At the receiver, the received data is written by columns into another
65x80 array, this one undoing the effect of the interleaver at the
transmitter.
Correct block synchronization is clearly vital; if the receiver doesn't
put the bits into the de-interleaver in the same places they occupied in
the interleaver at the transmitter, the FEC decoder will see total
garbage and fail to decode.
Because parts of the sync vector may be missing even with the
interleaver, I can't look for sync by simply searching for a fixed bit
pattern as is done in the uncoded format. Instead I use a "correlator",
a DSP mechanism that looks for "similarity" (if not exactness) between
an incoming signal and a local replica. I simply consider every
incoming bit as the possible first bit of a new frame, and then see what
the correlator says (remember, it knows where all the sync bits are
relative to the start of the frame). If the correlator says there's a
very good match between the incoming signal and the sync vector, I try a
FEC decode; if that succeeds, then I know I have it right. If not, I
keep looking.
Sync search can be pretty compute-intensive, but fortunately our
computers are now pretty fast and have no trouble dealing with a
heavily-coded 400 bps signal in real time.
Phil
----
Sent via amsat-bb@amsat.org. Opinions expressed are those of the author.
Not an AMSAT member? Join now to support the amateur satellite program!
To unsubscribe, send "unsubscribe amsat-bb" to Majordomo@amsat.org
AMSAT Home