72
decoded codevector, and the m running codevectors can be truncated at this point,
so that each has length
L't. (The saved states prior to time
(n
-
t)
are readily
converted into the input symbol stream if the encoding procedure
is
known.}
Second, although the most recent portion of length
L't
of
the m contending
codevectors can easily be selected on the basis of overall nearness to r, this would
be a mistake. It
is
the nature
of
the encoding process that being in state i
at
instant
n affects the subsequent states attainable and the symbols emitted. Not to observe
those symbols and include them in the decision as to which state
we
are in (i.e.,
which
is
the overall nearest path)
is
to negate the whole purpose
of
the code.
Accordingly, the usual process
of
bringing decoding to an end
is
for the encoder to
enforce convergence on a predetermined state
by
appending a fixed sequence of
input symbols (e.g., all zeros) to the preceding arbitrary
data
symbols.
The
decoder then picks the path associated with this predetermined state as
the overall nearest, when transmission ceases. Alternatively, the encoder can
simply insert
(bt)
arbitrary symbols after the end
of
the input data and let the
decoder make no choice with regard to the last
L't
received.
In practice, because trellis codes consist
of
a stream
of
blocks, there are often
synchronisation problems. Where does the stream begin? Where does it end?
Given that
/'
symbols are emitted at a time,
as
a block, the first requirement
is
that
the decoder at least aligns itself with the block boundary. With Viterbi decoding
this
is
achieved
by
noting the distances between the m nearest paths c
i
and the
received vector
r.
If
all the distances are similar, alignment has not been achieved,
and the decoder should shift one symbol position and try again. When correct
alignment has been achieved, the decoder can search for a known
preamble, a
fixed
pattern
of input symbols transmitted before the data, and synchronise itself
with that. All this takes time, and preambles may be many hundreds
of
bits in
length.
The
end of the stream may be determined
by
information contained
in
the
data (e.g., a count
of
symbols included at the start),
by
convention (e.g., all streams
are of a certain length), or
by
an explicit postamble,
or
pattern of symbols used to
denote the end. In this last case there are clearly transparency problems, that
is,
the
data
are not allowed to contain the terminating pattern.
5.2 LINEAR
CONVOLUTIONAL CODES
Trellis codes can be generated
by
using the arrangement in Figure 5.2. Symbols
(e.g., bits) are shifted as input into the register,
b at a time.
The
register holds
kb
symbols, where k
is
the constraint length.
L'
combinatorial circuits are fed from the
kb
stages of the register, each circuit producing a single symbol output. The total
of
L'
outputs
is
sampled one after the
other
each time interval, to give
L'
outputs
for
b inputs and a coderate b
IL'.