その2 : ノイズシェーピングの利用   07/31/2014

前回、量子化誤差による高調波をディザの一種である乱数丸めによって低減した実験結果をご紹介しました。
高調波が消えたのはいいのですが、ノイズフロアが上昇するのは困り者ですよね。
Hi-Fiオーディオ的には、聴覚の周波数特性に合わせてノイズレベルを下げたいところです。

ちなみにヒトの可聴域は20〜20000Hzと言われていますが、1〜4kHzあたりが最も感度がよく、8kHzを超えると20dB近く最小 可聴値が低下します。
ノイズメータによる測定でも聴感補正フィルタを使用することが多く、製品仕様における雑音レベルでもよく使用されています。
つまり、低周波ではノイズレベルを抑えることが望ましく、8kHzを超える高周波ではまあ許容できるというわけです。

そこでノイズシェーピングの出番です。
簡単に書いちゃうと、ノイズシェーピングとは、低周波数領域で押さえたノイズを高周波数領域に押し出すものです。
(Wikipediaには、ノイズシェーピングもディザと同様とか書かれていますが、別モノですw)
まさに上に書いた目的に適うテクニックじゃないですか。

ノイズシェーピングは、1bitのΔΣ変調での利用でよく知られていますが、もちろんマルチビットでも適用できます。
下図は1次のΔΣ変調器です。

ソフトウェアの処理では、ΔΣ変調器の量子化器にあたるのが端数処理、入力が浮動小数点値、出力が整数値となります。
で、実際どうなん?ということで、実験結果です。

1次でも、1kHz付近のノイズフロアが10dB以上低くなってますね。

2次では、1kHz付近のノイズフロアを20dB以上低減できましたが、20kHz付近では-120dB近くまで増えてきました。
低周波数領域で押さえたノイズが、高周波数領域に押し出されているのが分かります。
ちなみにサンプリング周波数を上げるとどうでしょう?

4倍の192kHzサンプリングでは16bitでも、1kHz付近のノイズフロアは-180dB以下、20kHz付近でも-140dB程度 となりました。
48kHz/16bitサンプリングのノイズシェーピングなしの場合を20kHz以下の全帯域で下回っています。

2回にわたって、量子化誤差を低減する方法を実験してみました。
このように、ソフトウェア処理でも、ディザ、ノイズシェーピングは実装可能で、より良質の信号を得ることができます。


コラム へ戻る

ホームへ戻る