📡
RDS RAW Decoder
Client Application Documentation
HTML Client: rds-raw-decoder.html
JS Engine: rds-raw-decoder.js
Version: 1.0
v1.0
Table of Contents
1What is the RDS RAW Decoder?
2Operational Modes
2.1Live Mode (WebSocket)
2.2File Mode (CSV Analysis)
3Core Features
3.1Deep Scan Mode
3.2Browser-Based AI Predict Engine
3.3Memory Quick-Slots
4Understanding the User Interface
4.1The Main Summary Row
4.2The Realtime Decoder Log (Expanded View)
5Technical Details & Decoding Logic
5.1Error String Visualization
5.2Chimera Detection and Frame Locking
5.3Local IndexedDB Caching
1 · What is the RDS RAW Decoder?
The RDS RAW Decoder & AI Inspector is a standalone, client-side web application designed for FM-DXers to visualize, analyze, and diagnose raw RDS (Radio Data System) hexadecimal blocks. While traditional tools abstract the RDS stream into finished strings (like the station name or RadioText), this application allows you to peek under the hood and view the exact data packets your receiver is producing.
It is specifically built to help decode heavily corrupted signals retrieved during meteor scatter, tropospheric ducting, or Sporadic-E propagation, where complete RDS groups are rarely received intact.
Key Difference from the AI Server Plugin: The server-side AI Decoder acts as an invisible background filter that repairs data for the main web UI. The RAW Decoder is a frontend inspector. It is a debugging and analysis dashboard that provides deep insights into block error rates, corrupted bit groupings, and real-time AI logic.
2 · Operational Modes
The application supports two primary workflows, allowing both real-time observation and post-event forensics.
2.1 · Live Mode (WebSocket)
By entering the WebSocket URL of your FM-DX server (e.g., http://192.168.1.100:4080) into the top navigation bar and clicking Connect, the application establishes a direct line to your receiver hardware.
- It subscribes to the
/rds, /text, and /data_plugins WebSocket endpoints.
- It instantly begins parsing raw 16-character RdsSpy-formatted strings.
- Live location and server identification are automatically fetched via the FMDX global API to display your server's flag and location.
2.2 · File Mode (CSV Analysis)
If you have previously used the server-side RDS AI Plugin (v2.7+) to record a raw data stream, you can load the resulting CSV file into the RAW Decoder using the 📁 Load CSV button.
- The application automatically disconnects from live WebSockets.
- It reconstructs the exact timeline of the recording, parsing thousands of historical groups in milliseconds.
- You can enable the AI Predict mode post-recording to see if the AI can resolve the station name from the scattered historical bits.
3 · Core Features
3.1 · Deep Scan Mode
Activated via the top toolbar, Deep Scan Mode enforces maximum strictness on incoming data. It is designed for environments with extreme noise where hardware CRC might hallucinate phantom PI codes.
- Strict PI Validation: If an incoming RDS group has more than 1 uncorrected error in Block 1, the entire group is instantly dropped.
- Overrides AI Injectors: It ignores any previously calculated or CSV-imported AI data, forcing the engine to evaluate the raw hex data purely from scratch.
- Auto-Clears Tables: Activating Deep Scan immediately flushes the UI table, awaiting strictly verified error-0 or error-1 blocks.
3.2 · Browser-Based AI Predict Engine
Unlike the server plugin, the RAW Decoder implements a powerful, client-side AI prediction engine. By clicking AI Predict: ON, the browser takes over the prediction logic.
When a fragmented PS name is received (e.g., only the letters _N___N__), the engine queries the maps.fmdx.org API. It compares the decoded character pairs against known database frames. It evaluates "Perfect Frames" (where every decoded character aligns perfectly with the database) and "Chimeras" (where pairs might match, but not sequentially in the same variant). Based on this, it colors the prediction Green (Unambiguous), Orange (Ambiguous), or Red (Mismatch).
3.3 · Memory Quick-Slots
To facilitate fast switching between multiple receivers, the application features 10 memory buttons (MEM1 through MEM10).
- Save: Click and hold (Long-press, ~600ms) an empty or existing MEM slot to save the current WebSocket URL.
- Connect: A quick click on a saved MEM slot will instantly populate the URL bar and attempt a connection.
- Active Indicator: The currently connected slot will highlight with a red border.
4 · Understanding the User Interface
4.1 · The Main Summary Row
The primary table view collapses complex data streams into single, manageable rows per station. Key columns include:
- PI Code: The 16-bit Programme Identification code.
- PS Name: The live-building Programme Service name. Black letters indicate characters successfully decoded from the raw stream; grey letters indicate AI-filled predictions.
- AI PS Name: The FMDX database prediction, accompanied by confidence percentage, transmitter location, and a visual ITU national flag.
- Radiotext (RT): Shows both RT A and RT B streams independently, visualizing carriage returns as neat
<0D> badges.
- PTY / Flags: Highlights Programme Type, Traffic Announce (TA), Traffic Program (TP), and Stereo indicators.
4.2 · The Realtime Decoder Log (Expanded View)
Clicking any main row expands the Realtime Decoder Log. This is the heart of the raw analysis tool, displaying the last 100 valid data groups for that specific station.
Time Blk 1 Blk 2 Blk 3 Blk 4 Errs Group Decoding Action
───────────────────────────────────────────────────────────────────────────
13:40:02 D3C3 0142 ---- ---- 0033 0A Group 0A (No PS decoded)
13:40:02 D3C3 0142 6664 5254 0000 0A PS Seg 1: 'RT' → [ __RT____ ]
13:40:03 D3C3 2034 ---- 4C20 0031 2A Radiotext Seg: 'L '
- Blk 1 to Blk 4: The raw hexadecimal representation of the four RDS blocks.
- Errs: The error string (e.g.,
0033). Green text indicates perfection, orange indicates correctable errors, and red indicates fatal block loss.
- Decoding Action: A human-readable translation of the hex data, showing exactly which characters were extracted and placed into the buffer.
5 · Technical Details & Decoding Logic
5.1 · Error String Visualization
The TEF hardware passes an error string with every group. The RAW Decoder visualizes this string extensively:
0: Block perfectly received.
1: 1-bit error corrected by hardware. (Treated as perfect by the decoder).
2: Uncorrectable error. (Data highlighted in orange; can sometimes still yield partial RT characters).
3: Fatal loss / No sync. (Data highlighted in red; block is marked as ----).
Using the Hide Errors checkbox in the top menu filters out any row containing a '3' in the error string, giving you a clean log of only readable data.
5.2 · Chimera Detection and Frame Locking
When the AI Predict mode analyzes matching stations, it uses a sophisticated multi-pass algorithm:
- Extraction: It pulls all valid PS frames from the FMDX database for the given frequency and PI code.
- Perfect Fit: It checks if the currently decoded pairs (e.g.,
R and T at positions 0 and 1) fit perfectly into the variant (e.g., RTL_____).
- Chimera Check: If the signal is fading rapidly, the receiver might accidentally combine characters from a scrolling text frame with the static name frame. The algorithm verifies if every received pair can be found in at least one frame of the station. If so, it flags it as a "Chimera", indicating the station is correct, but the display buffer is currently mixed.
5.3 · Local IndexedDB Caching
To prevent overwhelming the FMDX servers and to ensure immediate UI responsiveness, the AI engine uses the browser's native IndexedDB to cache FMDX API responses.
When a frequency is polled (e.g., 104.6), the response is stored in fmdxAiPredictCacheDB. The cache is considered valid for 7 days. This allows the tool to rapidly iterate through hundreds of rows in a loaded CSV without sending a single external HTTP request after the initial load.