Hi all,

apologies for not replying earlier.

So it has been quite some time since i last dealt with this problem but my
recollection is that this project is far from being able to implement a
practical CPM scheme exactly because it is not robust even to a phase
(forget about frequency) change.
It is a purely coherent system and my purpose was to illustrate how the
gr-trellis framework can be used for optimal demodulation of CPM; not to
provide a ready-to-use block.

For anyone who wants to take it to the next level, you have to incorporate
some kind of phase detection. Possibly a packetized transmission with each
packet containing a training sequence that gives initial phase estimation
followed by either (a) a decision feedback PLL (with tentative decisions
from the VA) or (b) a per-survivor processing (PSP) architecture where a
PLL is attached to each state of the trellis and is updated accordingly.
The next step (in terms of complexity) would be to implement epoch
estimation...

Both of these require modifications to the basic VA algorithms so this can
be a nice more general project: how to modify the basic VA blocks in
gr-trellis to provide tentative decisions that can be used by any type of
decision-feedback estimator.

I may give this project to a student over the summer if there is interest
for it...

best,
Achilleas













On Fri, Apr 7, 2017 at 9:49 AM, Andy Walls <a...@silverblocksystems.net>
wrote:

> So I did some thinking about how to synchronize to the 2*pi*f0*t phase
> term.
>
> After checking the papers again and the particular GMSK example in
> test_cpm.py, that phase term cycles over 4 symbol periods, so it
> definitely adds phase ambiguity.  Resetting it at every symbol is
> definitely the wrong thing to do.
>
> So I plugged in some real numbers from AIS to see what f0 actually was:
>
> Rb = 1/T = 9600 bits/sec
> h = 1/2 = f_dev / (Rb/2)  => f_dev = 2400 Hz
>
> so the AIS GMSK signaling freqs are +/-2400 Hz.
>
> From Achilleas' paper, the expression for f0 is:
>
> M = 2
> f0 = -h(M-1)/(2T) = -9600/4 = -2400 Hz
>
> So f0 is really the lower signaling frequency, at least for the
> specific case of binary MSK.  (Achilleas, maybe you can comment on what
> f0 is in the general case?)
>
> I'm thinking that if I can pick off the phase of the lower signaling
> frequency during the AIS preamble (where I know there are always spots
> of -2400 Hz when a symbol repeats ), I can properly initialize the
> phase of the the frequency shift by f0.
>
> That seems kind of hokey to me, so I'm open to better ideas.  I'd also
> like to hear if anyone thinks what I suggested will work or not.
>
> I was trying to contemplate how the t in 2*pi*f0*t could be
> incorporated into the FSM state, since this phase term appears to be
> part of the phase memory of the system, though not part of the
> modulation memory.  I couldn't see an obvious way to do that.
>
> Regards,
> Andy
>
>
> On Thu, 2017-04-06 at 15:36 -0400, Andy Walls wrote:
> > On Mon, 2017-04-03 at 09:06 -0400, Achilleas Anastasopoulos wrote:
> > > sure, feel free to look into the gr-trellis documentation and
> > > provide
> > > some feedback.
> > > If you have further questions please let us know.
> > >
> > > best,
> > > Achilleas
> >
> > Hi Achilleas:
> >
> > My objective is to implement an AIS (GMSK, BT=0.4, L=3) receiver,
> > using
> > the Viterbi algorithm for optimal demodulation of the CPM symbols.
> >
> > In examining gr-trellis/examples/python/test_cpm.py, I see that
> > everything is perfectly synchronized, for the purposes of
> > demonstration. (The addition of a 0.0 to the end of the 99% energy
> > orthonormal basis vectors for the matched filter correlators, to have
> > the taps completely fall into the initial all-0 history of the fir
> > filter blocks, was a nice trick BTW).
> >
> > In my design concept for a receiver, I believe I have worked out
> > carrier frequency offset correction, phase offset correction, symbol
> > timing recovery at either 4 or 5 samples per symbol, and injecting
> > samples to properly realign the symbols entering the decimating
> > matched
> > filter correlators when a new burst is received.
> >
> > What I can't quite figure out is how to properly synchronize the
> > correction of f0T carrier frequency shift introduced by the CPM
> > decomposition, without unintentionally adding an arbitrary phase
> > shift
> > to the symbol's signal in the CPM decomposition.
> >
> > Do I restart the complex exponential frequency shift sequence with a
> > phase of 0 at the start of each symbol?  I think that works for Q=4.
> > But what about for Q=5?
> >
> > The reason I ask is that it appears the phase of the complex
> > correlation output by the matched filters will affect the metric for
> > which CPM decomposition signal gets selected as the best match.
> >
> > Looking at the 16, 99% energy CPM decomposition signals generated by
> > the test_cpm.py script:
> >
> > > > > print abs(Sf.transpose())
> >
> > [[ 1.81592306  0.83465307]
> >  [ 1.81592306  0.83465307]
> >  [ 1.90550352  0.600571  ]
> >  [ 1.90550352  0.600571  ]
> >  [ 1.96823385  0.34970555]
> >  [ 1.96823385  0.34970555]
> >  [ 1.90550352  0.600571  ]
> >  [ 1.90550352  0.600571  ]
> >  [ 1.90550352  0.600571  ]
> >  [ 1.90550352  0.600571  ]
> >  [ 1.96823385  0.34970555]
> >  [ 1.96823385  0.34970555]
> >  [ 1.90550352  0.600571  ]
> >  [ 1.90550352  0.600571  ]
> >  [ 1.81592306  0.83465307]
> >  [ 1.81592306  0.83465307]]
> >
> > Many of the signals can only be distinguished from each other
> > properly
> > when the correlator outputs have proper phase.
> >
> > Thank you for any advice you can provide.
> >
> > Regards,
> > Andy
>
_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to