前幾週的一個考試題目:
一個DC值X, 加入隨機雜訊(範圍+-0.5 LSB)後量化
問取非常多sample後的平均值
看過這問題, 才讓我開始思考Dither的原理
如果取樣無限多次
所有量化的值平均應該可得到原來的X (無量化失真)
但實際的音訊顯然不可能如此簡單
Dither是否真能對重現原音有幫助? (特別是高頻的部分)
還是只增加量化失真?
--
音訊我不太能想像
圖片Dither遠看是有比較好啦..
Dither的影響
版主: DearHoney
Dither的影響
節約用電 - VIA EPIA CN運作中
Dithering 通常會增加量化誤差(也就是雜訊會變多),但是會減少失真(指人的感覺上)。這是因為,在沒有 dithering 的情形下,量化誤差會比較集中在低頻部份。而加上 dithering 後,低頻部份的量化誤差會減少,而轉移到高頻。由於對大部份情形來說,高頻是比較不重要的,所以這樣是可以減少失真的。
所以,在使用 dithering 的情形下,取樣率要高到某個程度以上才行(即讓其高頻部份超出人所能偵知的範圍)。對於影像訊號來說,當解析度高到某個程度時,人眼就無法分辨各別的 pixels(所以 dithering 的圖遠看會比較好看)。聲音的情形也類似,因為人耳無法聽到某個頻率以上的聲音。但是若取樣率不夠高的話,則 dithering 所造成的高頻量化誤差的增加,就不一定會有好的效果。
所以,在使用 dithering 的情形下,取樣率要高到某個程度以上才行(即讓其高頻部份超出人所能偵知的範圍)。對於影像訊號來說,當解析度高到某個程度時,人眼就無法分辨各別的 pixels(所以 dithering 的圖遠看會比較好看)。聲音的情形也類似,因為人耳無法聽到某個頻率以上的聲音。但是若取樣率不夠高的話,則 dithering 所造成的高頻量化誤差的增加,就不一定會有好的效果。
看圖理解音訊 dither.....
以前寫過一篇...
==
人耳對具有週期性的聲音、頻譜上特別突出的頻率(formant)、隨時間變化而移動的突出頻率特別敏感。當聲音從高解析度降低為低解析度的時候,捨棄末尾 bit 所造成增加的 quantization error,會和原本的聲音訊號有高度的"關連性",會造成很明顯的泛音失真,人耳對這種突出的泛音失真會很敏感。
dither 在音訊中加入所造成的是一種 white noise,也就是能量在各個頻率都一樣的 noise。這種 noise 是隨機的、亂序的、不規則的,我們對這種訊號,大腦會認為這是比較不重要的、沒有意義的、無法 tracking 的,所以會自動降低對它的敏感度,直接把它忽視掉。
所以我們就利用這樣的特性,在由高解析度轉為低解析度之前,先對原始的聲音訊號加入一個隨機的雜訊,這個雜訊會增加整體的雜訊量,但是會不規則打破原本的 quantization error,消除 quantization error 和原本訊號之間的"關連"。也就是用我們比較可以忍受、比較不會去注意到的"沙沙沙"的 white noise,去取代原本突出的泛音失真。
以下是圖
原本 24bit 100Hz Sine wave 訊號
![圖檔](http://myweb.hinet.net/home3/silky/dither/24bitsine.pict)
捨棄末尾 bit 轉成 16bit
![圖檔](http://myweb.hinet.net/home3/silky/dither/16bittruncate.jpg)
原本 24bit 頻譜
![圖檔](http://myweb.hinet.net/home3/silky/dither/100Hz24bit.jpg)
16bit 頻譜
![圖檔](http://myweb.hinet.net/home3/silky/dither/16bittruncated.jpg)
加入的 dither (RPDF)
![圖檔](http://myweb.hinet.net/home3/silky/dither/DitherNoise.jpg)
dither 的頻譜
![圖檔](http://myweb.hinet.net/home3/silky/dither/dithernoise_s.jpg)
原本 24bit 訊號加了 dither 後的樣子
![圖檔](http://myweb.hinet.net/home3/silky/dither/ditheronoriginal.jpg)
轉成 16bit 後的樣子
![圖檔](http://myweb.hinet.net/home3/silky/dither/16bitdithered.jpg)
加入 dither 後的頻譜,注意到總 noise 量比原本多,但是突出泛音的失真卻沒有了,這些原本由於(關連於)sine wave 產生的 quantization error 已經被加入的亂序的、擾動的 dither 給打破了
![圖檔](http://myweb.hinet.net/home3/silky/dither/16bitdithered1.jpg)
將直接捨棄末尾 bit 的頻譜和加入 dither 的頻重疊在一起比較
![圖檔](http://myweb.hinet.net/home3/silky/dither/truncateddither.jpg)
另外,dither 同時具有將低位元的 information 帶到高位元的作用。
最後因為我們對不同頻率的敏銳度不一樣,所以如果加入的 dither(noise) 能夠做適當的選擇,讓這個雜訊的能量在我們比較不注意的高頻比較多,而低頻比較少,這樣加入 dither 所造成的增加 noise 的副作用,就比較不會被我們察覺到。
為此各家都有不同的演算法,不同的 dither + noise shaping 技術,例如最有名的 Apogee 公司用的 "UV22"。這個網頁有各家 dither 技術的比較,包括 SONY 的 SBM
http://audio.rightmark.org/lukin/dither/dither.htm
以上是很簡單的介紹,對詳細原理有興趣的人請看
http://www.glowingcoast.co.uk/audio/theory/dither/
以前寫過一篇...
==
人耳對具有週期性的聲音、頻譜上特別突出的頻率(formant)、隨時間變化而移動的突出頻率特別敏感。當聲音從高解析度降低為低解析度的時候,捨棄末尾 bit 所造成增加的 quantization error,會和原本的聲音訊號有高度的"關連性",會造成很明顯的泛音失真,人耳對這種突出的泛音失真會很敏感。
dither 在音訊中加入所造成的是一種 white noise,也就是能量在各個頻率都一樣的 noise。這種 noise 是隨機的、亂序的、不規則的,我們對這種訊號,大腦會認為這是比較不重要的、沒有意義的、無法 tracking 的,所以會自動降低對它的敏感度,直接把它忽視掉。
所以我們就利用這樣的特性,在由高解析度轉為低解析度之前,先對原始的聲音訊號加入一個隨機的雜訊,這個雜訊會增加整體的雜訊量,但是會不規則打破原本的 quantization error,消除 quantization error 和原本訊號之間的"關連"。也就是用我們比較可以忍受、比較不會去注意到的"沙沙沙"的 white noise,去取代原本突出的泛音失真。
以下是圖
原本 24bit 100Hz Sine wave 訊號
捨棄末尾 bit 轉成 16bit
![圖檔](http://myweb.hinet.net/home3/silky/dither/16bittruncate.jpg)
原本 24bit 頻譜
![圖檔](http://myweb.hinet.net/home3/silky/dither/100Hz24bit.jpg)
16bit 頻譜
![圖檔](http://myweb.hinet.net/home3/silky/dither/16bittruncated.jpg)
加入的 dither (RPDF)
![圖檔](http://myweb.hinet.net/home3/silky/dither/DitherNoise.jpg)
dither 的頻譜
![圖檔](http://myweb.hinet.net/home3/silky/dither/dithernoise_s.jpg)
原本 24bit 訊號加了 dither 後的樣子
![圖檔](http://myweb.hinet.net/home3/silky/dither/ditheronoriginal.jpg)
轉成 16bit 後的樣子
![圖檔](http://myweb.hinet.net/home3/silky/dither/16bitdithered.jpg)
加入 dither 後的頻譜,注意到總 noise 量比原本多,但是突出泛音的失真卻沒有了,這些原本由於(關連於)sine wave 產生的 quantization error 已經被加入的亂序的、擾動的 dither 給打破了
![圖檔](http://myweb.hinet.net/home3/silky/dither/16bitdithered1.jpg)
將直接捨棄末尾 bit 的頻譜和加入 dither 的頻重疊在一起比較
![圖檔](http://myweb.hinet.net/home3/silky/dither/truncateddither.jpg)
另外,dither 同時具有將低位元的 information 帶到高位元的作用。
最後因為我們對不同頻率的敏銳度不一樣,所以如果加入的 dither(noise) 能夠做適當的選擇,讓這個雜訊的能量在我們比較不注意的高頻比較多,而低頻比較少,這樣加入 dither 所造成的增加 noise 的副作用,就比較不會被我們察覺到。
為此各家都有不同的演算法,不同的 dither + noise shaping 技術,例如最有名的 Apogee 公司用的 "UV22"。這個網頁有各家 dither 技術的比較,包括 SONY 的 SBM
http://audio.rightmark.org/lukin/dither/dither.htm
以上是很簡單的介紹,對詳細原理有興趣的人請看
http://www.glowingcoast.co.uk/audio/theory/dither/
請問文中-120dB與-132dB的訊號是如何辦到的呢?teamJDK 寫:以上是很簡單的介紹,對詳細原理有興趣的人請看
http://www.glowingcoast.co.uk/audio/theory/dither/
一格不是就超過了嗎... ?_?
節約用電 - VIA EPIA CN運作中
我不是大大啦,真正的大大是上面幾位,這個稱呼不能亂用,只有名實相符的人方能受用 :pWavOX 寫: 另外想問一問 teamJDK大大何謂泛音? 是不是 Distortion 的效果, 聽到破音?
泛音、泛音列是中文翻譯,英文一般是指 Overtone,但是使用上有點混亂,也有人是指 Harmonic,而 Harmonic 也有人翻譯為諧波,這是日本的說法,Overtone 也有翻譯為倍音。
一個複雜的波形可以分解為由好幾個純音的正弦波所組成,這些正弦波稱為 Harmonics,而其中最低的頻率我們稱為基音(Fundamental),基音會讓我們判斷為是這個波形的音高,而其他頻率為基音整數倍的正弦波成分則被稱為泛音(Overtones),弦樂、空氣振動是整數倍的泛音,而自然界的聲音則含有許多非整數倍的泛音(Clangorous Overtones)。泛音各個組成成分之間的相對強度比例(各個組成頻率之間的相對音量大小)會讓我們認識為這個波形的音色。而其中特別突出的幾個泛音(音量特別大的頻率)會變成我們認識上辨認的一個特色,這種突出的頻率稱為 Formant,這是語音學上研究的重點。
YAMAHA 有一台 FS1R 音源,用的 FS(Formant Shaping)發聲技術便是組合這些 Formant,可以製作出類似人說話的聲音。
以上是簡單的介紹,有興趣的人可以找聲學、心理聲學、生理聲學、聲學物理學、語音學、音樂學... 的書或網站來研究。
好了,把泛音看似複雜實則空洞地解釋完了 :p
回到原題,直接捨棄末尾位元所造成的突出的泛音失真,對我們的聽覺感知來說是很容易注意到的失真(Distortion),所以我們用 Dither,藉由加入一些雜訊(Noise)的代價,用我們比較可以接受的 white noise,來交換嚴重的、明顯的、無法忍受的 Distortion。用 Noise 取代 Distortion。加入一些雜訊,來消除我們不喜歡的雜訊(Distortion),大概就是這個意思。
而泛音失真聽起來的結果,就是 THD 失真,音色發生改變,多了許多 noise,難聽,這樣
![:)](./images/smilies/icon_smile.gif)
就是用 Dither + Noise Shaping 呀 ^^;kouyoumin 寫:請問文中-120dB與-132dB的訊號是如何辦到的呢?teamJDK 寫:以上是很簡單的介紹,對詳細原理有興趣的人請看
http://www.glowingcoast.co.uk/audio/theory/dither/
一格不是就超過了嗎... ?_?
原本的高解析度訊號(在這裡是浮點數的原始訊號)轉成 16bit,如果照一般的 quantization,96dB 以下的訊號都會沒有,因為末尾的位元都被直接捨棄掉了,數字變成 0000.....
但是我們在 quantization 之前,給他加了一個隨機的雜訊,這些雜訊的加入,造成 quantization 之後數字就不會是 0000.....,而會有可能是 0 1 0 -1 0 0 0 1 0 0 1.....,會隨機的進位,變成這樣的雜訊。
這個雜訊是均勻地、平坦地、成一直線地分佈在頻譜底部的 white noise。這些雜訊裡面其實隱含了原本末尾位元的資訊。那麼我們要怎麼利用這些隱含的資訊,增加人耳比較敏感的頻帶內的動態範圍呢?答案就是利用 Noise Shaping。什麼是 Noise Shaping,請看那個網址的第二頁,寫得非常的簡單清楚喔(按第一頁最下面的箭頭便會連到第二頁)。
利用 Noise Shaping,把雜訊推向高頻,這樣原本埋在雜訊裡的 -132dB 的原始 1KHz sine wave 就露出來了,而這個是原本位在第 22bit 的資訊。
所以我們不是說,Dither 會增加聽覺範圍內的動態,會把低位元的資訊帶到高位元,讓 16bit 的 CD 保留 20bit 的一些細節資訊。而這些資訊對音樂來說,可能是非常重要的,可能是立體感、深度、環境殘響、音像..... 等等感受的來源。
我記得討論區有一篇講 mpg123 decoder 的討論,裡面有人做了 mpg123 和 MAD dither 的實驗,裡面就有類似的圖
![;)](./images/smilies/icon_wink.gif)
經過 Dither + Noise Shaping 的數字,假設變成 0 0 0 1 0 -1 -1 0 0 0.....,其平均音量的"總量"假設是 -95dB,其中包含 -132dB 的 sine wave + 其他頻率的雜訊。
每次抓 512/1024/2048... 個 sample 作頻譜分析,就會得到網頁上的那張頻譜圖。