Software Defined Radio

cancel
Showing results for 
Search instead for 
Did you mean: 

POCSAG Alpha Numeric Pages with the USRP

Block Diagram and Front Panel of POCSAG functions

pocsag VI.png

Example of POCSAG encoded message

POCSAG visual.png

In this visual you can see the Preamble, Synchronization codeword, and two messages competing for the same space (Frame 3).  In the first batch, the message that started in Frame 2 spilled over into Frame 3 but didn't fill it completely, so an idle codeword finished it off.  This made the next message start in a new batch, which also spills over into the next frame.

 

About this program

 

This example program assumes you already know LabVIEW programming, are familiar with Modulation Toolkit and have previously used the USRP.

 

You can use these components and the functions built here to send one way pages to any POCSAG pager. There are several standards for pagers, the newest one being FLEX and an older one called POCSAG. This example code is meant for pagers that use the POCSAG protocol.

 

POCSAG uses frequency shift keying of 4.5 kHz for its signaling of ones and zeros.  If Fc is the carrier frequency then a 0 is represented by Fc+4.5kHz and a 1 is represented by Fc-4.5kHz.

 

A base station transmits a preamble before the actual message (if needed) to wake up any receivers that are not currently decoding information.  This preamble is a series of alternating zeros and ones with a length of at least 576 bits long. 

 

After the preamble is transmitted the information is transmitted in batches.  Each batch consists of a synchronization codeword and exactly 8 frames. The synchronization codeword is represented in hexadecimal as 0x7CD215D8.


Each frame is exactly 64 bits long and is divided up into two groups of 32 bits. The first 32 bits is the address codeword that stores the receiving pagers number (capcode).  The last 32 bits are the message codeword that actually carries the information.  A message may span multiple frames if it is long enough.

 

The address codeword always starts with a zero bit, has 18 bits for the address, two bits for source identifier, and the last 10 bits for error correction and error detection. The pager address is almost always a 7 digit number and the first 18 bits are used inside the address codeword while the last three bits determine the frame in which the address and message codeword’s start. (For example a pager capcode of 1234001 would start at frame 1).

 

The message codeword always starts with a one bit, has 20 bits for the message and 10 bits for error correction and error detection.  For alpha-numeric pages the normal 7-bit ASCII encoding is used and following convention the bits are transmitted “backwards.” Messages usually end with characters that cannot be printed on the display, such as End-of-Text or NUL characters.  For a message at least two characters (14 bits) and a EOT character (+7 more bits), you end up with 21 bits of information to send and only 20 bits of available space.  This message will spill over into the next frame’s address codeword. Numeric pages get converted into a 4 bit sequence not described here.

 

Any unused frames get filled with an idle codeword that is represented as 0x7A89C197. This includes the second half of a frame that was being used by the previous frame or frames with no information in them.

 

For a better explanation of POCSAG, check out this webpage.

Anthony F.
Staff Software Engineer
National Instruments
Comments
josasaco
Member
Member
on

Why on the GenBatc/Frame VI the add Sync CW section should be replaced with a LOOP? Does this example work without adding the LOOP or fixing the insert into sub array? Did you ever work on a receiver VI for this example? I would implement this system using the NI USRP 2920 for educational purposes. Thanks.

Contributors