Symbolic modulation is a direct synthesis of a modulated waveform given a predefined shape for that symbol. This is not possible for analogue transmissions since there are an infinite number of waveform shapes. However with the digital format there are a finite number of symbols or modulation waveshapes that can be produced. These "shapes" can be pre-calculated, stored in memory and used to feed a DAC. Realise that the symbol shape used is that post any filtering, so eliminating the need for waveform shaping filters. In the case of RDS this is the raised cosine post-modulation filter.
The BPSK at a data rate of 1187.5KHz used as the RDS is a very simple modulation format. In order to determine the symbol shape of any bit the prior and post bit state needs to be known. Thus a 3 bit window is used. This simple trio of states gives rise to 8 possible states which taking the 2 phase states gives rise to 4 amplitude shapes and 2 phases. The amplitude shapes are the post output filtering shapes and have exactly 46 cycles per sysmbol.
These 8 shapes can be pre-calculated as samples for the DAC and stored in memory. Modulation now consists of selecting the appropiate shape and sending to the DAC.
Thus the "modulator" consists of running through an array picking out the symbols to be sent to the DAC. In the case of RDS, the data content changes very slowly and is largely constant (PI never changes and RT changes infrequenctly).
Here a data stream has to be formulated that comprises of all the RDS data that is to be sent in a repeating cycle. Once the bit data to be sent is known the symbol array can be constructed. The RDS data stream is largely defined by the RDS specification, a certain percentage of the transmission time has to be devoted to each RDS data type. For example: The PI frame can be defined to use 25% of the transmission time.
In this way the data stream can be defined and specific broadcast information inserted. In the case of dynamic data RT (real time text), TA (Traffic information) and the clock a space for these frame is define in the data stream and the information filled in on the fly. Note: in each case that the RDS data stream changes the symbol array has to be re-calculated. Synchronisation can be code tricky for updating clock information since the clock has to be accurate to 100mSec, ie: Just one group ahead (104mSec per group).
However in this implementation we use a clock time prediction..the postion of the clock group in the data set is known so knowing the current position in the transmission of the data set we can calculated how far ahead the clock group is to be transmitted. Thus knowing the current time the predicted time can be inserted in the clock group, and the new symbol modulation calculated from the point of insert. When the clock group is reached a switch is made to the new data set.
So far only a data set of groups has been generated, we still need to convert that information into symbols. This is done by fisrt differential encoding the data set by running a window of 3 across all the data set bits. Then converting the differential encoded information into symbols, such that each bit of differential information is represented by a symbol to be transmitted. It is the purpose of the RDS modulator to take the symbol information and transmit the representation of that symbol to the DAC.