Skip to main content

Overview

NOAA SAME (Specific Area Message Encoding) is a digital protocol used by the National Weather Service for broadcasting emergency weather alerts over NOAA Weather Radio. Operating at 520.83 baud, SAME headers encode information about alert type, affected areas, and validity period using a structured message format.

Technical Specifications

Frequencies and Timing

Baud Rate: 520.833… bps (520 + 5/6)
Mark Frequency (1): 2083.333… Hz (2083 + 1/3)
Space Frequency (0): 1562.5 Hz
Data Bits: 8
Framing: No start/stop bits
Sync Byte: 0xAB (binary 10101011)
From minimodem.c:837-848:
  • Data rate: 520.0 + 5/6.0 = 520.833… baud
  • Mark frequency: 2083.0 + 1/3.0 = 2083.333… Hz
  • Space frequency: 1562.5 Hz
  • Start bits: 0
  • Stop bits: 0
  • Sync enabled with 16 sync bytes (0xAB) for transmission
  • Bandwidth: 520.83 Hz (matches data rate)

Framing Parameters

Unlike standard serial protocols, NOAA SAME uses:
  • No start bits
  • No stop bits
  • Continuous 8-bit data stream
  • Sync byte preamble (0xAB repeated 16 times)
This is a synchronous protocol, not asynchronous like most serial formats.

SAME Message Format

A complete NOAA SAME message consists of:

1. Preamble

  • 16 sync bytes (0xAB = 10101011)
  • Allows receivers to achieve bit synchronization

2. Header (Repeated 3 times)

ZCZC[ORG]-[EEE]-[PSSCCC]+[TTTT]-[JJJHHMM]-[LLLLLLLL]-
Example:
ZCZCWXR-RWT-020103-020209-020091-020121-029047-029165-029095-029037+0030-1051700-KEAX/NWS-

Field Breakdown

FieldDescriptionExample
ZCZCWXRAFSK preamble and organizationZCZCWXR
ORGOriginator codeWXR (Weather)
EEEEvent codeRWT (Required Weekly Test)
PSSCCCLocation codes (FIPS)020103 (county code)
+TTTTValid time period+0030 (30 minutes)
JJJHHMMIssue time (Julian day, hour, min)1051700
LLLLLLLLSender callsignKEAX/NWS

3. Audio Attention Signal

  • 1050 Hz tone (EAS attention signal)
  • Duration varies by event severity
  • Not part of SAME data transmission

4. Voice Message

  • Human-readable weather announcement
  • Standard FM audio transmission

5. End-of-Message (EOM) Marker

ZCZCNNN
  • Transmitted 3 times
  • Signals end of alert

Common Event Codes

Weather Warnings

CodeEvent
TORTornado Warning
SVRSevere Thunderstorm Warning
FFWFlash Flood Warning
EWWExtreme Wind Warning
SVSSevere Weather Statement

Watches and Advisories

CodeEvent
TOATornado Watch
SVASevere Thunderstorm Watch
FFAFlash Flood Watch
WSWWinter Storm Warning
WWAWinter Weather Advisory

Tests and Administrative

CodeEvent
RWTRequired Weekly Test
RMTRequired Monthly Test
DMOPractice/Demo Warning
ADRAdministrative Message

Usage Examples

Receiving NOAA SAME

# Tune radio to 162.400-162.550 MHz, pipe audio to minimodem
arecord -f S16_LE -r 22050 | minimodem --rx same

Transmitting NOAA SAME

echo -n "ZCZCWXR-RWT-012345+0100-1234567-NOCALL/NWS-" | minimodem --tx same
Important: Transmitting actual emergency alerts without authorization is illegal. Only use demo/test codes (DMO, RWT) and never broadcast on official NOAA frequencies.

Decoding and Parsing

Extract Headers Only
minimodem --rx same -f alert.wav | grep "ZCZCWXR"
Monitor with Timestamps
minimodem --rx same 2>&1 | while read line; do
  echo "[$(date '+%Y-%m-%d %H:%M:%S')] $line"
done

Technical Details

Frequency Selection

The SAME frequencies were carefully chosen:
  • 2083.33 Hz and 1562.5 Hz are harmonics-friendly
  • Fall within NOAA Weather Radio bandwidth
  • Distinct from voice frequencies
  • Allow simple FSK detection

Baud Rate Precision

The exact baud rate of 520.833… (520 + 5/6) baud is critical:
  • Derived from AFSK tone frequencies
  • Maintains precise timing for sync byte detection
  • Must be exact for proper decoding

