コンテンツにスキップ

Feedforward Compensator

Feedforward Compensator(フィードフォワード歪み補正)は、Parallel Hammersteinモデルに基づいて、オーディオ信号に対してリアルタイムまたはオフラインで非線形歪み補正を適用するための高度な信号処理ウィジットです。

Nonlinear Analyzer などで測定・抽出した機器 of Hammerstein モデル(1次〜5次のインパルス応答カーネル)をロードし、逆歪みを付加した補正信号を生成することで、実機の歪みを能動的にキャンセル(低減)します。


💡 動作原理: LICFF (Linear-Inverse Compensated Feedforward)

このモジュールは、Parallel Hammerstein モデルを前提とした LICFF (Linear-Inverse Compensated Feedforward) アルゴリズムを採用しています。

1. 線形逆フィルターの設計

モデルから得られた 1次(線形)カーネル h1h_1 の周波数特性を Q1(f)Q_1(f) とすると、その線形逆特性 Finv(f)F_{inv}(f) は正則化パラメータ ϵf\epsilon_f を用いて以下のように設計されます。

Finv(f)=Q1(f)Q1(f)2+ϵfbp_filter(f) F_{inv}(f) = \frac{Q_1^*(f)}{|Q_1(f)|^2 + \epsilon_f} \cdot bp\_filter(f)

ここで:

  • Q1(f)Q_1^*(f)Q1(f)Q_1(f) の複素共役です。
  • ϵf\epsilon_f は帯域外での極端な増幅を防ぐための周波数依存正則化パラメータで、アクティブ帯域内(bp_filter=1bp\_filter = 1)では非常に小さく(ϵin=106\epsilon_{in} = 10^{-6})、帯域外では大きく(ϵout=0.5\epsilon_{out} = 0.5)設定されます。
  • bp_filter(f)bp\_filter(f) は、ユーザーが設定したアクティブ帯域(fminfmaxf_{min} \sim f_{max})の外部をコサインロールオフで滑らかに減衰させるバンドパス特性です。これにより、低域や高域のノイズを過剰にブーストするのを防ぎます。

2. 反復歪み補正 (Iterative Distortion Compensation)

非線形要素による歪みを補正するため、入力信号 uinu_{in} に対して以下の反復計算を行います。

  1. 最初に入力信号をアクティブ帯域に制限した信号を基準とします: [ u_{comp}^{(0)} = \text{IFFT}(U_{in}(f) \cdot bp_filter(f)) ]
  2. 反復ステップ kk において、現在の補正信号 ucomp(k)u_{comp}^{(k)} を Hammerstein モデルの非線形カーネル(2次〜5次の高調波成分)に通し、発生する歪みスペクトル Ynl(f)Y_{nl}(f) を順方向シミュレーションによって予測します。
  3. 予測された歪み成分に線形逆フィルター Finv(f)F_{inv}(f) を乗算して入力側へフィードバックし、歪みを減算します: [ u_{comp}^{(k+1)} = u_{comp}^{(0)} - \text{IFFT}(Y_{nl}(f) \cdot F_{inv}(f)) ]
  4. これを設定された回数(デフォルトは3回)繰り返すことで、高次の高調波歪みが大幅に相殺された補正信号 ucompu_{comp} を得ます。

設定項目

Model Source(モデルソース)

  • Load Forward Model JSON... ボタン: Nonlinear Analyzer でエクスポートした Hammerstein モデルの JSON ファイル(h1h5のカーネルを含む)を読み込みます。
  • Status: モデルのロード状態を表示します。
  • Rate: モデル測定時のサンプリングレートを表示します。
  • N Samples: カーネル(インパルス応答)のサンプル数(モデル長)を表示します。

Compensation Settings(補正設定)

  • Linear-Only Compensation: チェックを入れると、非線形歪み補償(2次〜5次)をスキップし、1次(線形)の周波数特性をフラットにするイコライザー(逆フィルター)処理のみを適用します。
  • Enable Iterative Compensation: チェックを入れると、反復アルゴリズムを用いて非線形歪みの相殺を計算します。
  • Iterations: 歪み補正の反復回数(1〜20回)を設定します。通常は3〜5回で十分に収束します。
  • Active Band Fmin (Hz) / Fmax (Hz): 補正逆フィルターを有効にする周波数の下限(Fmin)と上限(Fmax)を設定します。帯域外は自動的に保護ロールオフが適用されます。
  • Linear Smoothing (線形平滑化): 対数周波数ビンに基づく移動平均を使用して線形逆フィルターを平滑化し、測定ノイズによる狭いピークを抑制します。時間領域でのリンギングを防ぐのに役立ちます。
  • Out-of-band Mode (帯域外モード): アクティブ帯域外の周波数の処理方法を定義します(Cut, Bypass (Pure), Bypass (Aligned))。
  • Regularization Mode (正則化モード): ϵf\epsilon_f パラメータの決定方法を設定します(Auto (Broadband / Music), Auto (Pure Tones), Manual (Max Boost), Manual (Tikhonov))。
  • Reg. Value (正則化値): マニュアルモード時の設定値です。
  • Abort on Instability (発振時に中止): オフライン処理中にフィルターの暴走や発振が検出された場合に処理を中止する設定です。

