Протокол пейджерной передачи POCSAG это последовательность цифровых импульсов с частотой 512, 1200 или 2400 импульсов в секунду.
Сигнал в POCSAG можно условно разделить на вызывающую часть (уникальный номер пейджера в дальнейшем - капкод) и информационную часть - сообщение.
Формат сигнала следующий:
1. Начальная последовательность (преамбула) - сигнал
10101010101 ... 010101010...и так далее 576 бит.
01111100110100100001010111011000
3. Дальнейший сигнал идет в виде фреймов. Количество фреймов в сообщении всегда
кратно 17. Первый - синхропосылка + 16 последующих фремов составляют
Мастерфрейм.
Формат фрейма для капкода:
0 - хххххххххххххххххх - хх - ххххххххххх | ------------------ -- ----------- | | | | индикатор ------- информационная групп. check 0-капкод, часть 18 бит код сумма пустой фр. 2 бита 11 бит или синхропосылкаФормат фрейма для сообщения:
1 - хххххххххххххххххххх - ххххххххххх | -------------------- ----------- | | | индикатор информационная check 1-сообщение часть 20 бит сумма 11 бит
Капкод в POCSAG может быть любым числом от 0000000 до 2097151, однако не рекомендуется использовать следующие значения:
2097144, 2097145, 2097146, 2097147, 2097148, 2097149, 2097150, 2097151, 2045056, 2045057, 2045058, 2045059, 2045060, 2045061, 2045062, 2045063, 2007664, 2007665, 2007666, 2007667, 2007668, 2007669, 2007670, 2007671, 0000000, 0000001, 0000002, 0000003, 0000004, 0000005, 0000006, 0000007.
Для передачи капкода используется до 16 фреймов, идущих сразу после стартового
фрейма (синхропосылки). Каждый из капкодов передается строго в своем фрейме,
номер которого определяется следующим образом:
капкод делится на 8, затем отбрасывается целая часть, а дробная часть умножается
на 8. Полученное таким образом число от 0 до 7 , является
номером фрейма, в котором передается данный капкод.
Пример:
капкод 1234567 будет передаваться в фрейме номер 7
1234567 / 8 = 154320.875
отбрасываем целую часть, а дробную умножаем на 8
0.875 * 8 = 7
Капкод 1234567 будет передан следующим образом:
2*n пустышек, т.е. 2*7=14 пустых фреймов в виде
01111010100010011100000110010111далее - индикатор фрейма капкода 0,
100101101011010000групповой код, например - 00
Следующие за фреймом капкода - фреймы данных выглядят следующим образом:
1 - индикатор фрейма данных хххххххххххххххххххх - поле информации -20 бит ххххххххххх - контрольная сумма -11 бит
Данные передаются в виде подряд идущих 7-битовых при алфавитно-цифровой
передаче и 4-битовых при цифровой передаче последовательностей.
7-битовая последовательность, прерванная в любом месте концом поля информации
фрейма, продолжается в начале поля информации следующего фрейма данных.
Оставшееся место в поле информации последнего фрейма данных добивается пустыми
символами. Контрольная сумма вычисляется по методу, изложенному ниже.
Символы в POCSAGe пеpедаются следyющим образом:
Беpется обычное двоичное пpедставление ASCII кода и пеpедаются задом
напеpед (младший бит пеpедается пеpвым):
A - 1000011 B - 0100011 пустой симв. - 0000000 и т.д.
Сообщение может занимать несколько подряд идущих мастерфреймов
Недостающее до конца последнего мастерфрейма место добивается пустыми
фреймами. За последним мастерфреймом сообщения может идти следующее
сообщение или передача прекращается.
Контрольная сумма вычисляется с помощью логической операции XOR над значениями, соответствующими ненулевым битам, содержащимся в индикаторе, поле данных и групповом коде, например контрольная сумма фрейма
000000000000001101000 (10000000101)считается следующим образом:
000000000000001000000 10111110100 XOR 000000000000000100000 01011111010 000000000000000001000 01100001011 _________________________________________ 000000000000001101000 10000000101
Т.к. в данной строке отличны от 0 биты 15,16 и 18, то из нижеприведенной таблицы
XORятся вместе с контрольными суммами строки 15,16 и 18.
N бита | Двоичное представление бита | Двоичное представление контрольной суммы |
1 | 100000000000000000000 | 11101101001 |
2 | 010000000000000000000 | 01110110101 |
3 | 001000000000000000000 | 00111011011 |
4 | 000100000000000000000 | 11110000100 |
5 | 000010000000000000000 | 01111000010 |
6 | 000001000000000000000 | 11010001001 |
7 | 000000100000000000000 | 01101000101 |
8 | 000000010000000000000 | 00110100011 |
9 | 000000001000000000000 | 11110111000 |
10 | 000000000100000000000 | 01111011100 |
11 | 000000000010000000000 | 00111101110 |
12 | 000000000001000000000 | 11110011111 |
13 | 000000000000100000000 | 10010100110 |
14 | 000000000000010000000 | 10100111011 |
15 | 000000000000001000000 | 10111110100 |
16 | 000000000000000100000 | 01011111010 |
17 | 000000000000000010000 | 11000010101 |
18 | 000000000000000001000 | 01100001011 |
19 | 000000000000000000100 | 11011101100 |
20 | 000000000000000000010 | 01101110110 |
21 | 000000000000000000001 | 11011010011 |
P.S. Собственно сам метод вычисления CRC более сложен, но тем не менее
для моих возможных кpитиков объясняю:
так как код циклический, то в поле данного кода я пpосто изложил
ноpмальные вектоpа (то бишь базис) по котоpомy спокойно вычисляется
все остальное. Метод pаботает, пpичем его аппаpатная pеализация
более пpоста, чем пpедлагаемое в БЧХ деление многочленов по
модyлю 2.
По материалам сети FIDONET за 1996 год.
Особые благодарности Black Angel за научную систематизацию и написание
этого текста.
Технический редактор: Igor Vaskov.