データ伝送や電気通信において、ビット挿入[1](英: bit stuffing)は、情報を持たないビットをデータに挿入することである。ビット挿入によるビットは、付加ビット[2]とは異なる。
ビット挿入は、様々な目的で使用される。同一または合理的に関連するビット速度を持つ必要のないビット系列を共通ビット速度に合わせるため緩衝域やフレームを満たすためなどである。挿入ビットの位置はデータリンクの受信側に伝達され、ビット流を元のビット速度または形式に戻す際にこれらの余分なビットは除去(英: destuff)される。ビット挿入を使用して、多重化する前に複数の通信路を同期させたり、2つの単一通信路のビット速度をお互いに合致させたりすることができる。
上記のようなビット挿入を利用する例には、Plesiochronous Digital Hierarchy(PDH)とSynchronous Digital Hierarchy(SDH)がある。
ビット挿入のもう1つの用途は、ランレングス制限符号化である。すなわち、送信されるデータ中で同じ値が連続するビット数を制限することである。同じ値が最大許容数だけ続くと、反対の値のビットが挿入される。これは一般的な規則であるため、受信側では、挿入ビットの位置に関する追加の情報なしに、挿入ビットを取り除くことができる。
追加の信号遷移の生成は、信号の受信を確実にするために、またはフレーム同期シーケンスのような特別な予約されたコードを含むデータ発生時にそれを退避するために行われる。
上記のようなビット挿入を利用する例にはCAN、HDLC、USBなどがある。
ビット挿入は、ペイロードが完全である(送信エラーによって損なわれない)ことを保証しない。これは、送信が正しい場所で開始し、終了することを確実にするための方法に過ぎない。別途、誤り検出訂正を使用してフレームが破損していないかを確認し、必要があればフレームを再送信する。
ゼロビット挿入は、いくつかのデータ伝送規約で使用される特定種別のビット挿入であり、データ流からの刻時復元を助ける。IBMのSDLC(後にHDLCに改称)によって普及した。
名前は、0のビットの挿入のみを行うことから来ている。0のビットが連続するのを防ぐために1のビットを挿入することはしない。
SDLCとLow-SpeedおよびFull-Speed USBのデータは、NRZIで符号化されて送信される。NRZIでは、0のビットは信号遷移を引き起こすが、1のビットでは変化しない。1のビットが長く続くと、送信されたデータには遷移が存在しない可能性があり、送信機と受信機の刻時信号の同期が取れなくなる可能性がある。 1が5ビット(SDLCの場合)または6ビット(USBの場合)続いた後に0を挿入することにより、送信機は遷移間の最大時間を保証する。受信機は、適切なデータ復元を保証するために、刻時と遷移を同期させることができる。
SDLCでは、6つの隣接する1のビットを含む送信ビット列"01111110"がフラグバイトである。ビット挿入は、このパターンが通常のデータでは決して起こり得ないことを保証するので、通常のデータと混同される可能性なしに、フレームの始めと終わりの印として使用できる[3]。
このようなビット挿入の主な欠点は、符号化率が予測できないことである。それは、送信されるデータに依存する。