Сила природы способна впечатлять своей красотой, и она же порой вызывает у нас самый настоящий ужас. Бури, ураганы и торнадо ежегодно лишают жизни сотни людей и приносят ущерб на десятки миллиардов долларов. Предотвратить такие явления нельзя, но если своевременно проинформировать о грядущем катаклизме, то можно сильно снизить количество жертв и сократить финансовые потери.
В США этим занимается агентство National Weather Service (NWS), и именно их усилиями граждане своевременно получают оповещения об экстремальной погоде. В этой публикации мы коснемся одного из способов с помощью протокола S.A.M.E. Надевайте дождевики, запасайтесь фонариками и спичками — сегодня посмотрим, как выглядит предупреждение о торнадо, и даже сгенерируем радиосигнал об этом своими руками.

NOAA Weather Radio
Мы уже рассказывали, что у NWS есть большое количество источников данных — начиная от сотен метеорологических станций и заканчивая сетью из 6 700 волонтеров, ежедневно сообщающих о наблюдаемых погодных явлениях. Когда становится ясно, что они станут опасными на какой-либо территории, в радиоэфир выпускается специальное предупреждение. Такое оповещение можно принять на любой радиоприемник или VHF-рацию, поддерживающую прием в морском диапазоне (используются частоты от 162.400 MHz до 162.550 MHz).
Многие производители радиооборудования реализуют Weather Radio в виде отдельной фичи. Например, всеми любимый «народный» Quansheng UV-K5/K6 прямо заявляет о поддержке приема погодных оповещений, хотя эти станции не сертифицированы в США:

