Regular FM radio fine, POCSAG horrible

Hi Guys,

I compiled gnuradio for my ODROID ARM platform, and I can listen to
regular wideband radio just fine. I am using a Generic RTL2832U with
Rafael Micro R820T tuner.

The radio quality is fine, and even when using the rtl_fm tool
directly (off topic for this list), it works.

However, when I switch channels to 155.520 to capture POCSAG
broadcasts I cannot get a clear reception. I can’t find any decent
documentation on GR to tell me what each setting is, and I am not a
HAM radio operator so some of the basics evade me.

I can’t get decent POCSAG reception with the rtl_fm tool either, so
this is probably a setting thing somewhere.

Why can’t I get clear reception? Any pointers?


I’m a bit confused, I though POCSAG was a text pager system?

It is. I plan on running the output through a utility that can decode
However, before that can happen I need to find out how I can get a clear
reception of the broadcast.

Hi again,

Ok, I’m not familiar with the standard POCSAG, but if you got a signal
that you still need to decode with something else, how do you know you
don’t get clear reception? What is your measure for “good reception”?

As far as I read the English wikipedia, POCSAC uses a 4.5kHz binary FSK,
so can you see the two alternating frequency e.g. in a waterfall plot of
your RX signal?
Ideally, you’d directly be able to see the 512, 1200 or 2400 baud.

To explain a bit more:
GNU Radio is not a decoder for any specific standard; think of it as the
LEGO of SDR. You can build amazing things with it, in fact, there’s a
lot of examples that come with GNU Radio, and useful and complex
standard implementations (FM receiver, DTV transmission!), but if you
need to have something that’s not there, you might need to a) use
someone else’s Out-Of-Tree module or b) implement that functionality
yourself. So I must admit that I don’t have the slightest idea which
settings you’re referring to :slight_smile: Maybe you’re interested in a quick&dirty
introduction to GNU Radio [1].

In the case of POCSAG, I remember gr-pocsag being a thing (search for
pocsag on; I can’t remember the original author, and I
presume it’s pretty much dead – but I’d love to be proven wrong.
Also, pyboms has pocsag-mrt package, but that seems to rely on GNU Radio
3.6.2, if the Readme is correct, so that’s pretty dead, too.

Best regards,

[1] GitHub - iZsh/pocsag-mrt: POCSAG Multichannel Realtime Decoder

I personally think the soundbite from wikipedia is broken, since it’s
11kHz sampling rate violates Nyquist :wink:
Well, I must admit that my preferred way of analyzing this wouldn’t be
the audible reproduction; if you can see it clearly on the waterfall,
and “optically” have enough dB between the carriers and noise, then
you’ll be fine decoding it.

Now, I trust you’re actually seeing excessive noise – this might point
to problems with your receiver (unsuitable antenna, too much noise in
the amplifier, too little gain, intermodulation). The first step in
limiting noise is always adding appropriate filtering. Can you add a FIR
that selects your POCSAG channel out of your sampling bandwidth?

Best regards,

Is this just the result of using a wideband FM demodulator (200 kHz?) on
narrowband signal?


On Mon, Jun 1, 2015 at 2:47 PM, Marcus Müller [email protected]

I am sure GR can do that, but I can’t :wink:
Also, I don’t have a good waterfall at all of the pocsag broadcast,
is probably part of why I can’t make it out with my ears either. Yes, I
think I have too much noise.
I hope it can be overcome with the right settings and filters.

I’ll try to capture a screenshot of what I see. It’s nothing like the
screenshots in Wikipedia.

Hi Stephan,

so how do you get the samples into GNU Radio?
I guess you use the gr-osmosdr source?
What does your flow graph look like?

Best regards,

You’re right in that I need more than GR. The audio of a pocsag
is very distinct. It’s also clearly visible on a waterfall.
The problem is that I have too much static in there. Way too much noise.
can’t get the gqrx module (where I tune and see the waterfall) set right
the reception is fine.
I think the Wikipedia article had a soundbite of a pocsag encoding. If
listen to it you’ll notice it’s very distinct.i just have 90% noise and
can hear the broadcast in the very background.

If it can be of any help, I use POCSAG to illustrate one of the SDR labs
teach: the flowcharts are pp.4 and 5 of (don’t
mind the text in French, only look at the pictures) and the associated
are at (first two ones from the top).


I guess you use the gr-osmosdr source? which sampling rate? Where in
2. Use a xlating FIR filter to move a single 12.5kHz channel to 0Hz, so
3. You’ll notice that if you start with a high sampling rate,
4. add a real high-pass filter
5. repeat “add visualizations” :slight_smile:
POCSAG bitstream :smiley:
On 06/02/2015 12:04 AM, Stephan van Beerschoten wrote:

On Jun 1, 2015 5:47 PM, “Marcus Müller” <[email protected]
Now, I trust you’re actually seeing excessive noise – this might

    As far as I read the English wikipedia, POCSAC uses a 4.5kHz
    receiver, DTV transmission!), but if you need to have
    Also, pyboms has pocsag-mrt package, but that seems to rely
    It is. I plan on running the output through a utility that
        > Hi Guys,
        > this is probably a setting thing somewhere.

        Discuss-gnuradio mailing list
        [email protected] <mailto:[email protected]>

JM Friedt, FEMTO-ST Time & Frequency/SENSeOR, 32 av. observatoire, 25044
Besancon, France

Hi Stephan,

I am sure GR can do that, but I can’t :wink:
I can’t help but propose you change that :wink: No, seriously,
cross-compiling GNU Radio for an ARM sounds more complicated than doing
non-coherent binary FSK demod, but then again, that might just be me :D.

