What is modelled. The pagers, capcodes and messages are made up. Batch structure, codewords, BCH(31,21) with even parity, the sync and idle codewords, and the numeric and alphanumeric formats follow ITU-R M.584-2, Annex 1. That Recommendation does not set the radio layer: the ±4.5 kHz FSK with the higher frequency sent for 0, and the 512, 1200 and 2400 bit/s rates, follow common POCSAG practice. The transmitter's rectangular bits (no pre-modulation filter), the controller's timing, the channel (noise, frequency offset, Rayleigh fading from a sum of 8 sinusoids) and the receiver design (a channel filter 15 kHz wide at −6 dB, 13.7 kHz noise bandwidth, and a limiter-discriminator) are modelled, not taken from a standard.
Pages and the paging schedule
Six made-up pagers share one channel. Each has a capcode, its 21-bit address. The paging controller queues pages as they arrive and, when the channel is free, sends up to four waiting pages in one transmission. Numeric pagers get digits and a few symbols; alphanumeric pagers get text; a tone-only pager just beeps.
| Time (s) | Capcode | Pager | Format | Message | Status |
|---|
Click a page to see how it is encoded in stage 2.
Batches and codewords
A transmission opens with a preamble of at least 576 alternating bits, then batches. Each batch is a sync codeword and 8 frames of 2 codewords, all 32 bits. A pager only listens for its address in one frame, set by the last 3 bits of its capcode. The address codeword carries the other 18 bits of the capcode and 2 function bits: M.584 uses 00 for numeric and 11 for text messages, and this simulator sends tone-only pages with 01. The message codewords follow directly, 20 bits each, and may run on into the next batch. Idle codewords fill the gaps.
Latest transmission
Cells show what was sent; marks show what the receiver made of it. Click a cell to inspect that codeword in stage 6.
How one page is encoded
| # | Codeword | Hex | Bits: flag · payload · BCH · parity | Carries |
|---|
The FSK signal
Each bit shifts the carrier 4.5 kHz up (a 0) or 4.5 kHz down (a 1), so a transmission shows up as two tones. The faster the bits switch, the wider each tone spreads: at 2400 bit/s the gap between them fills in. Between transmissions the channel carries only noise.
Spectrum
Waterfall newest at the top, one row per 40 ms
−24 kHz to +24 kHz, the same span as the spectrum.
Discriminator and bit decisions
An FM discriminator turns the tone's frequency into a voltage: +1 at +4.5 kHz, −1 at −4.5 kHz. The receiver smooths it, recovers the bit clock from the level crossings, and averages each bit period before comparing it with a threshold. The threshold follows the middle of the two levels, so a frequency offset between transmitter and receiver is tracked out.
Latest 48 bits
Eye diagram
The smoothed signal, two bits at a time, lined up on the recovered clock and scaled so the tracked levels sit at ±1. An open eye means clean decisions.
Preamble, bit rate and sync
The preamble alternates 1010…, so the signal crosses the threshold once per bit. The receiver times those crossings for each possible rate; when 14 of the last 16 intervals match one bit period, it knows the rate and locks its clock. It then slides the last 32 bits past the sync codeword and counts how many differ. A match within the tolerance marks the start of the first batch. The receiver also accepts the inverted word, in case its discriminator's polarity is reversed.
Latest sync detection
Hamming distance to the sync word
After each bit, the number of the last 32 bits that differ from 0x7CD215D8. It drops to near zero only where the sync codeword ends.
Crossing intervals at lock
The last 16 intervals between crossings when the rate was detected, against the bit periods of the three rates.
BCH(31,21) error correction
Each codeword carries 21 data bits, 10 check bits and an even parity bit. The check bits make the first 31 bits divisible by the generator polynomial x¹⁰+x⁹+x⁸+x⁶+x⁵+x³+1. The receiver divides and keeps the remainder, the syndrome. Zero means no error. Each one- or two-bit error pattern leaves its own syndrome, so the receiver can look it up and flip those bits back. The parity bit catches one more error, so three errors are always detected. Four errors can look like two and be "corrected" into the wrong codeword.
Selected codeword
Click bits in the received row to flip them and see what the decoder does.
Decoded messages
A message starts at an address codeword and ends at the next address or idle codeword, or after two codewords in a row that can't be corrected. Numeric messages are read 4 bits per character, text messages 7 bits per character, least significant bit first. If a codeword can't be corrected its bits are used as they are, which is how pagers end up showing garbled text.
| Time (s) | Capcode | Pager | Format | Message | Codewords | Bits fixed | Result |
|---|
Error rates against signal level
How often bits and codewords come out wrong at each Eb/N0, the energy per bit over the noise density. The curve for noncoherent FSK is the best any receiver without a phase reference can do. A reference tone-energy detector on the same samples should sit on it. The discriminator falls short, most of all at 512 bit/s, where its channel filter lets in about 27 times more noise bandwidth than the bit rate. With BCH correction, a codeword error rate of about 1 in 10 before correction drops below 1 in 100.