Looking at the various RDS Symbols

A list of RDS symbols

Using symbolic modulation we transmit symbols not bits.

The RDS Symbols

A general RDS carrier with the different symbols is shown here:

Total RDS waveform

The carrier can be split into 4 possible symbols each of 48 cycles of the 57KHz carrier duration giving rise to 288 samples at a 342KHz sample rate. There are 4 possible amplitude formats with each having a 0 or π phase.

RDS symbols

Since the DAC is set for 8 bit operation and the CPU uses 16bits these symbols are stored in 4 arrays of 288 words, so each word has the 0 and π version of each symbol. This is an example of symbol pair array:

            
//  A local P0_P1 copy
static word _P0_P1[SYMBOL_SIZE] = {
  0x8080, 0x7F83, 0x7C86, 0x8080, 0x8876, 0x8B74, 0x8080, 0x7191, 0x6E93, 0x8080, 0x9668, 0x9866, //  00  11
  0x8080, 0x629F, 0x61A1, 0x8080, 0xA45B, 0xA658, 0x8080, 0x56AC, 0x53AF, 0x8080, 0xB14D, 0xB34B, //  12  23
  0x8080, 0x49B9, 0x47BB, 0x8080, 0xBD41, 0xBF3F, 0x8080, 0x3EC4, 0x3BC7, 0x8080, 0xC836, 0xCA34, //  24  35
  0x8080, 0x32CF, 0x31D1, 0x8080, 0xD22C, 0xD42B, 0x8080, 0x2AD8, 0x28DA, 0x8080, 0xDA24, 0xDC22, //  36  47
  0x8080, 0x22E0, 0x20E1, 0x8080, 0xE11D, 0xE21C, 0x8080, 0x1CE6, 0x1BE6, 0x8080, 0xE618, 0xE717, //  48  59
  0x8080, 0x18EA, 0x17EB, 0x8080, 0xEA14, 0xEB13, 0x8080, 0x15ED, 0x14ED, 0x8080, 0xEC13, 0xEC13, //  60  71
  0x8080, 0x14ED, 0x14ED, 0x8080, 0xEC13, 0xEB13, 0x8080, 0x15ED, 0x16EC, 0x8080, 0xE915, 0xE816, //  72  83
  0x8080, 0x19E9, 0x1AE8, 0x8080, 0xE51A, 0xE41A, 0x8080, 0x1EE4, 0x1FE3, 0x8080, 0xE01F, 0xDE20, //  84  95
  0x8080, 0x24DE, 0x26DC, 0x8080, 0xD826, 0xD628, 0x8080, 0x2CD6, 0x2ED4, 0x8080, 0xD02E, 0xCE31, //  96  107
  0x8080, 0x35CD, 0x38CA, 0x8080, 0xC639, 0xC23C, 0x8080, 0x40C1, 0x43BF, 0x8080, 0xBA45, 0xB747, //  108 119
  0x8080, 0x4DB5, 0x4FB3, 0x8080, 0xAD51, 0xAA54, 0x8080, 0x5AA8, 0x5CA5, 0x8080, 0xA05F, 0x9E61, //  120 131
  0x8080, 0x679A, 0x6A98, 0x8080, 0x926D, 0x8F6F, 0x8080, 0x758C, 0x788A, 0x8080, 0x847A, 0x817D, //  132 143
  0x8080, 0x837F, 0x867C, 0x8080, 0x7688, 0x748B, 0x8080, 0x9171, 0x936E, 0x8080, 0x6896, 0x6698, //  144 155
  0x8080, 0xA062, 0xA161, 0x8080, 0x5AA4, 0x58A6, 0x8080, 0xAD55, 0xAF53, 0x8080, 0x4DB2, 0x4BB3, //  156 167
  0x8080, 0xBA48, 0xBB47, 0x8080, 0x40BE, 0x3FBF, 0x8080, 0xC53D, 0xC73B, 0x8080, 0x35C9, 0x34CA, //  168 179
  0x8080, 0xD032, 0xD131, 0x8080, 0x2CD3, 0x2BD4, 0x8080, 0xD929, 0xDA28, 0x8080, 0x23DB, 0x22DC, //  180 191
  0x8080, 0xE121, 0xE120, 0x8080, 0x1CE2, 0x1CE2, 0x8080, 0xE71B, 0xE71B, 0x8080, 0x17E7, 0x17E7, //  192 203
  0x8080, 0xEB17, 0xEB17, 0x8080, 0x13EB, 0x13EB, 0x8080, 0xEE14, 0xED14, 0x8080, 0x12ED, 0x13EC, //  204 215
  0x8080, 0xEE13, 0xED14, 0x8080, 0x12ED, 0x13EB, 0x8080, 0xEE14, 0xEC16, 0x8080, 0x14EA, 0x16E8, //  216 227
  0x8080, 0xEA18, 0xE81A, 0x8080, 0x19E6, 0x1AE4, 0x8080, 0xE51D, 0xE31F, 0x8080, 0x1EE1, 0x20DE, //  228 239
  0x8080, 0xDF23, 0xDC26, 0x8080, 0x26D9, 0x28D6, 0x8080, 0xD62C, 0xD42E, 0x8080, 0x2ED0, 0x31CE, //  240 251
  0x8080, 0xCD35, 0xCA38, 0x8080, 0x39C6, 0x3CC2, 0x8080, 0xC140, 0xBF43, 0x8080, 0x45BA, 0x47B7, //  252 263
  0x8080, 0xB54D, 0xB34F, 0x8080, 0x51AD, 0x54AA, 0x8080, 0xA85A, 0xA55C, 0x8080, 0x5FA0, 0x619E, //  264 275
  0x8080, 0x9A67, 0x986A, 0x8080, 0x6D92, 0x6F8F, 0x8080, 0x8C75, 0x8A78, 0x8080, 0x7A84, 0x7D81  //  276 287
};