На практике это значит, что в стоковой прошивке уже занесены все частоты, на которых передается экстренный сигнал оповещения. У этого трансивера есть возможность работать одновременно на двух частотах. Если углубиться в детали, то там нет двух отдельных радиотрактов, просто трансивер быстро переключается с одной частоты на другую и останавливается там, где появляется сигнал.
Чтобы включить прием погодных оповещений, нужно сделать два простых действия:
Активировать опцию NOAA_S (номер 49 в стоковой прошивке).
Нажать последовательно клавиши F и 5, после чего трансивер автоматически перейдет на первый погодный канал на частоте 162.550 MHz.
Пользователю может показаться, что опция работает неправильно, ведь даже если есть полезный сигнал (горит зеленый индикатор), динамик будет молчать. Но это не баг, а фича. Если нужно прослушать текущий прогноз погоды, то достаточно нажать кнопку мониторинга (обозначена ■, расположена под PTT). Но настоящая магия тут в другом.
Дело в том, что определенный сигнал на канале способен сам переключить ваш трансивер в режим мониторинга, чтобы вы услышали предупреждение. Все остальное время динамик выключен, дабы не тратить батарею. Если же говорить о более продвинутых и современных радиоприемниках, то они способны еще и выдавать текстовое сообщение вместе с голосовым, декодируя поступающую информацию в цифровом виде по протоколу S.A.M.E.
Сигнал пробуждения
Когда нужно было выбрать частоту для такого сигнала, инженеры NOAA изначально выбирали из диапазона 800–1 600 Hz. Наиболее правильной казалась 1 000 Hz, поскольку ее было очень легко отфильтровать, а также она традиционно использовалась в телефонных системах для тоновой сигнализации. Но был и серьезный «подводный камень». Эту частоту много где задействовали в роли опорного тона, а значит, возможность ложного срабатывания резко увеличивалась.
В радиовещательной и телефонной аппаратуре тех лет (речь идет о 70-х), помимо 1 000 Hz, активно использовались частоты 440 Hz и 700 Hz, а также их гармоники. Нужно было, чтобы тон пробуждения выпадал из этой условной сетки. В итоге остановились на частоте 1 050 Гц, которая стала разумным компромиссом. Ее можно было легко выделить без сложных микросхем, она очень проста для реализации и на слух хорошо узнаваема — противный, резкий звук, легко ассоциируемый с аварийным сигналом.
Для уменьшения вероятности ложного срабатывания такой тон должен прозвучать в эфире не менее 10 секунд. Этого достаточно, чтобы «разбудить» радиоприемники с поддержкой NOAA Weather Radio и включить их на прием. Многие из них еще выставляют средний уровень громкости, даже если ранее вы сделали тише или вообще заглушили звук с помощью кнопки Mute.
Для старых радиоприемников магия заканчивается на автоматическом включении, но вот новые способны декодировать цифровую часть сигнала, а не только тон 1 050 Hz. Чтобы понять, о чем идет речь, имеет смысл заглянуть в сами сообщения.
Структура S.A.M.E.
Проще всего разобраться с тем, как именно выглядит S.A.M.E., можно на примере строки с данными:
ZCZC-WXR-TOR-020173+0200-2300200-HABRHABR-
Начинается она с символов ZCZC. Это самый настоящий цифровой исторический артефакт. В международной телеграфной связи так обозначали начало сообщения. Здесь им была отведена похожая роль — маячка начала пакета (preamble marker).
Далее идет трехзначный код инициатора сообщения. Наша придуманная строка отправлена из агентства National Weather Service, которое обозначается кодом WXR в таблице S.A.M.E. После этого идет следующий код TOR, обозначающий тип оповещения (в нашем случае торнадо).
Таблицу со всеми кодами вы можете посмотреть под спойлером:
Код |
Описание |
Код |
Описание |
ADR |
Administrative Message |
AVA |
Avalanche Watch |
AVW |
Avalanche Warning |
BHW |
Biological Hazard Warning |
BWW |
Boil Water Warning |
BZW |
Blizzard Warning |
CAE |
Child Abduction Emergency |
CDW |
Civil Danger Warning |
CEM |
Civil Emergency Message |
CFA |
Coastal Flood Watch |
CFW |
Coastal Flood Warning |
CHW |
Chemical Hazard Warning |
CWW |
Contaminated Water Warning |
DBA |
Dam Watch |
DBW |
Dam Break Warning |
DEW |
Contagious Disease Warning |
DMO |
Demo Warning |
DSW |
Dust Storm Warning |
EAN |
Emergency Action Notification |
EAT |
Emergency Action Termination |
EQW |
Earthquake Warning |
EVA |
Evacuation Watch |
EVI |
Evacuation Immediate |
EWW |
Extreme Wind Warning |
FCW |
Food Contamination Warning |
FFA |
Flash Flood Watch |
FFS |
Flash Flood Statement |
FFW |
Flash Flood Warning |
FLA |
Flood Watch |
FLS |
Flood Statement |
FLW |
Flood Warning |
FRW |
Fire Warning |
FSW |
Flash Freeze Warning |
FZW |
Freeze Warning |
HLS |
Hurricane Local Statement |
HMW |
Hazardous Materials Warning |
HUA |
Hurricane Watch |
HUW |
Hurricane Warning |
HWA |
High Wind Watch |
HWW |
High Wind Warning |
IBW |
Iceberg Warning |
IFW |
Industrial Fire Warning |
LAE |
Local Area Emergency |
LEW |
Law Enforcement Warning |
LSW |
Land Slide Warning |
NAT |
National Audible Test |
NIC |
National Information Center |
NMN |
Network Message Notification |
NPT |
National Periodic Test |
NST |
National Silent Test |
NUW |
Nuclear Plant Warning |
POS |
Power Outage Statement |
RHW |
Radiological Hazard Warning |
RMT |
Required Monthly Test |
RWT |
Required Weekly Test |
SMW |
Special Marine Warning |
SPS |
Special Weather Statement |
SPW |
Shelter in Place Warning |
SSA |
Storm Surge Watch |
SSW |
Storm Surge Warning |
SVA |
Severe Thunderstorm Watch |
SVR |
Severe Thunderstorm Warning |
SVS |
Severe Weather Statement |
TOA |
Tornado Watch |
TOE |
911 Outage Emergency |
TOR |
Tornado Warning |
TRA |
Tropical Storm Watch |
TRW |
Tropical Storm Warning |
TSA |
Tsunami Watch |
TSW |
Tsunami Warning |
VOW |
Volcano Warning |
WFA |
Wild Fire Watch |
WFW |
Wild Fire Warning |
WSA |
Winter Storm Watch |
WSW |
Winter Storm Warning |
Вспоминая прекрасное произведение Александра Волкова «Волшебник Изумрудного города», я решил, что предупреждение о торнадо имеет смысл сгенерировать для какого-либо из округов штата Канзас. Для примера я взял округ Седжвик (Sedgwick County), FIPS-код которого — 020173. В некоторых радиоприемниках можно специально выбрать код своей местности, чтобы отключить лишние срабатывания.
Следующие символы +0200 обозначают, что предупреждение будет актуально еще 02 часа и 00 минут. А вот далее довольно любопытный способ указания даты и времени начала действия — 2300200. На самом деле тут две группы цифр: 230 — 230-й день текущего года, ну а 0200 — время в UTC. В итоге комбинация 2300200 означает 18 августа 2025 года 02:00 UTC.
Заключительным элементом строки является идентификатор станции, отправившей сообщение (Sender ID). В нашем примере это HABRHABR, но в реальных условиях было бы что-то вроде KWNS/NWS (Storm Prediction Center). Протокол допускает в этой части максимум 8 символов. Подводя итог, на английском языке такая строка могла бы звучать следующим образом:
The National Weather Service in Wichita has issued a Tornado Warning for Sedgwick County in south central Kansas, effective until 11 PM Central Daylight Time.
На русском это переводится примерно так:
«Национальная служба погоды в городе Уичито объявила предупреждение о торнадо для округа Седжвик в южно-центральной части Канзаса. Предупреждение действительно до 23:00 по центральному летнему времени».
Теперь давайте посмотрим на то, как полностью выглядит оповещение по этапам:
S.A.M.E.-строка трижды (модуляция FSK).
Тон 1 050 Hz длительностью 10 секунд.
Голосовое сообщение.
Завершающий код NNNN (модуляция FSK, еще один привет из эпохи телеграфа).
Вы можете самостоятельно попробовать собрать WAV-файл с такой строкой при помощи онлайн-инструмента https://cryptodude3.github.io/same/.
Если у вас есть приемник с поддержкой NOAA Weather Radio и одноплатник Raspberry Pi, то вы без проблем сможете протестировать его, передав WAV-файл через GPIO-пин «малинки». Делается элементарно, проверял на Raspberry Pi 4. Обновляем пакеты и ставим клиент git (если не установлен):
$ sudo apt-get update && sudo apt-get install git
Клонируем репозиторий проекта RPITX:
$ git clone https://github.com/F5OEO/rpitx
Переходим в скачанную директорию:
$ cd rpitx
И запускаем скрипт установки. Обратите внимание, что в процессе работы нужно обязательно дать разрешение ему менять содержимое /boot/config.txt. Собственно, там он принудительно задаст частоту GPU, равную 250 MHz:
$ ./install.sh
Останется лишь перезагрузить одноплатник:
$ sudo reboot
Далее нужно подключить к пину GPIO 4 небольшой кусок провода, который будет играть роль антенны. Автор проекта, конечно, предупреждает, что нельзя включать передачу без подключенного band-pass-фильтра:

