# Codage bipolaire

Le codage bipolaire est un codage à 3 niveaux comme les codages BHDn, c’est-à-dire que les valeurs utilisées pour coder le signal composé de 0 et de 1 varieront entre -a 0 et a. Il est utilisé dans les réseaux informatiques pour injecter sur le média physique (couche 1 du modèle OSI) les valeurs logiques correspondant au flux d'entrée.

## Codage bipolaire simple
### Règle de codage

| Valeurs à coder | Valeurs transmise |
| 0 logique | 0 |
| 1 logique | opposé de la valeur transmise au 1 précédent. |

### Exemple

les niveaux sont -a, 0,+a
codage bipolaire simple :
| | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| Séquence | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 |
| Codage | a | -a | 0 | a | 0 | 0 | 0 | 0 | -a | a |

## Codage bipolaire d'ordre 2
### Règle de codage

| Valeurs à coder | Valeurs transmise |
| 0 logique | 0 |
| 1 logique | opposé de la valeur transmise au 1 précédent de même parité le plus proche. |

### Exemple

les niveaux sont -a, 0,+a
codage bipolaire d'ordre 2 :
| | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| Séquence | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 |
| Codage | a | a | 0 | -a | 0 | 0 | 0 | 0 | -a | a |

## Caractéristiques

Avantages:
* Spectre étroit.
* En conséquence, le signal codé est aussi facilement modulable sur une porteuse de base, ou supportera un débit important sur un support de transmission à fréquences basses.
Inconvénients:
* Problèmes de décodage lors de longues séquences de 0.
** Mais ce problème est résolu par le codage régulier de bits supplémentaires de façon à maintenir la synchronisation : plus ces bits sont fréquents, plus facile sera la synchronisation.
** Avec la qualité de précision des horloges actuelles (et les applications pratiques de ce codage qui emploient des signaux de fréquence prédéterminée dans des canaux connus et normalisés) et grâce à l'utilisation de bande étroite, il est facile de maintenir la synchronisation pour des chaines assez longues de zéros, et on se contente souvent d'un bit de synchronisation à 1 tous les 16 à 64 bits, ou d'une synchronisation plus précise par l'utilisation de séquences de synchronisation en tête de trame plus longue.
* le décodage bipolaire est moins stable autour du codet central (codé 0 et non -a ou +a) pour des transmissions à longue distance, car le signal tend à être transmis de façon différentielle (on ne détecte bien que les transitions, qui subissent aussi un déphasage, et l'amplitude d'une transition de +a vers 0 ou de +a vers -a est plus difficilement distinguable, ce qui rend difficile la synchronisation entre les séquences comme celle à 3 états (+a, 0, a) codant 101 et l, et celle à 2 états (+a, a) codant 11, ce qui privilégie les états -a et +a (c’est-à-dire la détection de bits 1) au détriment de l'état 0, particulièrement si les composantes continues sont importantes (longues chaînes de 0 sans transition); pour pallier le problème, il ne suffit pas d'insérer des 1 mais il faut aussi insérer quelque 0.
** Une séquence FCS 01100110, codée (0,+a, -a, 0,0,+a, -a, 0), et reçue différentiellement comme (?, +, --, +, 0,+, --, +), placée en tête de trame convient bien à cet usage, mais la difficulté est de bien accorder le seuil de détection des composantes continues (pour établir le centre du signal différentiel codant le a), et à calibrer le rapport signal/bruit afin de déterminer les seuils de distinction des signaux différentiels de forte ou de faible amplitude (ce qui nécessite de coder suffisamment de bits à 1 pour déterminer le niveau de l'amplitude maximale.
** Mais en pratique on procède par transformée de Fourier du signal, les transitions importantes (-a vers +a ou +a vers -a) ayant généré un signal différentiel important aux fréquences f et 2f mais nul à la fréquence f/2, au contraire des transitions incluant un 0 (dont la composante différentielle à la fréquence 2f est nulle).