Extending gr-trellis to perform Viterbi MLSD on GMSK


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 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
    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!