Skip to content

Some RadioText research

Oona Räisänen edited this page Sep 29, 2024 · 13 revisions

While developing a solution to an issue it has turned out that there are a lot of different implementations of RadioText, not all of which strictly follow the RDS standard.

Below some statistic and research about those implementations based on 455 recorded stations from around the world from walczakp/rds-spy-logs. Hopefully this research will lead to more robust RadioText reception!

Is Group 2B used at all?

According to the standard, RadioText can be sent either in type 2A or 2B groups. 2A supports a maximum message length of 64 characters; 2B only supports 32-character messages but could be more robust.

In the sample data, there are:

  • 122,968 occurrences of 2A from 308 stations
  • 14 occurrences of 2B from 9 stations

At least Radio Krka in Slovenia is using 2B for RadioText. Interestingly, they set block 3 to all zeroes and don't repeat the PI code:

9423 2800 0000 5052
9423 2801 0000 494A
9423 2802 0000 4554

Non-standard string termination practices

The end of a RadioText string can be signaled with the 0x0D character. But many stations opt to pad the message up to 64 characters with blank spaces instead. Some use neither.

I have found at least three main methods of conveying the string length that are used in the wild. Out of the 308 stations that transmit RadioText,

  • Method A: 94 stations make use of the end-of-string character.
  • Method B: 204 stations pad their messages to 64 characters at least once, not using any end characters.
  • Method A+B hybrid: Some stations use and end-of-string character but add a bunch of empty spaces after it.
  • Method C: Several (how many?) stations end their strings somewhere before 64 characters and use no string terminator.

Because Redsea doesn't have a real-time display it needs to know where the string ends. We can currently deal with methods A, B, and C. Method C is the hardest one to detect, and it will cause some false positives; in noisy conditions, messages from stations using Method A and Method B can sometimes get cut short and be detected as Method C.

Stations evading redsea's decoding powers

There are ~80 files in rds-spy-logs (out of 392 that carry 2A) where redsea will not output a radiotext message, unless you specify --show-partial. But why? We can filter out the logs that have a high block error rate (BLER), say, more than 20 %; and those with only a couple of spurious 2A detections. After that we still have 37 logs that resist decoding.

The main problems encountered are:

  • ⏱ The recorded log is too short to capture a 64-character message.
  • 🌀 The block error rate is too high (noisy reception).
  • ⚽️ The transmitter is padding the message to fill 64 characters, even though it could use the string terminator. A short, terminated message is less likely to get interrupted by noise.
  • 🧹 The transmitter unnecessarily clears the buffer at the start of every repeat using the A/B flag, even though the message does not change. This prevents accumulating the message over several repeats, to counter noise.
  • ❗️ The transmitter requests a buffer reset at unexpected times, even after every transmitted group, preventing reconstruction of the string. This is clearly erroneous operation.
  • 👾 Redsea is unable to decode any characters from an error-free 2A group. This could be a bug in Redsea and needs to be investigated.
  • 🦠 The log seems to contain highly random data.
File PS BLER Main problem
🇨🇦/C5EF Club 1 ❗️
🇨🇿/232E R-DVOJKA 16 🌀
🇨🇿/2491 JIHLAVA 1 ❗️
🇨🇿/280A R-HK 18
🇩🇰/6699 GULD 7 ⚽️ 🧹
🇫🇷/F212 song 7
🇫🇷/F216 RMC 1 ⏱ 👾
🇫🇷/F216 RMC 0 🦠
🇫🇷/F219 VIRGIN 6
🇫🇷/F220 NRJ 17
🇫🇷/F225 M RADIO 1
🇫🇷/F22A NOVA 1
🇩🇪/D315 B5 akt 17
🇩🇪/D383 NDR Kult 18
🇩🇪/D3A3 SWR3 12
🇩🇪/DA04 SWR3 18
🇮🇹/5202 *Radio2 14
🇮🇹/5208 DIM*SOFT 17
🇮🇹/5241 VIRGIN 16
🇮🇹/5244 SPORTIVA 18
🇮🇹/5249 LifeGate 1 🌀 ⚽️
🇳🇱/8531 CONTINU 18
🇳🇱/8563 JOYRADIO 17
🇳🇱/94FF LIVE 5 🌀 ⚽️
🇵🇱/3566 BLEKITNE 17
🇵🇱/3ABC Miedzy- 11
🇷🇴/E019 89,5 FM 19
🇷🇴/EE01 CULTURAL 0
🇷🇴/EE02 MUZICAL 0 ⏱ 👾
🇸🇪/E220 NRJ 6
🇨🇭/4F14 ZUERISEE 0 ❗️
🇨🇭/4F15 RADIO 24 4 ❗️
🇺🇸/7A44 FROGGY 9 🌀 ⚽️