![見出し画像](https://assets.st-note.com/production/uploads/images/51275077/rectangle_large_type_2_0aff365c945def96b66703a329363e9b.jpg?width=800)
デジタルディザ&ノイズシェーパー~ノイズを加えて音質アップ?
電子書籍発売しました!(2023/01/22)
動画・音声リンク付き紹介記事はこちら。
Amazon Kindle 電子書籍「MATLAB で簡単オーディオ プラグイン開発」
スクリプトはどなたでも無料でダウンロードできます。
量子化と量子化ノイズ
前回は時間方向の離散化であるサンプリングの話でしたが、信号のデジタル化にはレベル方向の離散化も必要であり、今回はその「量子化」の話です。
量子化によって連続的な値が離散的値に丸められますから、ここで「量子化雑音」というノイズ(誤差)が発生します。
![画像32](https://assets.st-note.com/production/uploads/images/50640496/picture_pc_af3f38b4885a1751aff8866d37127666.png?width=800)
量子化器特性例と量子化誤差
まずは、量子化によるS/N劣化度合いを計算してみましょう。
量子化ステップを一様な値hとし、入力信号が一様分布だとすると確率密度関数は
![画像1](https://assets.st-note.com/production/uploads/images/49411491/picture_pc_6d54180199739124d5769c15c418433a.png)
平均量子化雑音は
![画像2](https://assets.st-note.com/production/uploads/images/49411508/picture_pc_215b036f1e5b35905dad3cdcfc73bb4e.png)
Nビットフルスケール sin 波の rms は、
![画像3](https://assets.st-note.com/production/uploads/images/49411543/picture_pc_d35076f50b7d5dd5e1c85aab9233d070.png)
なので、S/N比は
![画像4](https://assets.st-note.com/production/uploads/images/49411551/picture_pc_e0db98d667ca846b4b6cb63fafae0959.png)
logで表すと
![画像32](https://assets.st-note.com/production/uploads/images/51149845/picture_pc_09a197f3fb82571ae706b879a5acff1c.png)
で求まります。
この式は覚えておくと便利です。
CDは16ビット一様量子化ですから、理論上約98dBのダイナミックレンジがあることになります。簡易的に6Nで計算している例も多いようですね。
映像の場合は信号の性質上平均電力が規定しにくく信号はPeak to Peak、雑音はrmsで表すため
![画像6](https://assets.st-note.com/production/uploads/images/49411597/picture_pc_585cfeda15ed8f621e74dc397856d4b0.png)
logで表すと
![画像32](https://assets.st-note.com/production/uploads/images/51149900/picture_pc_ab8343c2f9b45c00790ff332239b81fb.png)
となります。
量子化前後の波形とスペクトルも見てみましょう。
![画像44](https://assets.st-note.com/production/uploads/images/51170403/picture_pc_7594871cd0f15ef92c1911280ccf2020.png)
元信号波形 (1kHz 正弦波)
![画像45](https://assets.st-note.com/production/uploads/images/51170430/picture_pc_b64e5c3022bf7193a52c206c5d2f8dac.png)
元信号スペクトル (1kHz 正弦波)
![画像46](https://assets.st-note.com/production/uploads/images/51170468/picture_pc_5289ea4b3e6c6e2b62617ac4c1e843f3.png)
量子化後波形
![画像47](https://assets.st-note.com/production/uploads/images/51170492/picture_pc_75da0d774f0f824821cdedad11f35a76.png)
量子化後スペクトル
量子化によって、元信号になかった高調波成分が発生しています。
正弦波であれば、「ピー」という清んだ音が、「ビ~」という濁った音になってしまいます。
以上のことは、「量子化ステップ h より小さい信号は表すことができない」と当たり前のことを言っているのと同じです。
しかし、そこをなんとかしようというのが、ディザ&ノイズシェーパーです。
アナログ信号の量子化、またはより短い語長への再量子化が行われる場合(演算により語長が増えた場合も含む)、特に低レベル信号において信号の欠落や高調波歪み等の発生が有り得ます。これらを補償するため、ディザ、あるいはディザとノイズシェーパーの組み合わせが用いられます。
DAW等ではマスタリング時等にディザやノイズシェーパーが選べたりするので、DTMをやられている方も目にしたことがあるかと思います。
デジタルディザ
通常の量子化では閾値が固定であるため、量子化ステップより小さな変化は量子化により情報が失われてしまうことがあります。しかし、これにあるノイズを加えて閾値を越えさせれば閾値を変化させるのと同様の効果があり、量子化ステップより小さな変化も保存することができます。
これにより、量子化により発生する低レベル信号入力時の高調波歪みも取り除いたり抑えたりすることができ、本来量子化ステップ幅で階段状に変化する量子化器の非線形な伝達特性が線形化されることになります。
このような付加ノイズをディザと呼びます。
![画像33](https://assets.st-note.com/production/uploads/images/51151022/picture_pc_610ac60f08e35a62559e282e1ef1eae5.png)
デジタルディザ ブロック図 (Qは量子化器)
このとき、出力の平均値を
![画像54](https://assets.st-note.com/production/uploads/images/51266765/picture_pc_3c5183d4d99e1b1a75bdbfcd692cd1dc.png)
と表記すると、
![画像9](https://assets.st-note.com/production/uploads/images/49411657/picture_pc_99cf95ded9129760fb97e9a0236f3076.png)
となることが望まれます。
ディザは再生時に取り除くことが理想なのですが一般的には困難であり、ノイズレベルの上昇とのトレードオフになります。しかし実際には、ディザの付加によりダイナミックレンジは広がり、ノイズレベルの上昇もノイズシェーパーとの併用により改善または回避することが可能です。
では、実際にどのようなノイズを加えたら良いのでしょう?
矩形(R-pdf)ディザ
ある区間で一様な乱数をディザとして用いたものを矩形(Rectangular-pdf)ディザといいます。ディザの値としては、オフセットが発生しないよう、±1/2LSBをピークとするバイポーラディザとします。またディザのビット数が少ないとディザのランダム性が悪くなり、量子化ノイズを白色化できず不都合です。ビット数が多ければ多いほど、変換のリニアリティも良くなります。また、量子化器はミッドトレッド量子化器(0.5を足して切り捨て=floor(x+0.5)) が一般的に用いられます。この場合、ディザのビット数が十分大きいとすると、
![画像28](https://assets.st-note.com/production/uploads/images/49931986/picture_pc_c0e3fae63acf85019a414834c6207630.png)
となり、量子化器の伝達特性が線形化されます。
量子化ステップを h とすると、±h/2 で一様なノイズ v の pdf p(v) は、
![画像11](https://assets.st-note.com/production/uploads/images/49411725/picture_pc_457ab0d85618bc0142704ab138aefdae.png)
矩形ディザ Dr(n) は、
![画像12](https://assets.st-note.com/production/uploads/images/49411734/picture_pc_bf78bebd2a8dd824b9d5a8e0c0d343f3.png)
となります。
![画像30](https://assets.st-note.com/production/uploads/images/50201533/picture_pc_64364fef4e2c843e8a19f0dfae2da571.png)
R-pdf ディザヒストグラム
矩形ディザのノイズレベル
ノイズが一様に分布するとするとそのpdf は、
![画像13](https://assets.st-note.com/production/uploads/images/49411751/picture_pc_ae4b8ff7e14965e658b923cb69ceb15b.png)
平均電力は、
![画像14](https://assets.st-note.com/production/uploads/images/49411756/picture_pc_1601a1c42bbe54f691215e9093e9e14f.png)
したがって、ノイズの平均電力Nrdは量子化ノイズの平均電力Nqと合わせ、
![画像15](https://assets.st-note.com/production/uploads/images/49411764/picture_pc_2cf0f4117da61050c5fb8236501becb2.png)
となり、Nqだけの場合に比べ、
![画像20](https://assets.st-note.com/production/uploads/images/49411907/picture_pc_c4a55e378b5b1f0fca78fd70742e3f63.png)
S/N自体は劣化します。
T-pdf (フラット)ディザ
±1/2LSBのディザは量子化器の伝達特性を線形化できますが、このレベルではノイズと入力信号に相関が生まれ、入力信号によってノイズパワーが変動するノイズ変調が発生します。ノイズ変調をなくすには、ディザのピークレベルを上げればよいのですが、ただノイズのレベルを上げただけではノイズ変調も量子化ノイズも抑えることはできずノイズレベルが上がるだけです。そこで相関のない2つのノイズを加えてレベルを上げると、ノイズ変調を抑えることができます。またここで3つ以上のノイズを加えても、ノイズレベルの上昇なしにノイズ変調特性の改善を行うことができないことも分かっています。そのpdfは中央極限定理によるガウス分布の粗い近似で三角形となるため、これを T(riangular)-pdf ディザと呼びます。
![画像31](https://assets.st-note.com/production/uploads/images/50201560/picture_pc_8a393447cf95be8c1d41424b2502ec9b.png)
T-pdf ディザヒストグラム
T-pdf ディザ Dt(n)は 、±h/2 で一様で、お互いに無相関な2つのノイズをそれぞれ v1、v2 とすると、
![画像30](https://assets.st-note.com/production/uploads/images/49932218/picture_pc_ac67bb8c77c4d923328d45c074d0ac69.png)
です。
T-pdf ディザのノイズレベル
T-pdfディザは、矩形ディザを2つ足したものですから、
![画像30](https://assets.st-note.com/production/uploads/images/49932254/picture_pc_45eafdf088be2c32c5118f979f41e8a7.png)
となり、
![画像21](https://assets.st-note.com/production/uploads/images/49411914/picture_pc_1298a01a2d3d59a2b5ace719c5a54100.png)
S/Nが劣化します。矩形ディザに比べてさらに1.76dB劣化することになりますがノイズ変調を避けることができ、ディザとしては最適な特性が得られます。
ハイパスT-pdf ディザ
T-pdf ディザにおいて、2つの別の乱数を用いる替わりに1つ前の乱数を引くことにより、ディザにハイパス型の相関を持たせることができます。つまり、T-pdf ディザと同様の性質でノイズのパワースペクトルが高域側に偏った、ハイパスディザが発生できます。これにより、別にノイズシェーパーを用いることなく、聴感上のノイズレベルを低くすることができます。
![画像32](https://assets.st-note.com/production/uploads/images/50201580/picture_pc_44c887def0b2c9f1b3cd0d65dc4ae6fa.png)
HP T-pdf ディザヒストグラム
ハイパス T-pdf ディザ Dh(n) は、
![画像19](https://assets.st-note.com/production/uploads/images/49411872/picture_pc_5de139cc260074aacb50982dc271de25.png)
であり、平均ノイズレベルは T-pdf ディザと同じですが、ノイズのパワースペクトルが高域側に偏っているため、聴感上のダイナミックレンジは T-pdf ディザよりも広くなります。
ディザの効果
以下に、正弦波を単に3値に量子化した場合と、R-pdf ディザを加えて量子化した場合の波形を示します。
![画像31](https://assets.st-note.com/production/uploads/images/50201764/picture_pc_ac5a3e049a719e7ef61f00fe6ab7f147.png)
元信号/量子化/ディザ付加波形
この波形を見ると、ディザを付加した場合はノイジーになっているようにしか見えません。しかしここで、この波形の時間平均をとってみます。
![画像32](https://assets.st-note.com/production/uploads/images/50201787/picture_pc_ca9a1984839c8c408337496de8c044eb.png)
ディザを加えた場合、通常矩形波になってしまう微小レベル信号の平均波形がきれいな正弦波となっていることが分かります。つまりディザを加えることで元の正弦波との差信号が白色化されます。人間は瞬間的な波形を音として認識することができないので、上の時間平均を取ったグラフのように、ノイズ成分と量子化前の信号成分とをはっきり聞き分けられるようになります。
最初に示した1kHz正弦波に、T-pdf/ハイパス T-pdf ディザをそれぞれ付加して量子化した波形とスペクトルを見てみましょう。(以下のスペクトルは全て、ハン窓で100回平均を取っています)
![画像51](https://assets.st-note.com/production/uploads/images/51170865/picture_pc_ae842bf80b8c044ff6edbc531d07d19f.png)
T-pdf ディザ付加波形
![画像50](https://assets.st-note.com/production/uploads/images/51170907/picture_pc_e615646f1c3075f79b676af5d1ca761b.png)
T-pdf ディザ付加スペクトル
![画像51](https://assets.st-note.com/production/uploads/images/51170921/picture_pc_9a8951f4eb245f8a1395eb693ba34757.png)
ハイパス T-pdf ディザ 付加波形
![画像52](https://assets.st-note.com/production/uploads/images/51170931/picture_pc_c83b6e05e30e837757850d7cfc762816.png)
ハイパス T-pdf ディザ 付加スペクトル
ディザなしの場合とグラフを重ねてみましょう。
![画像52](https://assets.st-note.com/production/uploads/images/51171219/picture_pc_1d06c90d9c6daff50632b20d9afa6d36.png)
ディザなし(round)/T-pdf ディザ(FLAT)/
ハイパス T-pdf(HP) ディザ スペクトル比較
ディザを加えて量子化すると、ノイズフロアは上がりますが高調波が消え、ハイパス型では低域のノイズが下がっているのがよく分かると思います。
画像のディザ
以上は音声の例ですが、新聞や雑誌の写真で、近づいて見ると荒いのに、離れて見ると(=平均化)綺麗に見えるのと同じ原理です。あれもディザと呼ばれます。
以下の画像はRGB各8ビットなので、16,777,216色が表現可能です。(全て使われているわけはありませんが)
I=imread('ayaka02_023.jpg');
figure; imshow(I)
![画像25](https://assets.st-note.com/production/uploads/images/49846433/picture_pc_86e35488edfdd12b6a999621e82a802e.jpg)
元画(16,777,216色)
これを、256色に減らしてみましょう。
[X_no_dither,map] = rgb2ind(I,256,'nodither');
figure; imshow(X_no_dither,map)
![画像26](https://assets.st-note.com/production/uploads/images/49846646/picture_pc_897e25016de67fff059975d1d50a8894.jpg)
ディザなし(256色)
特に空のグラデーションがガタガタになって擬似輪郭がハッキリ見えてしまっています。
次にディザを加えて、同じく256色で表示してみます。
[X_dither,map] = rgb2ind(I,256,'dither');
figure; imshow(X_dither,map)
![画像27](https://assets.st-note.com/production/uploads/images/49846648/picture_pc_edc3895a24a3ff092fce65a3303d45dd.jpg)
ディザあり(256色)
MATLABでは誤差拡散とかもやってくれるので、同じ256色でもかなりグラデーションが綺麗に見えるのではないでしょうか?(実際はJPEGのノイズも出ていますが)
消えるはずの信号が・・
再度音声に戻って、もう少し見ていきましょう。
今度は、通常16ビットでは表せない(±20bit-LSB)の信号を入力してみます。
![画像53](https://assets.st-note.com/production/uploads/images/51172956/picture_pc_265a34e2c070ec2e85777f4b043c088d.png)
ディザを加えない場合(round)、信号が 16bit-LSB 以下なので当然出力には何も現れません。出力は 0 です。しかしディザを加えることにより、16ビットで20ビットLSBの信号を再現することができています。
このようにディザは高調波歪みを白色化して聞こえにくくすると同時に、その効果により解像度を落とさずにビットを切りつめる(ビットマッピング)ことを可能にします。
ノイズシェーピング
ノイズシェーピングは量子化ノイズをフィードバックすることにより、聴感上のノイズレベルを低減するテクニックです。ノイズに聴感上感度の良い周波数のパワーを低く、感度の悪い周波数のパワーを高くするような周波数特性を持たせることができれば、聴感上のダイナミックレンジを広げることができます。さらに、ディザにより上がったノイズレベルを聴感上落とすこともできます。また量子化ノイズのみをフィードバックするため、入力信号自体は影響を受けないという特徴があります。ノイズの周波数特性を目的通りにシェーピングするには、ディザを加えることによりノイズを白色化しておく事が重要です。
![画像54](https://assets.st-note.com/production/uploads/images/51177470/picture_pc_fa094af299b777da94b1d382f629d862.png)
ノイズシェーパー ブロック図
入力信号を s、ディザも含めた量子化ノイズを e、シェーピング後の量子化ノイズを e’ とすると出力 y は、
![画像40](https://assets.st-note.com/production/uploads/images/51152761/picture_pc_e6b5b024d4a02299ad8926d1a00c070f.png)
となり、
![画像41](https://assets.st-note.com/production/uploads/images/51152772/picture_pc_c4bfd06558e601d63b30897f4694ddf9.png)
ですので
![画像42](https://assets.st-note.com/production/uploads/images/51152790/picture_pc_96e4f5d2b6ec8a6212c544a1b234a2f5.png)
から
![画像43](https://assets.st-note.com/production/uploads/images/51152813/picture_pc_7fbace1180244a61b28c4a5e7d28505a.png)
が成り立ち、z変換で表すと以下のようになります。
![画像36](https://assets.st-note.com/production/uploads/images/51151103/picture_pc_7bf51217463ec6791f83a1890033ea57.png)
また図から分かるように、以下も同時に成り立ちます。
![画像37](https://assets.st-note.com/production/uploads/images/51151129/picture_pc_16a3f0ceefe557f81f457768475b5465.png)
これらから
![画像38](https://assets.st-note.com/production/uploads/images/51151133/picture_pc_5a300da5361e640cb27e30ad6c1107d1.png)
が求まります。ここで
![画像39](https://assets.st-note.com/production/uploads/images/51151140/picture_pc_1c4aed6731a9ba7fe0f3ffc0f8d49534.png)
(Tはサンプリング間隔)
とおけば、eが白色化されていればその周波数特性は
![画像40](https://assets.st-note.com/production/uploads/images/51151154/picture_pc_f9a28d6a3e3240b2a27bbaa67ecde50b.png)
で重み付けがされることになります。
シェーピングフィルタの設計
ノイズシェーピングフィルタは情報理論より、チャネル容量を保つために以下の条件を満たす必要があります。
(1)最小位相でなければならない
(2)対数パワースペクトル密度(PSD)の平均は0でなければならない
ただしこれさえ満たせば特性設計の自由度は高く、あとはフィルターのタップ数と係数精度次第でかなり好きな特性が実現できます。D/Aなどの場合は回路規模の関係で多ビットが使えない場合もあり高次での安定化が難しいですが、8ビット程度使えれば安定化は容易です。
ノイズシェーパーの効果
前述したように、ノイズシェーピングは量子化ノイズが白色化されていることを前提としています。ノイズシェーピングだけでは、微小レベル信号での高調波歪みの発生は免れることができず、高調波歪みごとシェーピングされこれらがかえって耳につくようになってしまいます。したがってノイズシェーピングの効果を生かすには、ディザにより量子化ノイズを白色化しておくことが重要です。ディザとノイズシェーパーを併用すれば、より微細な信号を再生することができます。
(±24bit-LSB)の4kHz正弦波を、最小可聴帯域曲線を近似したような特性のノイズシェーパーを使って、16ビットで量子化したのが以下のグラフ(NS3)です。
![画像54](https://assets.st-note.com/production/uploads/images/51173794/picture_pc_dae15601483520a1c0f5e66c87d3c2e9.png)
かなりアグレッシブな特性ではありますが、16bit-LSBよりはるかに小さな信号が綺麗に再現できているのが分かるかと思います。~14kHz辺りまで、16ビットで20~24ビット程度の解像度が得られています。
ディザのノイズ分を相殺する程度の緩い特性を用いるのも良いですし、上記のような特性でもオーバーサンプリングを行えば高域のノイズを可聴帯域外に持って行くことも可能です。
実際に音を聴いてみよう
こちらが元音源です。
分かりやすいように、元音源を通常はほとんど聞こえないレベル(ピークが-80dB程度)まで音量を下げ、ディザなし/T-pdf ディザ/ハイパス T-pdf ディザ/ノイズシェーパー(上記NS3特性)を使って量子化し、60dB(1000倍)音量を上げています。
ディザなしだと多くの高調波ノイズが発生することによってジュルジュル系の音がまとわりつき、12s辺りで音が消えます。
T-pdf ディザを加えると、ザーというホワイトノイズは増えますがギターの音自体はそれと分離して聞こえ、20s過ぎの最後までなんとかギターの音が聞こえるかと思います。
ハイパス T-pdf ディザではノイズが高域にシフトし、よりギターの音が聞こえやすくなっています。
ノイズシェーパーでは、ノイズがかなり減ったように聞こえ、ギターの音が最後までしっかり聞こえるのでないでしょうか?
今回は説明のために1000倍とかしましたが、もちろん通常の使用においてもディザ&ノイズシェーパーは聴感上とても有効な技術です。
最後に、こういったビットマッピング処理を複数回行うと、前段で付加したノイズが残ってしまい、逆にそれが聞こえやすくなってしまうこともあります。パッケージング直前や再生時等、最後に一度だけ行うことが望ましいということも注意しておきましょう。
さあ、あなたも積極的にノイズを加えてみませんか?( ̄ー ̄)
この記事が気に入ったらサポートをしてみませんか?