メインコンテンツまでスキップ

ADR-006: FEC(前方誤り訂正)採用

Context

インターネット越しの音声通信ではパケットロスが発生する。

パケットロス対策の選択肢:

  1. 無視: ロスした音声は無音またはノイズになる
  2. 再送(ARQ): 遅延が大きくなる
  3. 補間(PLC): 推測で補完、音質劣化
  4. FEC(前方誤り訂正): 冗長データで復元

要件:

  • リアルタイム性を損なわない(再送は不可)
  • 音の途切れ(バツッという音)を防ぐ
  • 遅延増加を最小限に

Decision

FEC(前方誤り訂正)を採用する。

Consequences

FEC方式

方式特徴
XORベースシンプル、1パケットロスまで復元可能
Reed-Solomon複雑、複数パケットロスに対応

初期実装はXORベースとし、必要に応じてReed-Solomonに拡張する。

パラメータ

パラメータデフォルト値説明
冗長度10%10パケットにつき1パケットのFECデータ
グループサイズ55パケットをグループ化してFEC計算

遅延への影響

FECによる遅延増加は1フレーム分(約2.67ms @ 128samples/48kHz)。

パケット: [1] [2] [3] [4] [5] [FEC]
^
FECパケットは5パケット目の後に送信

受信側はFECパケット到着まで待機する必要があるため、1フレーム分の遅延が追加される。

設定可能項目

項目選択肢
FEC有効/無効ユーザー設定可能
冗長度0% / 10% / 20% / 33%
グループサイズ3 / 5 / 10

超低遅延プリセットではFECを無効化できる。

補完戦略(PLC)

FECで復元できなかったパケットには、簡易的なPLC(Packet Loss Concealment)を適用する:

  1. 直前サンプルの減衰: 直前の音声を徐々に減衰させてフェードアウト
  2. 無音挿入: 最後の手段として無音を挿入

「バツッ」というクリックノイズを防ぐため、急激な波形変化を避ける。