Forum: GNU Radio extending gr-trellis to perform Viterbi MLSD on GMSK

Announcement (2017-05-07): is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see and for other Rails- und Ruby-related community platforms.
Nick F. (Guest)
on 2009-02-03 04:43
(Received via mailing list)
Hi all,

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 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
wrong tree.

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!

This topic is locked and can not be replied to.