# Regular FM radio fine, POCSAG horrible

**URL:** <https://www.ruby-forum.com/t/regular-fm-radio-fine-pocsag-horrible/242165>\
**Category:** GNU Radio\
**Created:** [June 1, 2015, 10:05pm UTC](https://www.ruby-forum.com/t/regular-fm-radio-fine-pocsag-horrible/242165 "2015-06-01T22:05:10Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![Detlef\_R](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/58f4c7/32.png) [@Detlef\_R](https://www.ruby-forum.com/u/Detlef_R)\
**Post date:** [June 1, 2015, 10:05pm UTC](https://www.ruby-forum.com/t/regular-fm-radio-fine-pocsag-horrible/242165/1 "2015-06-01T22:05:10Z")

</div>

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?

Stephan

---

<div class="post-metadata">

**Author:** ![Stephan\_van\_Beersch](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/67e7ee/32.png) [@Stephan\_van\_Beersch](https://www.ruby-forum.com/u/Stephan_van_Beersch)\
**Post date:** [June 1, 2015, 10:15pm UTC](https://www.ruby-forum.com/t/regular-fm-radio-fine-pocsag-horrible/242165/2 "2015-06-01T22:15:41Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Stephan\_van\_Beersch](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/67e7ee/32.png) [@Stephan\_van\_Beersch](https://www.ruby-forum.com/u/Stephan_van_Beersch)\
**Post date:** [June 1, 2015, 10:19pm UTC](https://www.ruby-forum.com/t/regular-fm-radio-fine-pocsag-horrible/242165/3 "2015-06-01T22:19:47Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Stephan\_van\_Beersch](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/67e7ee/32.png) [@Stephan\_van\_Beersch](https://www.ruby-forum.com/u/Stephan_van_Beersch)\
**Post date:** [June 1, 2015, 11:28pm UTC](https://www.ruby-forum.com/t/regular-fm-radio-fine-pocsag-horrible/242165/4 "2015-06-01T23:28:44Z")

</div>

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 🙂 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 [cgran.org](http://cgran.org)); 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,  
Marcus

[1] [GitHub - iZsh/pocsag-mrt: POCSAG Multichannel Realtime Decoder](https://github.com/iZsh/pocsag-mrt)

---

<div class="post-metadata">

**Author:** ![Stephan\_van\_Beersch](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/67e7ee/32.png) [@Stephan\_van\_Beersch](https://www.ruby-forum.com/u/Stephan_van_Beersch)\
**Post date:** [June 1, 2015, 11:49pm UTC](https://www.ruby-forum.com/t/regular-fm-radio-fine-pocsag-horrible/242165/5 "2015-06-01T23:49:11Z")

</div>

Hi!  
I personally think the soundbite from wikipedia is broken, since it’s  
11kHz sampling rate violates Nyquist 😉  
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,  
Marcus

---

<div class="post-metadata">

**Author:** ![Stephan\_van\_Beersch](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/67e7ee/32.png) [@Stephan\_van\_Beersch](https://www.ruby-forum.com/u/Stephan_van_Beersch)\
**Post date:** [June 1, 2015, 11:51pm UTC](https://www.ruby-forum.com/t/regular-fm-radio-fine-pocsag-horrible/242165/6 "2015-06-01T23:51:32Z")

</div>

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

-John

On Mon, Jun 1, 2015 at 2:47 PM, Marcus Müller [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![Stephan\_van\_Beersch](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/67e7ee/32.png) [@Stephan\_van\_Beersch](https://www.ruby-forum.com/u/Stephan_van_Beersch)\
**Post date:** [June 2, 2015, 12:05am UTC](https://www.ruby-forum.com/t/regular-fm-radio-fine-pocsag-horrible/242165/7 "2015-06-02T00:05:33Z")

</div>

I am sure GR can do that, but I can’t 😉  
Also, I don’t have a good waterfall at all of the pocsag broadcast,  
which  
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.

---

<div class="post-metadata">

**Author:** ![Stephan\_van\_Beersch](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/67e7ee/32.png) [@Stephan\_van\_Beersch](https://www.ruby-forum.com/u/Stephan_van_Beersch)\
**Post date:** [June 2, 2015, 8:14am UTC](https://www.ruby-forum.com/t/regular-fm-radio-fine-pocsag-horrible/242165/8 "2015-06-02T08:14:31Z")

</div>

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,  
Marcus

---

<div class="post-metadata">

**Author:** ![Stephan\_van\_Beersch](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/67e7ee/32.png) [@Stephan\_van\_Beersch](https://www.ruby-forum.com/u/Stephan_van_Beersch)\
**Post date:** [June 1, 2015, 11:35pm UTC](https://www.ruby-forum.com/t/regular-fm-radio-fine-pocsag-horrible/242165/9 "2015-06-01T23:35:45Z")

</div>

You’re right in that I need more than GR. The audio of a pocsag  
broadcast  
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.  
I  
can’t get the gqrx module (where I tune and see the waterfall) set right  
so  
the reception is fine.  
I think the Wikipedia article had a soundbite of a pocsag encoding. If  
you  
listen to it you’ll notice it’s very distinct.i just have 90% noise and  
I  
can hear the broadcast in the very background.

---

<div class="post-metadata">

**Author:** ![Stephan\_van\_Beersch](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/67e7ee/32.png) [@Stephan\_van\_Beersch](https://www.ruby-forum.com/u/Stephan_van_Beersch)\
**Post date:** [June 2, 2015, 9:45am UTC](https://www.ruby-forum.com/t/regular-fm-radio-fine-pocsag-horrible/242165/10 "2015-06-02T09:45:05Z")

</div>

If it can be of any help, I use POCSAG to illustrate one of the SDR labs  
I  
teach: the flowcharts are pp.4 and 5 of  
[http://jmfriedt.free.fr/tp\_sdr.pdf](http://jmfriedt.free.fr/tp_sdr.pdf) (don’t  
mind the text in French, only look at the pictures) and the associated  
videos  
are at [http://jmfriedt.free.fr/](http://jmfriedt.free.fr/) (first two ones from the top).

JM

> 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” 🙂  
> POCSAG bitstream 😃  
> On 06/02/2015 12:04 AM, Stephan van Beerschoten wrote:
> 
> > On Jun 1, 2015 5:47 PM, “Marcus Müller” \<[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
> > 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
> > > > removed_email_address@domain.invalid <mailto:removed_email_address@domain.invalid>
> > > > https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
> > > > 
> > > > ```

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

---

<div class="post-metadata">

**Author:** ![Stephan\_van\_Beersch](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/67e7ee/32.png) [@Stephan\_van\_Beersch](https://www.ruby-forum.com/u/Stephan_van_Beersch)\
**Post date:** [June 2, 2015, 9:21am UTC](https://www.ruby-forum.com/t/regular-fm-radio-fine-pocsag-horrible/242165/11 "2015-06-02T09:21:07Z")

</div>

Hi Stephan,

> I am sure GR can do that, but I can’t 😉  
> I can’t help but propose you change that 😉 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 🙂

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 =  
8kHz).
    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,  
respectively)

  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 🙂
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  
probability.

5. repeat “add visualizations” 🙂
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  
that?

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 😃

Best regards,  
Marcus

[1] from [http://edge.rit.edu/edge/P09141/public/FSK.pdf](http://edge.rit.edu/edge/P09141/public/FSK.pdf) ,  
Watkins-Johnson Company “Tech-notes Vol. 7 No. 5 September/October 1980:  
FSK: Signals and Demodulation”, p. 8 FSK spectrum  
[http://edge.rit.edu/edge/P09141/public/FSK.pdf](http://edge.rit.edu/edge/P09141/public/FSK.pdf)

---

<div class="post-metadata">

**Author:** ![Stephan\_van\_Beersch](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/67e7ee/32.png) [@Stephan\_van\_Beersch](https://www.ruby-forum.com/u/Stephan_van_Beersch)\
**Post date:** [June 2, 2015, 10:13am UTC](https://www.ruby-forum.com/t/regular-fm-radio-fine-pocsag-horrible/242165/12 "2015-06-02T10:13:07Z")

</div>

That’s pretty awesome 🙂

---

<div class="post-metadata">

**Author:** ![Stephan\_van\_Beersch](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/67e7ee/32.png) [@Stephan\_van\_Beersch](https://www.ruby-forum.com/u/Stephan_van_Beersch)\
**Post date:** [June 2, 2015, 4:25pm UTC](https://www.ruby-forum.com/t/regular-fm-radio-fine-pocsag-horrible/242165/13 "2015-06-02T16:25:15Z")

</div>

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 🙂

To answer your question: I only use gqrx ([http://gqrx.dk/](http://gqrx.dk/)) right now,  
and I just realized it’s something built on top of GR and not GR  
itself.  
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.

---

<div class="post-metadata">

**Author:** ![Stephan\_van\_Beersch](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/67e7ee/32.png) [@Stephan\_van\_Beersch](https://www.ruby-forum.com/u/Stephan_van_Beersch)\
**Post date:** [June 2, 2015, 5:23pm UTC](https://www.ruby-forum.com/t/regular-fm-radio-fine-pocsag-horrible/242165/14 "2015-06-02T17:23:41Z")

</div>

* * *

Discuss-gnuradio mailing list  
removed\_email\_address@domain.invalid  
[https://lists.gnu.org/mailman/listinfo/discuss-gnuradio](https://lists.gnu.org/mailman/listinfo/discuss-gnuradio)

---

<div class="post-metadata">

**Author:** ![Stephan\_van\_Beersch](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/67e7ee/32.png) [@Stephan\_van\_Beersch](https://www.ruby-forum.com/u/Stephan_van_Beersch)\
**Post date:** [June 2, 2015, 5:30pm UTC](https://www.ruby-forum.com/t/regular-fm-radio-fine-pocsag-horrible/242165/15 "2015-06-02T17:30:06Z")

</div>

* * *

Discuss-gnuradio mailing list  
removed\_email\_address@domain.invalid  
[https://lists.gnu.org/mailman/listinfo/discuss-gnuradio](https://lists.gnu.org/mailman/listinfo/discuss-gnuradio)

---

<div class="post-metadata">

**Author:** ![Stephan\_van\_Beersch](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/67e7ee/32.png) [@Stephan\_van\_Beersch](https://www.ruby-forum.com/u/Stephan_van_Beersch)\
**Post date:** [June 2, 2015, 4:31pm UTC](https://www.ruby-forum.com/t/regular-fm-radio-fine-pocsag-horrible/242165/16 "2015-06-02T16:31:05Z")

</div>

* * *

Discuss-gnuradio mailing list  
removed\_email\_address@domain.invalid  
[https://lists.gnu.org/mailman/listinfo/discuss-gnuradio](https://lists.gnu.org/mailman/listinfo/discuss-gnuradio)

---

<div class="post-metadata">

**Author:** ![Stephan\_van\_Beersch](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/67e7ee/32.png) [@Stephan\_van\_Beersch](https://www.ruby-forum.com/u/Stephan_van_Beersch)\
**Post date:** [June 2, 2015, 5:33pm UTC](https://www.ruby-forum.com/t/regular-fm-radio-fine-pocsag-horrible/242165/17 "2015-06-02T17:33:37Z")

</div>

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  
> ~/.volk/volk\_config.
> 
> [0]

[https://raw.githubusercontent.com/balister/meta-sdr/f1ce8601482655695cb27b06aefbf9a620a27bd0/recipes-support/volk/files/ettus-e300/volk\_config](https://raw.githubusercontent.com/balister/meta-sdr/f1ce8601482655695cb27b06aefbf9a620a27bd0/recipes-support/volk/files/ettus-e300/volk_config)

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.

Philip

---

<div class="post-metadata">

**Author:** ![Stephan\_van\_Beersch](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/67e7ee/32.png) [@Stephan\_van\_Beersch](https://www.ruby-forum.com/u/Stephan_van_Beersch)\
**Post date:** [June 2, 2015, 5:47pm UTC](https://www.ruby-forum.com/t/regular-fm-radio-fine-pocsag-horrible/242165/18 "2015-06-02T17:47:03Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Stephan\_van\_Beersch](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/67e7ee/32.png) [@Stephan\_van\_Beersch](https://www.ruby-forum.com/u/Stephan_van_Beersch)\
**Post date:** [June 2, 2015, 6:06pm UTC](https://www.ruby-forum.com/t/regular-fm-radio-fine-pocsag-horrible/242165/19 "2015-06-02T18:06:21Z")

</div>

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,

---

<div class="post-metadata">

**Author:** ![Stephan\_van\_Beersch](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/67e7ee/32.png) [@Stephan\_van\_Beersch](https://www.ruby-forum.com/u/Stephan_van_Beersch)\
**Post date:** [June 2, 2015, 5:54pm UTC](https://www.ruby-forum.com/t/regular-fm-radio-fine-pocsag-horrible/242165/20 "2015-06-02T17:54:39Z")

</div>

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,  
Marcus

[1] [http://gnuradio.org/redmine/news/52](http://gnuradio.org/redmine/news/52)
