Thanks for including my "cqpsk.py" decoder module in your distribution.
That looks to be a very old version and there have been some further
discoveries since that time which I wanted to pass along, FWIW...
First, the Costas frequency lock loop in GR seems to work much better
for PI/4 DQPSK signals if it's patched in phase_error_tracking() :
#if ENABLE_COSTAS_CQPSK_HACK
if (d_interp_counter & 1) // every other symbol
sample = sample * PT_45; // rotate by +45 deg
d_interp_counter++;
#endif /* ENABLE_COSTAS_CQPSK_HACK */
The effect of adding this hack to the code can be seen in Fig. 10 at
my page
http://www.lightlink.com/mhp/lsm/
With the patch included, the time to achieve lock is much improved...
Second, I've found that a Gardner symbol timing loop works much better
in our application than the M&M loop used in GR gr_mpsk_receiver().
Both of these improvements are included in a new GR block which has
been optimized for the particular flavor of "PI/4 CQPSK" (LSM). It's in our
svn repo - see
http://sedition.org.au/op25/wiki/BuildInstructionsPage
Look for the block in the repeater/src/lib tree - see
repeater_gardner_costas_cc.cc
YMMV ;-)
[update: Tues. morning] two more things...
1. There is also a new Polyphase Filter Bank receiver which has been added in the latest
versions of GNU Radio. It would be interesting to test and compare the performance of
that receiver with the current one...
2. Would it be possible to post complex sample files (preferably not encrypted) to permit
evaluation of this signal type?
Best Regards
73 de KA1RBI
Max