In fact, you’re absolutely right: getting a solid signal quality before
attempting decoding might be a good idea. However, most probably pagers
don’t need awesome SNR, so “somewhat noisy” might still be ok.

so how do you get the samples into GNU Radio?
I guess you use the gr-osmosdr source? which sampling rate? Where in
your base band are your carriers?
What does your flow graph look like?

Generally: If you have a RF recording, [1] might just profit from one
more entry, and we’d have something more tangible to talk about :slight_smile:

I’ll outline the steps I’d do to try to achieve better signal:

  1. Record a signal and test with that – doing everything live makes
    things complicated and hard to reproduce.
  2. Use a xlating FIR filter to move a single 12.5kHz channel to 0Hz, so
    that either symbol is ± 4.5kHz
    1. this will require that you design a filter. Don’t worry, that’s
      relatively easy:
      1. run gr_filter_design
      2. select low pass, enter your source’s sampling rate, set the
        end of the pass band to let’s say 5kHz and the start of the
        stop band to 7.5kHz (If I understand wikipedia correctly,
        channel spacing is 12.5kHz, and symbol deviation is
        ±4.5kHz, so from the center of the lower channel to the
        lower bit of the upper channel it’s 12.5kHz - 4.5kHz =
      3. You’ll notice that if you start with a high sampling rate,
        your filter gets ridiculously long. If that’s the case, you
        might want to reduce the sampling rate of your signal
        source, or add a stage of half- or quarter bandwidth FIR
        decimation (with a decimation factor of 2 or 4,
    2. set the decimation of that xlating FIR to something reasonable,
      so that rate_in/decimation > 12.5kHz/2, but not >>.
      1. this way, you’ll get “just enough” rate at the output.
    3. set the center frequency to the middle of your two symbol
      frequencies in the input spectrum
  3. add visualization sinks here and there, and verify :slight_smile:
  4. add a real high-pass filter
    1. Your single-channel spectrum looks something like [1] with 0 Hz
      in the middle. Since we’ve filtered away stuff above 5kHz, we’d
      now concern ourselves with filtering away everything below 4kHz.
    2. Same procedure as for the xlating fir, but use the reduced
      sampling rate and a 4 kHz high-pass with a 2kHz stop band or
      something. The closer the stop band is to pass band, the longer
      your filter gets.
    3. In principle, a 4-5 kHz real-tapped bandpass xlating fir would
      have done the same, but doing this step by step reduces error
  5. repeat “add visualizations” :slight_smile:
  6. You should now have a clean signal with only two peaks in your
    spectrum at ±4.5kHz; does your external decoder deal well with

In principle, you’re extremely close to having your own decoder by now.
Non-coherent BFSK decoding would simply do the same as step 2, but with
two filters, each centered on either symbol frequency, baudrate-wide
passband, decimating to the baudrate, followed by a
complex-to-magnituded-squared conversion each, then something like
division of the 1-filter magsquared by the 0-filter magsquared, followed
by a threshold decision (threshold=1). You’d then be getting a raw
POCSAG bitstream :smiley:

Best regards,

[1] from ,
Watkins-Johnson Company “Tech-notes Vol. 7 No. 5 September/October 1980:
FSK: Signals and Demodulation”, p. 8 FSK spectrum

That’s pretty awesome :slight_smile:

I’ve been an IT geek for over 15 years, but the frequency chatter and
filter settings are daunting to me. About 10 years ago almost got my
HAM radio license to up my personal geek factor, but I couldn’t get
myself to learn the electronic circuitry needed. I bow before you :slight_smile:

To answer your question: I only use gqrx ( right now,
and I just realized it’s something built on top of GR and not GR
This tool doesn’t really allow any custom filters. It’s a use as-is
kinda tool, but it has a lot of options.

I mean, it could just be that my physical location is just not that
good to receive these localized (county-wide only) pager broadcasts.
When I still had my fire department pager I remember that I’d
sometimes get a few alphanumeric characters garbled, indicating bad
reception. I would like to try and improve the SNR to make the
decoding work.

Discuss-gnuradio mailing list
[email protected]

Discuss-gnuradio mailing list
[email protected]

Discuss-gnuradio mailing list
[email protected]

On 06/02/2015 11:22 AM, West, Nathan wrote:

I’ve heard a complaint about something similar on ARM before that was VOLK
related. Can you set your volk_config to use the neon for
volk_32f_x2_dot_prod_32f and report back?

If the previous request is confusing just copy this file [0] to


That is the output of volk_profile run on an E310. You may get better
results running volk_profile on your hardware. Then making the change
Nathan suggests.


I ran the volk profile generator, but with the resulting volk_config
file (all other settings untouched) I don’t get any audio out of gqrx

I will play with that live cd if I can find it. It will probably work
fine on my laptop, but not so much on the ARM platform where I want to
use the POCSAG decoder utility.

My FD gets over 1200 calls a year, but I want to do big-data analytics
(somewhat) on all calls going out to all the EMS and FD agencies in my
county. There have been 9 calls in the last 15 minutes. It’s a really
heavily trafficed pager system, so there will be plenty of data for me
to play with once I figure out my reception issues,

Hey Stephan,

probably, you’ve even got a fully fledged GR installation around. If
not, I’d say: get the uber-cool LiveSDR DVD image [1], boot from it.
As soon as you have a full GR installation, you can run the GNU Radio
companion, which feels a lot like connecting together “real world
filters” with “cables”.

Actually, how many messages did you get in your firefighting days? Back
in my catastrophe protection service time, I didn’t have a pager, but I
remember these things rarely going off – luckily, not too many
catastrophes around southern Germany. That’s why I didn’t try getting
the signal myself – I didn’t assume I had a good chance of seeing it.

Best regards,