各タブの機能

1. Simulation(シミュレーション)

ロードされたモデルを用いて、テスト信号に対する歪み補正の効果をシミュレーションします。

  • Test Signal: テストに使用する信号の種類を選択します。
    • 1kHz Tone: 1kHz の純音
    • 3kHz Tone (Untrained): モデル測定帯域外や非基本波周波数の補正能力を確認するための 3kHz 純音
    • Two-Tone (1.0k + 1.5k): 相互変調歪み(IMD)の補正を確認するための2音信号
    • Multi-Tone (5 freqs): 複雑なマルチトーン信号
    • Broadband Noise: 広帯域ノイズ
  • Amplitude: テスト信号の振幅を設定します。
  • Run Simulation ボタン: シミュレーションを実行し、グラフを更新します。テスト信号の種類や振幅を変更した際にも自動的にシミュレーションが更新されます。
  • 出力情報: 補正前後の全高調波歪み(THD)および全歪み率(THD+N相当)のシミュレーション値が表示されます。結果は視認性の高いHTMLテーブル形式でフォーマットされます。
  • グラフ表示:
    • Uncompensated (赤): 補正なしでモデルを通したときの出力スペクトル(高調波歪みが見られます)。
    • Compensated (緑): 歪み補正を適用してモデルを通したときの出力スペクトル(高調波歪みが著しく低減されていることが確認できます)。
    • Ideal Linear (青): 歪みが一切ない理想的な線形応答を通したときのスペクトル。

2. Transient Simulation(過渡応答シミュレーション)

歪み補正による時間領域の過渡応答(ステップ応答、インパルス応答など)をシミュレーションし、視覚化します。

  • Show Band-Limited Ideal Reference: チェックを入れると、ステップ応答の現実的な目標基準として、アクティブ帯域フィルター(fminfmaxf_{min} \sim f_{max})によって帯域制限された理想的な線形応答をプロットします。
  • グラフ表示:
    • Uncompensated (赤): 補正なしでモデルを通したときの過渡応答。
    • Compensated (緑): 歪み補正を適用した後の過渡応答。
    • Ideal Linear (青): 帯域制限のない理論上完全な理想線形過渡応答。
    • Band-Limited Ideal (シアン): アクティブ帯域フィルターによって制限された理想的な基準応答。

Note: 逆フィルターの安定性のために必要なアクティブ帯域フィルター(fminfmaxf_{min} \sim f_{max})により、ステップ遷移時にギブス現象(リンギング)が発生します。

3. Linear Response(線形応答)

線形逆フィルターの特性と、補正後の線形応答を確認できます。

  • Magnitude Response (振幅特性):
    • Uncompensated (Linear) (赤): ロードされたモデルの1次伝達関数(元々のF特)。
    • Inverse Filter (緑): 設計された逆フィルターの特性(アクティブ帯域外でゲインが制限されている様子が確認できます)。
    • Compensated (Overall) (青): 元の特性に逆フィルターを掛け合わせた、補正後の総合的な周波数特性(フラットになります)。
  • Phase Response (位相特性):
    • 各特性の位相応答を表示します。
    • 位相回転の補正: 測定時にインパルス応答に挿入された遅延(ゲートプリアライメント等)による見かけ上の急激な位相回転を防ぐため、1次カーネル h1h_1 のピーク位置を時間基準面としてアライメント(遅延成分 of キャンセル)を行った状態でプロットされます。これにより、実際のシステムの物理的な位相変化を明瞭に観察できます。
    • ノイズマスク: 信号レベルが極めて低い帯域(-60 dB以下)では、位相のノイズによる激しい発振を防ぐため、プロットから自動的にマスクされ、描画の乱れやライブラリの異常終了を防ぎます。

4. Offline Processing(オフライン処理)

WAVオーディオファイル全体に対して、歪み補正アルゴリズムをオフラインで適用して保存します。

  • Input Wav / Output Wav: 入力ファイルと出力先ファイルを指定します。アプリケーションウィンドウに .wav ファイルをドラッグ&ドロップして自動的に設定することもできます。
  • Process & Save ボタン: バックグラウンドスレッドで処理を開始します。処理中はボタンが「Cancel」に変わり、処理を中止することができます。
    • 入力オーディオのサンプリングレートがモデルと異なる場合は、自動的にリサンプリングが行われます。
    • ブロック処理時の境界アーティファクトを防ぐため、十分な overlap(オーバーラップ領域)を持たせたセグメント分割処理が行われます。
    • 処理後のピーク値が 0 dBFS を超えてクリッピングが発生する場合は、自動的にノーマライズ(音量調整)が行われ、警告メッセージが表示されます。