В его словах есть резон, ведь GPIO-пин напрямую модулирует на нужной частоте. Если мы попробуем излучать напрямую, то тем самым создадим кучу гармоник:
162.550 MHz (основная).
325.100 MHz (2-я).
487.650 MHz (3-я).
650.200 MHz (4-я).
812.750 MHz (5-я).
975.300 MHz (6-я).
1137.850 MHz (7-я).
1300.400 MHz (8-я).
1462.950 MHz (9-я).
1625.500 MHz (10-я).
Несмотря на малую мощность, RPITX способен породить весьма «грязный» спектр, который может потенциально привести к нарушению местного законодательства. Если надумаете экспериментировать дома, то полосовой фильтр нужен в обязательном порядке.
Как альтернатива — закинуть Raspberry PI и приемник в простейшую «клетку Фарадея» из коробки, оклеенной фольгой без щелей. Но самым правильным способом будет вообще не выдавать сигнал в антенну, а через аттенюатор 30–40 dB подать его непосредственно в приемник. Дополнительно можно еще и нагрузку 50 Ω добавить для спокойствия.
Для проверки работы воспользовался штатным скриптом:
$ ./easytest.sh

Заключение
NOAA Weather Radio — уникальная система, которая дает возможность оперативно оповещать население об экстремальных погодных условиях. Большим преимуществом является то, что для получения предупреждения достаточно бытового радиоприемника на батарейках или дешевой радиостанции, такой как Quansheng UV-K5. Особенно это ценно в условиях, когда привычные каналы связи вроде интернета или сотовой сети недоступны или перегружены.
Минус — то, что работает это исключительно на территории США. В Японии существует похожая система под названием J-Alert, которая вещает как через наземные станции, так и со спутника Superbird-B3. От землетрясения и цунами до летящей баллистической ракеты со стороны КНДР — все это практически мгновенно превращается в оповещения для жителей страны восходящего солнца.
А вам было бы интересно узнать о том, как работает J-Alert? Жду вас в комментариях!
SergeiPod
Поддержка SAME есть в моей виндовой программе SeaTTY.