[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Discuss-gnuradio] extending gr-trellis to perform Viterbi, MLSD on

From: Grzegorz Suder
Subject: Re: [Discuss-gnuradio] extending gr-trellis to perform Viterbi, MLSD on GMSK
Date: Wed, 11 Feb 2009 10:19:42 +0100


I am trying to decode CPM signal according to your email but I have problem with understanding some things. What I'd like to do is to decode some kind of I/Q samples according to following scenario:
- decimation of symbol rate N-times
- decoding I/Q symbols according to FSM file and provided constellation

For VA I am using:
 dimensionality = 1
 va = trellis.viterbi_combined_cb(f,K,0,-1,dimensionality,constellation,trellis.TRELLIS_EUCLIDEAN)

However the results are not as expected to be. My guess is that something might be wrong with FSM file - I've looked through *.fsm files example and seems that table OS (output symbols) is generated somehow. What I know about my state machine is:
- there is S unique states
- each state can have transition to one of I states
- each input symbol is equal to IB bits
- transition from state S(i-1) to S(i) corresponds to O output symbols
- each output symbol is written on OB bits

So in general - I have defined NS table. I thought that OS table in *.fsm file is just table that tells: transition from state S(a) to state S(b) is equal to output symbol O(ab) but it seems that I'm wrong. Is there any easy way to generate OS table in *.fsm file? I have seen fsm constructor that generates these values according to (n,k) and G - is that only way to generate OS table?


On Tue, Feb 3, 2009 at 11:23 PM, Achilleas Anastasopoulos <address@hidden> wrote:

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 Foster <address@hidden>
Subject: [Discuss-gnuradio] extending gr-trellis to perform Viterbi
       MLSD on GMSK
To: gnuradio <address@hidden>
Message-ID: <address@hidden>
Content-Type: text/plain; charset="windows-1252"

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


Discuss-gnuradio mailing list

reply via email to

[Prev in Thread] Current Thread [Next in Thread]