Synchronization Method

The 0xAB (10101011) sync byte creates an alternating pattern:
  • Produces continuous mark/space transitions
  • Allows bit clock recovery
  • 16 repetitions ensure reliable lock
  • Distinct from typical data patterns

No Start/Stop Bits

SAME uses synchronous transmission:
  • Continuous bit stream without framing bits
  • Reduces overhead (no start/stop bits per byte)
  • Requires precise timing and sync preamble
  • More efficient for short, structured messages

NOAA Weather Radio Frequencies

NOAA Weather Radio broadcasts on 7 VHF frequencies:
  • 162.400 MHz (WX1)
  • 162.425 MHz (WX2)
  • 162.450 MHz (WX3)
  • 162.475 MHz (WX4)
  • 162.500 MHz (WX5)
  • 162.525 MHz (WX6)
  • 162.550 MHz (WX7)
Find your local frequency at weather.gov/nwr

Building a SAME Receiver

Hardware Requirements

  1. VHF Radio Receiver
    • Covers 162.400-162.550 MHz
    • FM mode with audio output
    • Scanner or weather radio
  2. Audio Interface
    • Connect radio audio output to computer
    • Line-level or microphone input
    • 22.05 kHz sample rate or higher
  3. Software
    • minimodem for SAME decoding
    • Audio recording tool (arecord, sox, etc.)

Software Setup

Complete Monitoring Script
#!/bin/bash
# Monitor NOAA Weather Radio for SAME alerts

while true; do
  arecord -f S16_LE -r 22050 -c 1 | \
    minimodem --rx same 2>&1 | \
    while read -r line; do
      if [[ $line == ZCZCWXR* ]]; then
        echo "[ALERT] $(date): $line"
        # Add your alert handling here (notify, log, etc.)
      fi
    done
  sleep 1
done

Parsing SAME Headers

Example Python script to parse SAME messages:
import re

def parse_same(header):
    pattern = r'ZCZCWXR-(\w{3})-(\d{6}(?:-\d{6})*)[\+\-](\d{4})-(\d{7})-(\w+/\w+)-'
    match = re.match(pattern, header)
    
    if match:
        return {
            'event': match.group(1),      # EEE
            'locations': match.group(2).split('-'),  # FIPS codes
            'duration': match.group(3),   # +TTTT
            'timestamp': match.group(4),  # JJJHHMM
            'callsign': match.group(5)    # LLLLLLLL
        }
    return None

# Example usage
header = "ZCZCWXR-TOR-012345-012346+0100-1234567-KEAX/NWS-"
result = parse_same(header)
print(f"Event: {result['event']}, Duration: {result['duration']} minutes")

Signal Quality Requirements

  • Minimum SNR: 15 dB for reliable decoding
  • Frequency stability: ±10 Hz maximum
  • Sample rate: 22.05 kHz recommended (8 kHz minimum)
  • Audio bandwidth: 1000-3000 Hz
Legal Restrictions:
  • Do NOT transmit on NOAA frequencies (162.400-162.550 MHz)
  • Only authorized NWS facilities may broadcast alerts
  • Use demo/test codes only (DMO, RWT)
  • Never simulate real emergencies
FCC Regulations:
  • Part 11 governs Emergency Alert System
  • Unauthorized EAS transmissions are federal offenses
  • Hefty fines and criminal penalties apply

Troubleshooting

No SAME Headers Detected

  • Verify radio is tuned correctly
  • Check audio levels (not too loud or quiet)
  • Ensure 22.05 kHz sample rate or higher
  • Wait for actual alert (may be rare)

Garbled Headers

  • Improve antenna and signal strength
  • Reduce audio noise and interference
  • Check frequency accuracy of radio
  • Adjust audio input gain

Sync Issues

  • SAME requires precise timing
  • Use stable audio sample rate
  • Minimize CPU load during reception
  • Check for audio dropouts

Advantages of SAME

Automated Alerting

  • Machine-readable alert data
  • Selective activation by location
  • No human intervention required
  • Immediate alert dissemination

Geographic Specificity

  • FIPS codes target specific counties
  • Prevents alert fatigue
  • Users only hear relevant alerts
  • Multiple location codes per message

Reliability

  • Robust FSK modulation
  • Triple redundancy (3 headers)
  • Sync byte for timing recovery
  • Works in noisy conditions

References

See Also

Build docs developers (and LLMs) love