discuss-gnuradio
[Top][All Lists]
Advanced

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

[Discuss-gnuradio] Demodulating APCO P25 signals


From: stevie.glass
Subject: [Discuss-gnuradio] Demodulating APCO P25 signals
Date: Mon, 18 Feb 2008 13:03:20 +1000
User-agent: Mozilla-Thunderbird 2.0.0.9 (X11/20080109)

Hi,

I'm trying to demodulate P25 signals using GNURadio.

The specification says I should be able to use a single common DQPSK receiver to recover either the 4 level FM  (C4FM) or the CQPSK signals - the difference being channel bandwidth (12.5KHz vs 6.25KHz) and that the DQPSK is also amplitude as well as phase modulated. For my first attempt I've used the GNURadio DQPSK block - here's what I've done:
  • Capture live data using usrp_rx_cfile.py (the sampling rate is 256KS/S so over 2MB for a short sample) [#1]. A screen capture of the FFT (peak hold) can be found at [#2].
  • Extract a 12.5KHz channel the capture and write the complex baseband signal to file [#3]. So the spectrum now looks like [#4] and an oscope snapshot is shown in [#5]. The final display seems to show a phase-shifted signal so I am pretty confident this far is ok.
  • Wrote a program [#6] to take the complex baseband sample, resample it (so the sampling rate is an integer multiple of the symbol rate and at least 4x the highest possible component frequency of the signal), and demodulate it using the DQPSK block. The output is the dibit stream corresponding to the signals.
I am not convinced the output its right - I'm not finding the frame sync sequence that should be present in the symbol stream. I'm thinking that perhaps the standard block isn't suitable for my use. Can anyone advise?

The other thing that causes me to think its not right is that according the spec P25 uses a form of DQPSK where each successive symbol is shifted in phase from its predecessor by 45 degrees (pi/4 radians). Yet the spec also includes the following table which seems to shows a 90 shift between symbols. I am confused about the spec and unsure as to what the DQPSK block expects.

Dibits
Symbol
CQPSK Phase Change (degrees)
C4FM Deviation (KHz)
01
+3
+135
+1.8
00
+1
+45
+0.6
10
-1
-45
-0.6
11
-3
-135
-1.8

So, is this really a pi/4 encoding or pi/2? Is the DQPSK block suitable for demodulating P25? Am I using sensible values for the M&M clock recovery/channel filter? Are there any other obvious mistakes?

On a related note, there's a demodulator for a very similar system (RD-LAP) described at http://radiorausch.googlepages.com. The author has much more signal processing chops than I (the described code doesn't use the DQPSK demod block but a custom one). Sadly, there's no code or contact email there. If anyone knows the author perhaps they'll point them to me so I can beg or borrow that code.

Steve

[1] original signal as capured by usrp_rx_cfile (2MB file)
[2] FFT peak values of original sampled signal
[3] complex baseband signal (2MB file)
[4] FFT peak values for baseband signal
[5] oscilloscope snapshot of part of the baseband signal
[6] Demodulator program demod_file_p25.py (warning for svn trunk users: this code still uses gr.flow_graph!)


reply via email to

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