"True Phase DSP" for foobar 2000

辛い様々なことがあったのですが、本を買って研究してようやく完成しました。

概要

波長の1/4だけ、相対的に位相をすすめる、ヒルベルト変換フィルタのようなものです

補足:最初知識不足から群遅延どうのこうの、と書いていましたが正しくはヒルベルト変換フィルタです。

ライセンスについて

フリーです。もしよければ、よかったなりわかんなかったなり悪かったなりを、raspy@nunomo.comまでメール、 もしくはこの記事のコメント欄に寄せてください。

http://dl.dropbox.com/u/13746456/foo_truephase_fft.dll
現在あるソフトはFFT版です。44.1kHz専用になります
※3つDSPがインストールされますが、open buffle filterのほうは無視してください。

適合条件など

  • 位相を補正するだけで周波数成分は理論上変化しません。オーオタ専用です。人間は位相成分に極めて鈍感です。あまり期待しないでください。
  • foobar2000 0.9x以上が必要です。
  • フルレンジ、または2wayバスレフ、密閉程度なら適合している可能性が高いです。3way以上のハイエンドのものは、位相特性を意図的に操作しているクロスオーバーであることがあり、その場合は適合しません。ミッドとウーハーのクロスが単純に6dB/octなら適合しそうです。(試してだめなら外せばよいので気軽にお試しください)
  • 僕の力不足で、FIRのタップ数が減らせませんでした。なので重いです。(pen M 1.1GHzでギリ)

使用方法

  • (foobar2000を入れていない場合)まず、foobar2000で音楽を聴けるように環境を整えます。その際、replayGainの設定はnoneにすること(素なら良いのですが、前段にかかったあとでプラグインを通るので音質が悪化します)。
  • ダウンロードしたDLLを、foobar2000のcomponentsに入れます。
  • preferenceのDSP Managerを開きます。DSPをResampler(アップサンプリングする場合)、[True Phase]、の順にセットします。
  • ボリュームがある程度下がった状態でテストしてください。
  • このプラグインからの出力は、クリップ防止の為-13dB程度(-6と書いていましたが-13でした!)低くなっています(-6dBのデジタルボリュームくらいでまあそんなに悪化しません)。ですので注意してください。できればwindowsの出す音などはミュートするか別デバイスにあてておいたほうが良いでしょう。

グラフなど

WaveGeneで生成したwavファイルをこのプラグインを通して出力し、それをマイクで拾ったものです。
200Hz,三角波
tri200
200Hz,矩形波
sq200

前述の、よいインパルス応答のスピーカーの場合、プラグインなしでは三角波はなんだか丸い形(矩形波に近い形)、矩形波はパっと立ち上がって急に0に戻るインパルスのような波形になるはずです。
もし測定環境のある方がいたら、プラグインあり、なしの状態で波形を送ってもらえたりすると嬉しいです。

その他愚痴など

数学力不足で大変でした。
foobar2000付属のイコライザはgroup delay一定の一級品です。

changelog

  • 6/12/2008 畳み込みアルゴリズムFFTでの畳み込みに変更。メモリ関連バグ修正。
  • 4/12/2008 群遅延フィルタではない旨を記載。ヒルベルト変換フィルタでした。
  • 2/24/2008 HQバージョンのみとしました。ダンパー調整アルゴリズムを元に戻しました。だいぶ整理がついたので、記述を見直しました。
  • 2/10/2008 HQバージョンを用意しました。
  • 2/09/2008 さらに少し調節しました。
  • 2/02/2008 44.1kHzでのパラメータを調節しました(これでほぼ完全に88.2kHzと同じです)。
  • 1/31/2008 2つに分かれていたDSPを統合し、名前をわかりやすいようTrue Phaseとしました。
  • 1/30/2008 44.1kHzに対応しました。SSE2最適化を取りました。
  • 1/29/2008 オフセットずれ防止ダンパーのアルゴリズムを変更しました。音質が向上しています。
  • 1/28/2008 ボリュームを上げました。クリップしないとは思います。