Dither的影響

討論MP3、WAV、MIDI、WMA甚至其他數位音訊的播放、製作、轉換等。

版主: DearHoney

頭像
kouyoumin
神人
文章: 1612
註冊時間: 2001-01-05 08:00
來自: 中正紀念堂
聯繫:

Dither的影響

文章 kouyoumin »

前幾週的一個考試題目:
一個DC值X, 加入隨機雜訊(範圍+-0.5 LSB)後量化
問取非常多sample後的平均值

看過這問題, 才讓我開始思考Dither的原理
如果取樣無限多次
所有量化的值平均應該可得到原來的X (無量化失真)

但實際的音訊顯然不可能如此簡單
Dither是否真能對重現原音有幫助? (特別是高頻的部分)
還是只增加量化失真?

--
音訊我不太能想像
圖片Dither遠看是有比較好啦..
節約用電 - VIA EPIA CN運作中
hotball
神人
文章: 322
註冊時間: 2001-09-28 08:00
聯繫:

文章 hotball »

Dithering 通常會增加量化誤差(也就是雜訊會變多),但是會減少失真(指人的感覺上)。這是因為,在沒有 dithering 的情形下,量化誤差會比較集中在低頻部份。而加上 dithering 後,低頻部份的量化誤差會減少,而轉移到高頻。由於對大部份情形來說,高頻是比較不重要的,所以這樣是可以減少失真的。

所以,在使用 dithering 的情形下,取樣率要高到某個程度以上才行(即讓其高頻部份超出人所能偵知的範圍)。對於影像訊號來說,當解析度高到某個程度時,人眼就無法分辨各別的 pixels(所以 dithering 的圖遠看會比較好看)。聲音的情形也類似,因為人耳無法聽到某個頻率以上的聲音。但是若取樣率不夠高的話,則 dithering 所造成的高頻量化誤差的增加,就不一定會有好的效果。
JamesT
神人
文章: 1347
註冊時間: 2001-01-04 08:00

文章 JamesT »

音訊 dither 會把原本低於量化 threshold 的訊號放大到高過 threshold ...
---
小星比較棒∼∼ XD
teamJDK
大師
文章: 125
註冊時間: 2002-10-09 08:00

文章 teamJDK »

看圖理解音訊 dither.....
以前寫過一篇...
==
人耳對具有週期性的聲音、頻譜上特別突出的頻率(formant)、隨時間變化而移動的突出頻率特別敏感。當聲音從高解析度降低為低解析度的時候,捨棄末尾 bit 所造成增加的 quantization error,會和原本的聲音訊號有高度的"關連性",會造成很明顯的泛音失真,人耳對這種突出的泛音失真會很敏感。
dither 在音訊中加入所造成的是一種 white noise,也就是能量在各個頻率都一樣的 noise。這種 noise 是隨機的、亂序的、不規則的,我們對這種訊號,大腦會認為這是比較不重要的、沒有意義的、無法 tracking 的,所以會自動降低對它的敏感度,直接把它忽視掉。
所以我們就利用這樣的特性,在由高解析度轉為低解析度之前,先對原始的聲音訊號加入一個隨機的雜訊,這個雜訊會增加整體的雜訊量,但是會不規則打破原本的 quantization error,消除 quantization error 和原本訊號之間的"關連"。也就是用我們比較可以忍受、比較不會去注意到的"沙沙沙"的 white noise,去取代原本突出的泛音失真。

以下是圖
原本 24bit 100Hz Sine wave 訊號
圖檔
捨棄末尾 bit 轉成 16bit
圖檔
原本 24bit 頻譜
圖檔
16bit 頻譜
圖檔
加入的 dither (RPDF)
圖檔
dither 的頻譜
圖檔
原本 24bit 訊號加了 dither 後的樣子
圖檔
轉成 16bit 後的樣子
圖檔
加入 dither 後的頻譜,注意到總 noise 量比原本多,但是突出泛音的失真卻沒有了,這些原本由於(關連於)sine wave 產生的 quantization error 已經被加入的亂序的、擾動的 dither 給打破了
圖檔
將直接捨棄末尾 bit 的頻譜和加入 dither 的頻重疊在一起比較
圖檔

另外,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/
Kyochan
神人
文章: 750
註冊時間: 2001-04-11 08:00
來自: Eevolution World
聯繫:

文章 Kyochan »

好文章!
感謝幾位大大這麼詳盡的說明
小弟獲益良多 :)
WavOX
大師
文章: 168
註冊時間: 2003-02-24 23:34
來自: 香港
聯繫:

文章 WavOX »

嘩! 好! :tup:

'好' 是好在能讓我這些數碼訊號處理的門外漢對Dithering 有更深入的認識.

其實, 我從前已對Dithering 有少許認識, 但總是不大明白為何隨機的加一bit 及再棄掉未bits 就會令人不易擦覺那些雜訊, 現在可瞭解更深了, 而且有了那些圖片, 確實更易令人聯想到在音訊的情況. :)

另外想問一問 teamJDK大大何謂泛音? 是不是 Distortion 的效果, 聽到破音?
頭像
kouyoumin
神人
文章: 1612
註冊時間: 2001-01-05 08:00
來自: 中正紀念堂
聯繫:

文章 kouyoumin »

teamJDK 寫:以上是很簡單的介紹,對詳細原理有興趣的人請看
http://www.glowingcoast.co.uk/audio/theory/dither/
請問文中-120dB與-132dB的訊號是如何辦到的呢?
一格不是就超過了嗎... ?_?
節約用電 - VIA EPIA CN運作中
teamJDK
大師
文章: 125
註冊時間: 2002-10-09 08:00

文章 teamJDK »

WavOX 寫: 另外想問一問 teamJDK大大何謂泛音? 是不是 Distortion 的效果, 聽到破音?
我不是大大啦,真正的大大是上面幾位,這個稱呼不能亂用,只有名實相符的人方能受用 :p

泛音、泛音列是中文翻譯,英文一般是指 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,難聽,這樣 :)
teamJDK
大師
文章: 125
註冊時間: 2002-10-09 08:00

文章 teamJDK »

kouyoumin 寫:
teamJDK 寫:以上是很簡單的介紹,對詳細原理有興趣的人請看
http://www.glowingcoast.co.uk/audio/theory/dither/
請問文中-120dB與-132dB的訊號是如何辦到的呢?
一格不是就超過了嗎... ?_?
就是用 Dither + Noise Shaping 呀 ^^;

原本的高解析度訊號(在這裡是浮點數的原始訊號)轉成 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 的實驗,裡面就有類似的圖 ;)

經過 Dither + Noise Shaping 的數字,假設變成 0 0 0 1 0 -1 -1 0 0 0.....,其平均音量的"總量"假設是 -95dB,其中包含 -132dB 的 sine wave + 其他頻率的雜訊。
每次抓 512/1024/2048... 個 sample 作頻譜分析,就會得到網頁上的那張頻譜圖。
teamJDK
大師
文章: 125
註冊時間: 2002-10-09 08:00

文章 teamJDK »

「銃夢」這本漫畫裡面有講,雜訊裡面其實包含了無限的資訊,就看你如何去篩選、取用(filter)它,解讀它。 :)
回覆文章