there is no change required in the modules that perform viterbi decoding
in order to implement either MLSD in ISI or (coherent) GMSK demod.
The whole idea around gr-trellis was to disentangle the trellis aspect
of a modulation scheme from the details of the modulation/channel.
So, if you want to implement general (coherent) CPM demodulation, all
you have to do is to represent the CPM signal as a FSM followed by a
memoryless modulator. Look up the paper by
Bixio Rimoldi: A decomposition approach to CPM, or take a look at my
notes on this at
You will only need to write an additional
constructor for the fsm class that takes the CPM parameters and produces
the appropriate FSM. Similarly, you’ll need to write a piece of code
that takes the incoming waveform and does the metrics calculations
(eithar as a separate block as in trellis-metrics or inside the viterbi
block as in trellis-viterbi-combined).
If you want to work on this general problem for a generic CPM modulation
I can help you.
Adding ISI to this is a piece of cake: you need to combine the two
trellises into either a combined trellis or to use hard/soft decisions
from one to feed the other detector.
Date: Tue, 3 Feb 2009 02:43:01 +0000
From: Nick F. firstname.lastname@example.org
Subject: [Discuss-gnuradio] extending gr-trellis to perform Viterbi
MLSD on GMSK
To: gnuradio email@example.com
Content-Type: text/plain; charset=“windows-1252”
I’ve spent a few days familiarizing myself with gr-trellis as best as I
can, and I’m interested in extending the gr-trellis module to handle
Viterbi equalization of ISI channels for GMSK demodulation. I saw Toby
Oliver’s thread in Sept. '06
discussing a possible modification with Achilleas A. but
never saw anything checked in as a result. I’m just looking to use the
trellis code to demodulate low-BT GMSK in a more optimal way than the
current Gnuradio implementation, and I have similar questions to Toby’s:
How should I go about modifying make_isi_lookup() to add support for
two-dimensional modulations? What format is trellis expecting?
I see the test_viterbi_equalization1.py file, which appears to do MLSD
on an ISI channel for 4-PAM (and other one-dimensional modulations). Am
I correct that if make_isi_lookup() is modified to support quadrature
modulations, simply changing the modulation type in this example would
be enough to make it work? I guess I’m asking more specifically if
trellis.viterbi_combined_X will support an ISI lookup table for PSK
modulations without modification.
Is there a good reason I should avoid tackling this problem? I’d hate
to be duplicating someone else’s work in this area, or barking up the
For further information, I’ve written a packet-based AIS decoder for
Gnuradio, and I’m disappointed at the quality of the data coming out of
the GMSK demodulator. It’s 9600 symbols per second @ BT=0.3, so there’s
enough ISI that I think MLSD would provide significant reduction in
observed BER. Besides, it seems like it would be a useful capability to
have added to Gnuradio. Any other tips anyone has that might help me in
doing this would certainly be welcome!