Biphase mark code
The Biphase Mark Code is a type of encoding for binary data streams. If a binary data stream is sent without any modification via any channel, if there are long series of logical ones or zeros without any change, this can cause problems in synchronization. Streams encoded in NRZ are affected by the same problem. Using Biphase Mark Code makes synchronization easier.
When encoding, the frequency of the clock is twice the bitrate of the original signal. Every bit of the original data is represented as two logical states which, together, form a cell. Every logical 1 is represented as a couple of two different bits (10 or 01). The logical 0 is represented as two equal bits (00 or 11). Every logical level at the start of a cell is inverted to the level at the end of the previous cell. In BMC coding the logical 1 and 0 are represented with the same voltage, using a different polarity. It is shown in the following image:
BMC coding provides a better synchronization since there is a change in the polarity at least every two bits. It is not necessary to know the polarity of the sent signal since the information is not kept in the actual values of the voltage but in their change: in other words it does not matter whether a logical 1 or 0 is received, but only whether the polarity is the same or is different from the previous value; this makes synchronization even easier. Finally, BMC coded signals have null mean value, thus reducing the necessary transmitting power. All these good points are achieved at the expense of doubling clock frequency.