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 (d_interp_counter & 1) // every other symbol
sample = sample * PT_45; // rotate by +45 deg
#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
Look for the block in the repeater/src/lib tree - see
[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?
73 de KA1RBI
i have an USRP1 with DRX and RFX900 daughterboard and wanted to play a
bit with the basic tetra decoder.
Which kind of daughterboard has been successfully tested with the
current osmocom tetra?
When i interpret para 4 of ETSI TS 100 392-15 it looks like the channels
are spaced at 25Khz.
The default low_pass used in all of the demods is 25Khz.
But when i look in the FFT of the complex signal, the 25Khz specified in
the cutoff_freq of firdes.low_pass causes a passband of twice the width.
Isn't this way to much? Shouldnt the cutoff_freq be 12.5Khz, giving a
passband of 25Khz? (Or is there an intentional spectral overlap between
If this is the cause, should we just change the parameter to filterwidth
or channelspacing and use a /2 in the cutoff parm?