AudacityでIHF-A特性の簡易模擬

2010/04/27, 2010/05/20

2010/10/16 Windows7について追記

注意:このページにあることはただのメモ書きで、決して「正しい」ものではありません。この方法で求めたS/N比などの値は、間違っても一般向けに発表してはいけませんよ!(笑)


マイクプリアンプ等のS/N評価にIHF-A特性フィルタが必要です。ハードウェアでの実装例は検索すれば例えば以下のところが出てきます。

でもフィルタの実物を作るのが面倒なので、アマチュア的に多少の間違いがあってもよいからソフトウェアベースで何とかならないか探ってみました。Audacity 1.3.12-beta (Unicode) のイコライザはユーザーが任意の特性を編集できるので使えそうです。最初は上記引用サイトにある数値を見ながら画面上で特性カーブを編集していましたが、うまい方法がありました。

(1) まず、C:\Documents and Settings\ユーザー名\Application Data\Audacity フォルダ※の EQCurves.xml ファイルをテキストエディタで開きます。Audacityの設定ファイルはUTF-8エンコードが多いですがこのファイルの文字コードはASCIIですので適当なエディタで構いません。UTF-8対応のエディタが必要です(1.3系新規インストールの場合は後述のcustomがカスタムとなっている…多分)。自信がなければ変更前ファイルのバックアップを取っておいてください。
Windows7 64bit版では C:\Users\ユーザー名\AppData\Roaming\Audacity フォルダにあります。

(2) ファイルの最後近くに <curve name="custom"> または <curve name="カスタム"> で始まる行があります。その前に次の内容を加えて保存します。数値はhttp://118.243.179.248/Noise-IHF.htmにあるものを引用しました。
インデントはTABです。Firefox 3.6ではこれをこのままコピー&ペーストしてもTABになるようです。ファイル内にある他のエントリも参照するとよいでしょう。

	<curve name="IHF-A44.1k">
		<point f="20.000000000000" d="-50.500000000000"/>
		<point f="25.000000000000" d="-44.700000000000"/>
		<point f="31.500000000000" d="-39.400000000000"/>
		<point f="40.000000000000" d="-34.600000000000"/>
		<point f="50.000000000000" d="-30.200000000000"/>
		<point f="63.000000000000" d="-26.200000000000"/>
		<point f="80.000000000000" d="-22.500000000000"/>
		<point f="100.000000000000" d="-19.100000000000"/>
		<point f="125.000000000000" d="-16.100000000000"/>
		<point f="160.000000000000" d="-13.400000000000"/>
		<point f="200.000000000000" d="-10.900000000000"/>
		<point f="250.000000000000" d="-8.600000000000"/>
		<point f="315.000000000000" d="-6.600000000000"/>
		<point f="400.000000000000" d="-4.800000000000"/>
		<point f="500.000000000000" d="-3.200000000000"/>
		<point f="630.000000000000" d="-1.900000000000"/>
		<point f="800.000000000000" d="-0.800000000000"/>
		<point f="1000.000000000000" d="0.000000000000"/>
		<point f="1250.000000000000" d="0.600000000000"/>
		<point f="1600.000000000000" d="1.000000000000"/>
		<point f="2000.000000000000" d="1.200000000000"/>
		<point f="2500.000000000000" d="1.300000000000"/>
		<point f="3150.000000000000" d="1.200000000000"/>
		<point f="4000.000000000000" d="1.000000000000"/>
		<point f="5000.000000000000" d="0.500000000000"/>
		<point f="6300.000000000000" d="-0.100000000000"/>
		<point f="8000.000000000000" d="-1.100000000000"/>
		<point f="10000.000000000000" d="-2.500000000000"/>
		<point f="12500.000000000000" d="-4.300000000000"/>
		<point f="16000.000000000000" d="-6.600000000000"/>
		<point f="20000.000000000000" d="-9.300000000000"/>
		<point f="22049.000000000000" d="-10.800000000000"/>
	</curve>

(3) Audacityを起動し、何か壊してもよい適当なファイルを読ませます。メニューバーの Effect からイコライゼーションを選択すると、上で入力したIHF-A44.1kエントリが増えています。

なお、手順(2)で20Hz未満や22500Hz以上の特性を入れると、そのエントリをAudacity側で20Hz〜22500Hzに制限する自動補間がかけられた結果がcustomエントリに転写され、強制的にcustomを選んだ格好になりますので、特に20Hz以下はあきらめです。設定にあるデフォルトのサンプリング周波数にもよると思いますが、44.1kHzデバイスしか持っていないため、詳細は未確認です。

振幅0.5のインパルスをAudacityに読ませ、このイコライゼーションを行いインパルス応答を取ってみました。イコライゼーションのフィルタ長の設定は最大の8191にしてみました(よくわかっていない)。
実行は「カーブの描画」で行います。「グラフィックイコライザ」を選択すると滅茶苦茶になってしまいます。その場合は「カーブの描画」に戻ってエントリを読み直します。

青が元のインパルス、赤が応答です。74.3dBシフトしています。20Hz付近(もちろんそれ以下も)が過大ですが、30Hz以上は大体いい感じに近似できているようです。

ということで、30Hz以下・22.5kHz以上の特性が違うこと・使うA/Dの性能に依存(これが特に重要)することを認識していれば、近似的にはこれで何とかなりそうです。
位相特性は不明ですが、S/N評価は元々時間領域に関係なく周波数領域に限定された話なので、まあ不問のままでよいでしょう。(というか、それを議論できるだけの能力がありません)

20Hzと25Hzの値をcut&tryで調整すると近似度が少しよくなります。

	<curve name="IHF-A44.1k-mod">
		<point f="20.000000000000" d="-55.500000000000"/>
		<point f="25.000000000000" d="-45.700000000000"/>
		(31.5Hz〜22049Hzは上記と同じ)
	</curve>

もっとも、RIAA-phonoイコライザ等の低域ブースト増幅器のS/Nを見るのでなければ元々40dBも減衰させている領域の特性が少々違ってもRMS的にはゴミのはずです。
或いは、Audacity側は調整せず(概ね14Hz以下がフラットになる)、A/DのDCオフセット除去を兼ねて何か別のフィルタプログラム(WAVEFLT2等)で12dB/oct・fc=10Hz程度のIIR HPFを予めかけておいても良さそうです(理論検討はしていない)。


参考文献等


履歴

トップページ / 工作室 / AudacityでIHF-A特性の簡易模擬