-
Notifications
You must be signed in to change notification settings - Fork 38
Some RadioText research
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!
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
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.
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 | 🌀 ⚽️ |