Sure. Here was the pulse normalization fix Achilleas suggested:

https://github.com/gnuradio/gnuradio/pull/636

And this is a patch for CPFSK with modulation index h=25/3 (based off the PR 
above):

https://gist.github.com/nowls/8566d649e20ac0fa6d4e

Sean

From: Dan CaJacob [mailto:dan.caja...@gmail.com]
Sent: Tuesday, September 15, 2015 2:36 PM
To: Nowlan, Sean <sean.now...@gtri.gatech.edu>; anas...@umich.edu
Cc: Discuss-gnuradio@gnu.org
Subject: Re: [Discuss-gnuradio] Demodulating CPFSK with Viterbi algorithm using 
gr-trellis

Hi Sean,

Any chance you can share your work?

On Tue, Sep 15, 2015 at 2:33 PM Nowlan, Sean 
<sean.now...@gtri.gatech.edu<mailto:sean.now...@gtri.gatech.edu>> wrote:
Thanks, that did the trick. I got about 4e-5 BER and 1.1 % PER at 6dB Es/N0 
with my particular CPFSK parameters.

From: Achilleas Anastasopoulos 
[mailto:anas...@umich.edu<mailto:anas...@umich.edu>]
Sent: Saturday, September 12, 2015 1:21 PM
To: Nowlan, Sean 
<sean.now...@gtri.gatech.edu<mailto:sean.now...@gtri.gatech.edu>>
Cc: Discuss-gnuradio@gnu.org<mailto:Discuss-gnuradio@gnu.org>

Subject: Re: [Discuss-gnuradio] Demodulating CPFSK with Viterbi algorithm using 
gr-trellis

Sean,
I guess there was a missing normalization of the pulse.
Please add the line

p=p/sum(p)*Q/2.0;
just after the definition of the p pulse

p = numpy.ones(L*Q)

In addition, make sure you increase the Q (samples per symbol) considerably, ie 
make it 16 or more. The reason is that h=25/3 results in a BIG bandwidth for 
this constellation so it has to be appropriately samples in order to be 
represented accurately.

let me know how it goes
Achilleas



On Thu, Sep 10, 2015 at 6:09 PM, Nowlan, Sean 
<sean.now...@gtri.gatech.edu<mailto:sean.now...@gtri.gatech.edu>> wrote:
Thanks, Achilleas, Jan, Jeff for your responses. I think I understand the 
format now, and I managed to build the gr-trellis documentation, which does 
spell out answers for a lot of what I asked.

I’ve abandoned making my own FSM since I can just use the CPM utilities in 
gr-trellis. However, I’m getting unexpected BER and PER when running 
gr-trellis/examples/python/test_cpm.py with my CPFSK parameters, h = 25/3 and 
L=1.

Diff of test_cpm.py with my simple modifications:
https://gist.github.com/nowls/5b2bc2aada87dc197e3f

$ python test_cpm.py
Using Volk machine: avx_64_mmx_orc
100 16868 100 0.16868 1.0
200 33852 200 0.16926 1.0
300 50786 300 0.169286666667 1.0
400 67667 400 0.1691675 1.0
[…]

As you can see, PER is 100% and BER is pretty bad for 10 dB SNR. The 
construction of the phase response, q, looks correct to me. Any idea what might 
be going wrong?

Thanks,
Sean

From: 
discuss-gnuradio-bounces+sean.nowlan=gtri.gatech....@gnu.org<mailto:gtri.gatech....@gnu.org>
 
[mailto:discuss-gnuradio-bounces+sean.nowlan<mailto:discuss-gnuradio-bounces%2Bsean.nowlan>=gtri.gatech....@gnu.org<mailto:gtri.gatech....@gnu.org>]
 On Behalf Of Achilleas Anastasopoulos
Sent: Thursday, September 10, 2015 1:28 PM
To: Discuss-gnuradio@gnu.org<mailto:Discuss-gnuradio@gnu.org>
Subject: Re: [Discuss-gnuradio] Demodulating CPFSK with Viterbi algorithm using 
gr-trellis

Sean,

I just wanted to add to the previous answer:
Indeed gr-trellis (and the fsm class specifically) has a built in constructor 
for generating the FSM corresponding to ANY CPM scheme.
It only requires three parameters as explained in the comments
in the file fsm.cc
The constructed FSM is NOT based on Proakis decomposition, but on the more 
elegant decomposition by:
"A decomposition approach to CPM", IEEE Trans. Info Theory, March 1988
  See also my own notes at
http://www.eecs.umich.edu/~anastas/docs/cpm.pdf
for all the details.
In this case for h=K/P, it does not matter whether K is even or odd, the number 
of states is always = M^{L-1} * P (where M is the cardinality of the input 
alphabet),
so in your case you'll have a trellis with 3 states as the previous email 
suggested.
You may also find useful the python utility
make_cpm_signals(K,P,M,L,q,frac)
that can be found in gr-trellis/python
that generates the signal space for you.
(please see the above references for more info).
Finally, you can take a look at the example "test_cpm.py"
in the gr-trellis/examples/python
and make appropriate changes for your CPFSK signal.

------------------------
Now you can always drop all the above and design your FSM and signals from 
scratch. You can create the FSM from a file (this is explained in the 
gr-trellis documentaion--which is generated from gr-trellis/doc/gr-trellis.xml).
The ouput symbol mapping is defined EXACTLY as you suggested in your email:
every line corresponds to the current state and every column to an input.
The entry is a number from 0 to I-1 (where I is the input cardinality).
How this index is translated to an actual signal IS NOT PART OF  THE FSM 
DEFINITION but part of the modulation definition as explained very extensively 
in the gr-trellis documentation.

let me know if you have any further questions,
Achilleas




_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org<mailto:Discuss-gnuradio@gnu.org>
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
--
Very Respectfully,

Dan CaJacob
_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to