史萊姆論壇

返回   史萊姆論壇 > 教學文件資料庫 > 應用軟體使用技術文件
忘記密碼?
論壇說明

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


 
 
主題工具 顯示模式
舊 2005-05-08, 10:23 AM   #1
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設 Audio系列 壓縮原理與對話雜談

mp3PRO 是利用 SBR(Spectral Band Replication)這種壓縮技術來提升壓縮效率。SBR 被視為是低流量音訊壓縮的終極武器,制訂中的 AAC Version 3 就是要把 SBR 壓縮技術納入,稱為 AAC+。SBR 壓縮時 encoder 不是真正的編碼高頻訊號的訊息,而是改成記錄一些比較少的 side information 來取代原本真正的訊號。解壓縮時 decoder 會根據這些 side information 來 "猜測" 原本的高頻訊號是長成什麼樣子。因為高頻的訊號通常很趨近 noise,也就是不具有音調性的訊號,人耳對 noise 的感知都很接近,我們對 noise 的訊號只能大概感受其強度,而無法分辨其細部的樣式。而且人耳對高頻的敏銳度較低,其失真比較不容易察覺,所以將高頻的訊號用 SBR 編碼取代,雖然高頻訊號會不精確,但是 encoder 可以將省下來的 bit 用來全力記錄低頻的訊號,提升人耳較敏感的低頻訊號的品質,使得在低流量的時候仍能保持一定的聲音水準。

SBR 有三種方式
1. Simple: 將次頻帶(Subband)內的原本訊號用 white noise 取代,只記錄其原本訊號的強度,例如 AAC 的 PNS(Perceptual Noise Substitution)工具,這是最簡單的做法。
2. Advanced: 將次頻帶用 noise 和 sine wave 的組合取代,例如 PlusV
http://www.plusv.org/
3. Complex: 分析低頻的訊號,記錄一些訊息,讓 decoder 能夠根據低頻訊號,去推測其高頻的泛音應該是什麼樣子。

mp3PRO 會將 12KHz 以上的訊號用 SBR 取代,你可以將 44.1KHz 的 mp3PRO 檔案視為是「0~12KHz 的原本的 MP3 格式」 + 「12~22KHz SBR 的附加訊息」兩部分所組成。
所以 mp3PRO 需要專用的 decoder 來解碼,如果用一般的 MP3 decoder 譯碼,一般的 decoder 無法辨識後面的 12~22KHz 的 SBR 訊息,只會譯碼前面的 0~12KHz 的原始 MP3 bitstream。所以用一般的 MP3 decoder 譯碼 mp3PRO,播放的取樣頻率會顯示是 22KHz(取樣頻率的一半是其所能正確記錄、回放的頻率範圍,22KHz 的取樣頻率能正確記錄到 12KHz)。

所以將 mp3PRO 放入 DivX AVI,如果沒有 mp3PRO 專用的 DirectShow Filter(已經有了嗎?),則播放時會使用系統上舊的 MP3 Filter,雖然可以聽到聲音,但是只有 0~12KHz 的訊號,應該比 Ogg Vorbis 慘。

所以問題在於,有沒有 mp3PRO 專用的 DirectShow Filter。

mp3PRO 也不是萬靈丹,遇到三角鐵之類樂器(有豐富的整數倍高頻泛音),mp3PRO 的 "猜測" 就會破功,壓出淒慘的聲音。有興趣者可用訊號產生器產生 13KHz sine + 14KHz sine + 15KHz sine ... 的組合訊號送進去給 mp3PRO 壓縮試試看,看一下頻譜分析你就知道 mp3PRO 的弱點在哪裡了。

高流量的時候絕對不要用 mp3PRO 壓縮。

使用「心理聲學模型」(Psychoacoustic Model)壓縮的編碼法,不太能用觀察頻率回應的方式,或是觀察頻譜與原來訊號近似的程度,來判斷其好壞。因為聲音具有遮蔽(Masking)的作用,你觀察到的頻譜上缺陷的訊號,也許是會被遮蔽的訊號,所以心理聲學模型將它移除了不予紀錄。這樣雖然圖 形看起來難看,但是實際上聽卻聽不出差別,所以我們無法用圖形的 "漂亮" 與否,來判斷一個使用心理聲學模型壓縮的編碼法的好壞。

關於音訊壓縮的原理,小弟現在沒時間再重寫一遍 ^^; 有興趣的人,可以看繁體中文的話,請參考這個網頁
http://forums.dearhoney.idv.tw/viewtopic.php?t=24378
..musepack rulez at high bitrates (200kbps+)

Q:
按照你說的設定了優先等級別後,tmpgenc可以正常選取圖像和聲音源了,不會提示任何報告錯誤訊息.可是進行編碼的時候提示acm錯誤什麼的


A:
ACM 啟始化錯誤?我這裡沒有這種情況,而且我也想不出來為什麼會發生這種錯誤。TMPGEnc 是用自己內建的 MP2 encoder,不會去用系統上的 ACM Codec(Audio Compression Management Codec,後面是 .acm),而你開啟的 AVI 是 AC3 音軌,用 DirectShow filter 解碼,不像 MP3 音軌會用 ACM Codec 解碼(例如系統內建的 decoder 是 L3CODECX.ACM,Fraunhofer 的 decoder),所以解碼的部分也不會用到 ACM。那麼為什麼會發生這種錯誤?... 不知道 ^^;
也許 TMPGEnc 做取樣頻率轉換,由 48KHz 轉為 44.1KHz 的時候會去用系統上的 ACM 來做轉換?
我從來沒有用過 TMPGEnc 的這個功能,也沒有發生過這種情況,所以無法判斷。
不過 TMPGEnc 本身的取樣頻率轉換音質很差,強烈建議不要用 TMPGEnc 做取樣頻率轉換的工作,高頻會有很明顯的金屬聲失真。新版的 TMPGEnc 提供了取樣頻率轉換的品質選項,有高品質模式,據說有比以前好,不過還是建議使用外部的取樣頻率轉換程序來做轉換。
TMPGEnc 的環境設定 Audio engine 底下可以讓你指定使用外部的程序來做 MP2/MP3 壓縮,和取樣頻率轉換,你試試看使用外部的 encoder 來做轉換和壓縮,問題能不能解決。
壓 MP2 建議使用 toolame,這是免費的 MP2 encoder 中音質最好的,同時許多要錢的 encoder 都比不上。toolame 有一特別的版本,其心理聲學模型(Psychoacoustic model)是使用 ISO 的 Model 2,也就是 MP3 所使用的版本,而不是一般 MP2 使用的 Model 1。Model 2 的計算比較精細,對於聲音遮蔽作用的判斷會比較精確,理論上音質會比 Model 1 好。所以這個特別版本的 toolame 理論上音質會超過一般的 MP2 encoder。(理論上 Model 1 的設計可以說是為了 MP1/MP2 量身定做,改成 Model 2 的作用,我想還可以再實驗觀察)
有關心理聲學模型,MP3 的壓縮原理,Model 1/2 的差異,有興趣的人可以參考小弟以前貼過的網址。

另外取樣頻率轉換的程序建議使用 Shibatch 的 SSRC,又快效果又好(我有做過科學的分析測試)。


以上提到的程序用 www.google.com 都可以很方便找到。

試試看,看用外部的轉換程序之後問題能不能解決。(而且音質較好) 引用
還有就是為什麼Nandub分離出來的文件.ac3 or wav 用媒體播放器可以播放,但是用Soft Encode去不能以decode to PCM的方式(按照射手網的文章)開啟呢?只能用Raw Data方式開啟,而且只能聽到一片雜音。不解,不知道那裡出現錯誤
Nandub 分離出來的是 RIFF 檔頭的 AC3 資料流,也就是 WAV 文件格式,裡面包的是 AC3 的資料,文件頭會註明裡面包的是壓縮的訊源,需要用哪一個 decompressor 來解碼。這種 AVI-AC3 文件丟給播放器播放,首先會經過 AVI Spiliter,這個 filter 會將 AVI 內的影像和聲音的資料分離,交給對應的 decompressor 去解碼。聲音部分分離出來的是 RIFF WAV-AC3,如果你系統裝的 AC3 解碼器是 WinDVD 的 iviaudio.ax,這個 filter 只接受 MPEG system stream 分離出來的 PES 封包格式的 AC3 資料流,不能解有 RIFF 檔頭的 WAV-AC3,它不認識,也不會告訴系統知道它能解這種 AC3。所以使用 iviaudio.ax 解碼 AVI-AC3,必須要加上另一個文件,叫做 MPGAUDIO.AX。這個文件看名稱可能猜不出來它是做什麼的,其實它是一個 Warpper,它接受 RIFF WAV-AC3 的輸入,然後去掉檔頭,重新把裡面包的 AC3 資料流包裝成 PES 的 AC3 stream,偽裝成是從 MPEG 文件分離出來的,再送給 iviaudio.ax 解碼,這樣就可以解了。



而如果裝的是俄羅斯的 AC3Filter,這個 filter 直接可以吃 WAV-AC3 的輸入,所以不需要 MPGAUDIO.AX 便可以解碼。
所以你分離出來的 WAV-AC3 可以播放沒有問題。

而 Soft Encode 接受的輸入是 .ac3 PES 封包格式的 AC3 資料流,你拿 WAV-AC3 去給它解,它會不認識,不知道這裡面包的是 AC3。它讀取檔頭的時候會發現這不是 PES 的檔頭,就會告訴你文件格式錯誤,不讓你開啟。
使用 RAW 模式讀取,就是把文件當成沒有任何文件頭資料的資料流,當成從文件一開始就是真正的音訊 sample 資料,用這種模式去讀取 WAV-AC3,得出來的結果當然是錯的。

那麼要怎麼樣讓 Soft Encode 解碼 AVI 裡面的 AC3 呢?我想有兩個辦法:
1. 將 Nandub 分離出來的 WAV-AC3 重新處理,去掉 WAV 檔頭,變成真正的 .ac3 資料流,便可以讓 Soft Encode 讀取。
處理的軟體我沒找過,不過我想應該有,您可以自行找找看。

2. 不要用 Nandub 分離。
事實上我完全不建議再用 Nandub 來處理任何音訊合併、分離,有很多問題,我覺得 Nandub 應該丟到垃圾桶...
改成用 VirtualDubMod 來做分離,選 Demux,就可以直接分離出 PES 格式的 .ac3。

以上提到的軟體都可以用 www.google.com 很快速方便地找到下載。
..
音訊壓縮的原理-1
轉自http://forums.dearhoney.idv.tw/viewtopic.php?t=24378
注: 本文作者TMNEXT就是silky




音訊壓縮的原理-1
轉自http://forums.dearhoney.idv.tw/viewtopic.php?t=24378
注: 本文作者TMNEXT就是silky

音訊資料因為其資料內容的特性,以傳統的壓縮法難達到很高的壓縮率,不過我們人耳並沒有無限的時間解析度和頻率解析度,其實原始的音樂訊號中包含了很多我們聽不到的資料,把這些對我們來講其實無意義的資訊給去掉,這樣就可以達到很高的壓縮率。這種利用人類 感官知覺的特性作的失真壓縮法,就叫做 perceptual coding。
人耳的生理結構,由外耳的耳殼收集外界的聲波到達中耳的耳膜產生震動,經由三塊小骨連接前庭窗傳入內耳,其中由於耳殼的內凹形狀,外耳道的長度和寬度.. 等等生理的構造,會對不同頻率產生共振昇壓的效果,尤其是 2~5Khz 的頻率,會在這個程序中被放大。人耳聽覺頻率的範圍,大約是 20~20KHz,音量範圍則是 130dB SPL,大於 130dB 會產生痛苦的感覺,小於 0dB 則會被當成是靜音。如上所述,人耳對 2~5KHz 的頻率最敏感,越往高頻感覺越不敏銳,音量要超過一定的界限以上查能被我們人耳察覺,這個最低可以聽聞的界限,叫做 ATH(absolute threshold of hearing)。內耳的耳蝸有許多絨毛細胞,分別會對不同的頻率產生反應,將基底膜淋巴液的波動轉換成神經的電流訊號,傳達給大腦。也就是說耳蝸的作用就像一個頻譜分析儀,把聲波轉換成不同頻率的訊號,每一個特定位置的絨毛細胞會受特定頻率的刺激,但是 當基底膜傳導波動時其接近週圍的絨毛細胞也會受到刺激。這也就是說如果有一個頻率的音量很大,在它附近同時有一個比較弱的頻率的話,比較弱的頻率的聲音就會被比較強的聲音給遮蔽掉,我們人耳沒有辦法分辦出有另一個比較弱的頻率的聲音存在。這個遮蔽的作用叫 frquency masking。另外從基底膜受到聲音震動到達穩定狀態,還有聲音結束後完全停止,中間都需要一段時間。所以如果有一個很大聲的聲音出現,在這個聲音開始之前,到這個聲音結束之後,有一段時間我們是聽不到其他聲音的,這種遮蔽效應,我們稱為 temporal masking,之前的叫 pre-masking,之後的叫 post-masking。
前面提到耳蝸就像一部頻譜分析儀,或者說像一個 band pass filter,會把聲音分成許多不同的次頻帶,每個頻帶裡都有一個中心頻率,越往兩邊遮蔽的效果就越弱,在同一個頻帶裡面的頻率會互相影響,我們對他們的感知特性也十分的接近,這種人耳知覺特性的頻帶,我們稱為 critical band。critical band 的寬度並不是都相等的,低頻的部分比較窄,高頻的部分則比較寬,總共分成 26 個 critical band。
除了人耳的生理結構特性以外,大腦的作用也佔了一個很重要的角色。我們都知道音高是由基音決定,而音色是由泛音決定,我們很驚奇的發現,人類的大腦會自動補上基音,即使這個基音並不存在。譬如說電話的頻寬只有 300~3200Hz,但是當我們聽一個基音在 120Hz 的男性講電話的時候,我們還是可以聽出他的正確的音高,不會把男生聽成女生。大腦是如何運用複雜的計算去重建這個不存在的基音,我們目前尚無法得知。

經過長期的實驗和觀察,我們可將人耳的聽覺特性定性,建立一個人耳的聽覺模型,叫做 psychoacoustic model。有了這些對人耳知覺特性的瞭解,我們就可以根據這些理論來壓縮音訊資料,把我們聽不到的聲音去掉。
說是去掉,實際上是怎麼做的呢?
要將無限的連續的類比訊號轉變為有限的離散的數位資料,中間必須經過取樣和量化的手續。譬如說現在量化的位階只有 0~8 九個數位,每一個位階的間隔大小是一格,對一個 4.9 的訊號作量化,得到的數位是 5,和原來 4.9 相差 0.1,這個誤差叫做量化噪音。假設我們把量化的位階減少到 5 個,分別等於原來 0~8 的 0, 2, 4, 6, 8 這幾個數位,位階的間隔大小擴大變成二格,此時再對 4.9 量化,量化的結果是 4,誤差擴大到 0.9,也就是說量化的位階越少,量化的間隔就越大,量化噪音也就越大。
我們做一個實驗,把 16bit 的聲波檔轉為 8bit,當場丟掉一半的資訊,檔案也就小了一半,最簡單的失真壓縮 不過我們觀察頻譜發現,減少量化的 bit 數產生的量化噪音,會造成全頻帶都水準上升一定雜訊,你如果聽這個 8bit 的聲波檔,會發現背景充滿沙沙沙的噪音,這就是因為量化誤差產生的量化噪音。
那我們會想,這樣全頻帶都減少一定的 bit 數太沒有效率,為什麼不把他分成好幾個頻帶(critical band),再根據人耳的心理聲學模型的遮蔽效應,對不同頻帶分配不同的 bit 數,讓各個頻帶產生的量化噪音低於遮蔽效應的曲線以下,這樣這些產生的量化噪音我們就聽不到,對知覺來說等於是無失真壓縮,這樣豈不更好?

所以我們就把壓縮的工作分成兩個部分,一個部分將原來的 PCM data 經過 band pass filter 分成好幾個 subband 次頻帶,另一個部分就是心理聲學模型,分析頻譜,找出遮蔽效應的曲線,然後根據這個曲線,對每個 subband 分別量化,決定分配的 bit 數,讓產生的量化噪訊低於遮蔽效應的曲線,使量化的失真不會被人耳聽到,這樣就大功告成了

然後接下來要說的就是這個最複雜的心理聲學模型是怎麼工作的.... ^^;

怎麼講一講變成這麼長 ^^;;
都還沒進入主旨...
我是要解釋什麼是 scale factor,這個牽扯到量化的程序,還有 short block 和 long block,這個牽扯到心理聲學模型的判斷和 MDCT window 大小的轉換,主要目的是解決 pre-echo 的問題,結果越講越多... ><
看的人就忍耐一下吧... -_-;;;


音訊壓縮的原理-2

前面說到心理聲學模型是如何工作的。ISO MPEG1 Audio 提供了兩個心理聲學模型,分別是 psychoacoustic model 1 和 2,model 2 比 model 1 要來得複雜,但是判斷的效果較好。兩個聲學模型可以用在任何一個 layer,layer 1~3(MPEG1 layer 3 = MP3)。不過我們通常是將 model 1 用在 MP1 和 MP2,model 2 用在 MP3。不過當然也有例外,譬如說有一個特殊版本的 toolame(壓 MP1, MP2 最好的 encoder)就是改用 model 2 的心理聲學模型而不用 model 1。
MPEG1 Audio 壓縮的時候一邊是用一個 polyphase filter bank,將 PCM data 分成好幾個"等寬的" subband 等待進一步量化壓縮,一邊是 psychoacoustic model,使用 512(MP1)或 1024(MP2/MP3)point(取 512/1024 個 sample 計算,或者說 window size=512/1024)的 FFT 轉換,將 PCM data 轉換到頻率域,進行頻譜分析。之所以另外使用 FFT 來分析,是因為 FFT 有比較好的頻率解析度,計算各個頻率的遮蔽效應時會比較精確。然後 psychoacoustic model 會將頻率按照 critical band(人耳聽覺特性的頻帶)分為好幾組,計算各個 critical band 的遮蔽曲線。在計算遮蔽曲線時,第一件要做的工作是區分哪些頻率的聲音是 tone,哪些頻率的聲音是 noise。為什麼要這麼區分呢?因為根據實驗發現這兩種聲音的遮蔽能力不一樣,noise 具有比 tone 更強的遮蔽效應。這邊會提到兩個名詞,一個是 TMN(Tone Mask Noise),tone 遮蔽 noise 的能力,服務機構是 dB,比較弱,另一個是 NMT(Noise Mask Tone),noise 遮蔽 tone 的能力,比較強。這兩個名詞很眼熟嗎?MP+/MPC 就有提供讓使用者修改這兩個參數的設定。調降這兩個參數,會減低 tone 和 noise 的遮蔽能力,整個遮蔽曲線會往下降,可以容忍的量化噪音就比較低,量化噪音必須減少,分配的 bit 數就必須增加,所以 MP+/MPC 調低這兩個參數,bitrate 會往上竄升,但是量化雜訊也會隨之減少。

在判斷哪些聲音是 tone,哪些聲音是 noise,model 1 和 model 2 採用不同的方法。model 1 是尋找區域範圍內,音量最大的頻率,把這個頻率當作 tone,因為 tone 通常是一定的區域範圍內音量最大的。其他剩下的部分就當成是 noise,加起來以一個單一的頻率代表。
model 2 的作法則不是去區分 tone 和 non-tone(noise),而是給每個頻率一個 tone index,由 0~1,index 數位越大,代表這個頻率越像 tone,根據這個 index 的比例大小,分別計算他們的遮蔽影響力,這樣是不是更精確呢。那要怎麼判斷某個頻率有多像 tone 呢? model 2 是用 predict 的方法。predict 的意思是以現在的狀態,去預測下一個狀態是什麼。在這裡 model 2 會儲存過去的兩個分析過的 window 頻譜,根據頻譜的變化,來判斷哪些頻率有多像 tone。因為 tone 的聲音會具有可預測性,前後的變化會有高度的關聯性,不會隨機的雜亂跳動。根據前後的頻譜變化,model 2 更可以準確的分辦出 tone 和 noise。

找出 tone 和 noise 以後,接著把不重要沒有意義的 tone/noise 去掉,譬如說兩個 tone 靠近,一強一弱,或是低於 ATH 絕對聽覺極限以下的 tone/noise,都可以把他去掉。然後計算剩下來的 tone/noise 的遮蔽效應,求出每個 critical band 的遮蔽曲線,最後在合併這些曲線,找出全體的遮蔽曲線。
實際上 psychoacoustic model 會計算一個數值,然後把這個數值傳給量化階段的程式,讓量化階段的程式知道這個頻帶可以允許的量化噪音是多少,該分配多少的 bit 數。這個傳給量化程式的參數叫做 SMR(Signal to Mask Ratio)。
很眼熟的名詞對不對
SMR=SNR-NMR
MP+/MPC/Lame 可以讓你自行設定 minimum SMR 的底線是多少。
前面提過,MPEG1 Audio 在分成好幾個 subband 準備做量化的時候,用的是"等寬"的 filter bank,這和我們人耳特性的 critical band 不同,由下圖可以看出,低頻的部分一個 subband,包含了好幾個 critical band。到了高頻的時候,好幾個 subband 包含在一個 critical band 裡面。這樣心理聲學模型計算出來的各個 critical band 的 SMR 要怎麼給呢?
model 1 是取 subband 涵蓋的範圍中,最小的 SMR。這麼做在低頻的時候,會將好幾個 critical band 的 SMR 取其最小的一個給 subband,因為 subband 包含了好幾個 critical band,如果用這幾個 critical band 中最大的 SMR,將會有部分頻率的遮蔽效應會估計錯誤,所以為了妥協,只好取最小的。高頻的時候則是好幾個 subband 共用一個 SMR。model 1 有一個致命傷,就是高頻的時候,前面我們說過 model 1 每個 critical band 的 noise 是以一個總和集中的頻率代表,現在這個 critical band 橫跨好幾個 subband,以這個中央代表的 noise 頻率計算出來的 SMR,就無法適用在每個 subband 裡面。(距離中央越遠的就越不正確)
model 2 低頻的時候取最小的 SMR,和 model 1 一樣,高頻的時候則是取 critical band 好幾個 SMR 的平均值給 subband。model 2 不用集中式的 noise,而是用 tone index 的方式來計算 tone 和 noise 的遮蔽效應,所以在高頻的時候會比 model 1 精確。

好了,心理聲學模型不能再講下去了,頭暈了... @_@


音訊壓縮的原理-3

終於進入主旨了:MDCT 和 Quantization(量化)。
前面提到我們將 PCM data 分成好幾個 subband 等待心理聲學模型的判斷,做進一步的量化壓縮,這種壓縮法我們叫做 subband coding。這個 filter 我們用的是 polyphase filter bank,將 PCM data 分成 32 個等寬的 subband。這個 ployphase filter bank 有幾個缺點:
1. 它是有失真的 filter,也就是說,還沒有做會失真的量化步驟,經過 filtering 以後的 subsample 立刻將它還原回 PCM data,結果就已經和原來不一樣了。不過這個失真很小(小於 0.07dB)所以對品質不會有太大的傷害。
2. 它是等寬的頻帶,不符合人耳聽覺特性的 critical band,對後續量化階段的處理不利
3. 它的截止點平緩,所以當輸入頻率很靠近截止點的時候,相鄰的兩個 subband 會發生 aliasing(或者說 overlap,.....請看圖...有機會再補....-_-;;)

MP1 一個 frame 384 個 sample,MP2 和 MP3 用 1152 個 sample,而且 MP3 會將 polyphase filter bank 切出來的 32 個 subband 的 sample,再用 MDCT 轉換,進一步劃分成更細的頻帶,提高對頻率的解析度。這個將原本資料轉換到另一個空間之後再進去行壓縮的方法,我們稱為 transform coding。因為MP3 混合了 subband filterbank 和 MDCT,所以我們把 MP3 的這個 filtering 的程序稱為 Hybird Filterbank。
MDCT 之後,可以運用 butterfly 的計算,消除 polyphase filter bank 產生的 aliasing。
不過成也 MDCT 敗也 MDCT,經過這個 MDCT 轉換之後,資料會完全喪失時間的資訊。什麼是喪失時間資訊?我們回頭來說 FFT。
做 FFT 計算的時候,window size 越大(取進來計算的 sample 越多),對頻率的分解能越強,頻率的計算越精確。但是這些 PCM data 的 sample 是照時間排列的,對 44.1KHz 的 PCM 一次取 32768 個 sample 進來計算,如果不用 overlap,則你的頻率解析度(ie. spectral line resolution)是 1.346Hz,而時間解析度只有 1sec * 32768/44100 = 743.04msec,你看不到小於 735.61msec 的頻率變化的程序。頻率解析度和時間解析度兩個量無法同時求得精確的值,時間越精確(取進來計算的 sample 越少),頻率解析就越差,頻率越精確(取進來計算的 sample 越多),時間解析就越差。
MP3 經由 polyphase filter bank 之後轉 MDCT 的程序如下
1. 1152 個 PCM sample 分成兩個部分,各 576 個 sample,稱為一個 granule。
2. 這 576 個 sample 送進 polyphase filter bank,輸出 32 sample(按頻率順序)x 18 組(按時間排序)
3. 重排為 18 個 sample(按時間排序)x 32 組(按頻率排序)
4. 每一組中的 18 個 sample 為時間順序,加上前面一次轉換的 18 個 sample,總共 36 個 sample 送進去做 MDCT 轉換(所以 MDCT window 有 50% 的 overlap 重疊)
5. 轉出來為 18 個 sepctral line(按頻率排序)x 32 組(按頻率排序)

好複雜嗎? ^^;
總之 MDCT 轉換完以後,時間資訊就不見了(每一個都是 spectral line,都是頻率資訊,不過頻率資訊更細了)。
丟掉時間資訊會有什麼影響呢?
假設現在轉換的這一塊聲音區塊前面是很微弱的聲音,到後面突然出現音量急遽升高的情形,譬如說鼓手突然開始打鼓,這種波形我們稱為「attack」:突然拉起的波形。遇到這種情況心理聲學模型會很笨的認為這個區塊裡面有很強的 masker,可以提供很高的遮蔽曲線,所以可以允許較大的量化失真,因此量化的步驟就會給比較少的 bit。MDCT 一次轉換就是取 576 個 sample,這個 block 的長度,同時也就是時間的長度,所以一次死就死全部的 block,量化失真產生的 noise 會擴散到整個 block 的長度範圍(也就是時間範圍),所以前面聲音很微弱的區段,也會發生這些量化噪音,想當然爾,原來微弱的音量根本無法遮蔽掉這些量化噪音,如果後面大音量區段的 pre-masking 前遮蔽曲線也不夠遮蔽這些 noise,我們就會聽到這些量化噪音了,那麼心理聲學模型也就破功了。
這種壓縮瑕疵叫做 pre-echo。

這個道理類似 JPEG 圖檔的壓縮瑕疵,JPEG 一次轉換是拿 8x8 的區塊去做 DCT 轉換,遇到區塊內包含銳利的邊緣、線條(有很多的高頻成分)的時候,經過 DCT 轉換,高頻的量化失真會擴散到整個 8x8 的像素區塊,所以我們常常看到 JPEG 或 MPEG 檔案畫面上銳利線條的週圍(譬如說文字的週圍)會有那種斑斑點點,破碎的壓縮瑕疵,這就是因為一次死死全部,整個區塊都完蛋的關係。

MP+/MPC 因為不用 transform coding,不做 MDCT 轉換,所以他的 pre-echo 的問題比較小,觀察 MPC 壓出來的波形,幾乎看不到 pre-echo 的壓縮瑕疵。
一個相反的例子,MPEG2 AAC/MPEG4 AAC 完全不用 subband filterbank,直接做 MDCT 轉換(前置有一個 gain-control),不過 AAC 有一套對付 pre-echo 的 tool(或者叫 module)叫做 TNS,可以用來解決 pre-echo 的問題。

這個,越扯越遠,寫不完了 ><
解決 pre-echo 的方法下次繼續....

音訊壓縮的原理-4


pre-echo 的解決方法,其實這一系列的開頭第一篇文章就有提到了。我本來要解釋的是 long block 和 short block 的意思,我說這個牽扯到心理聲學模型的判斷,還有 MDCT window 大小的轉換,目的是為了解決 pre-echo 的問題。經過上面的說明,我想應該很容易猜到解決 pre-echo 的方法就是切換 MDCT window 的大小,遇到 attack 波形的時候換用比較小的 window size,提高時間解析度,避免 pre-echo 的瑕疵擴散。

前面提到 transform coding 是將要壓縮的資料轉換到另一個座標空間,目的是轉換後能以較少的數值記錄原本的資料,或者是能夠依據資料的特性移除一些比較不重要的部分。但是轉換後會喪失原本空間的一些 information,例如 JPG 圖檔由 pixel domain 轉換到 frequency domain 會喪失空間解析度;MP3 由 time domain 轉換到 frequency domain 會喪失時間解析度,造成後面量化之後的雜訊擴散,這種瑕疵在音訊壓縮裡面稱為 pre-echo。

既然有 pre-echo 當然就有 post-echo。想像有一個波形是大音量之後急遽縮小的波封,量化雜訊也會向後擴散到小音量的區域。那麼為什麼很少聽到有人提及 post-echo 的問題?這是因為 post-echo 的問題不重要,我們聽不到 post-echo 的瑕疵,所以也不必去處理。前面沒有貼圖所以大家可能沒有注意到,pre-masking 和 post-masking 的遮蔽能力不一樣,pre-masking 的時間很短,必須很靠近大音量的部分才能被遮蔽到,而 post-masking 的作用時間很長,在大音量之後很長的一段時間之內都有遮蔽的效果。所以 post-echo 通常會被 post-masking 給遮蔽掉,因此我們不用 care post-echo 的問題。

那麼 MP3 是如何解決 pre-echo 的問題?
MP3 有兩個方法,第一個方法是使用 Bit Reservoir。Bit Reservoir 翻成位元儲存槽,LukeLo 大大在「漫談數位音樂」一文中有說明,請大家看一下。MP3 CBR 壓縮時,當某個 frame(1152 個 sample)不需要那麼多 bit encode 時,剩下的空間可以保留起來,留給後面的 frame 使用,這個功能叫做 Bit Reservoir。可以想像為將剩下的 bit 放到 Bit Reservoir 裡面儲存起來,以備後面不時之需。每個 frame 開頭有紀錄這個 frame 真正資料的起始位置(往前 offset 多少 bit),所以能夠正確的播放。記錄 offset 的位元有一定的大小,所以能 offset 的距離也有限制,Bit Reservoir 的大小也有限制,超過能夠容許的範圍即使有多餘的空間,那個 frame 也必須把剩下的空間填上 0(padding zero bit),所以 Bit Reservoir 還是有其限制。MP3 的 Bit Reservoir 很小,而 AAC 的 Bit Reservoir 則比較大,所以使用的彈性比 MP3 大。不論如何,有 Bit Reservoir 的設計,當遇到 attack 波形的時候,就可以增加量化的 bit 數,給多一點 bit,降低量化噪音,如此便可以減小 pre-echo 的壓縮瑕疵。

第二個辦法就是切換 MDCT 的 window size。遇到 attack 波形的時候,將原來長的 window size,叫做 long block,切成三個短的 window size,叫做 short block。原來的 window size 18 個 sample 除以 3 = 6 加上前一次的 6 個 sample 總共 12 個 sample 送進去做 MDCT 轉換。因為 block 縮短,時間解析度提高,就可以有效的控制 pre-echo。(最後一個 short block 可以利用 pre-masking 的遮蔽曲線。block 縮短,量化雜訊擴散的範圍縮小,雜訊分散的位置(時間)就越接近大音量起始的部分,此時 pre-masking 就可以發揮作用。沒有圖,大家只好用力想像一下 ^^;)
要如何判斷現在是 attack 波形呢?交給前面說明的心理聲學模型來處理。心理聲學模型會保留過去兩個 window 的資料和現在的 window 來作分析,根據頻譜的變化判斷是否發生 attack。如果有 attack,便控制 MDCT 轉換的程式做 window switch。切換的 window 不是立刻切換,中間會經過幾個變形窗,這裡就不詳述了,有一個 EncSpot 圖表中出現的名詞是 mixed block,這個意思是 ISO 容許同一個 granule 中,包含長、短兩種不同的 block。我們知道低頻的頻率解析度很重要,所以 ISO 允許遇到 attack 時,最低頻的兩個 scale factor band 使用 long block,其他的 band 用 short block,這叫做 mixed block。
看 EncSpot 的圖表,你便可以知道這個 encoder 會不會使用 short block 的技巧。沒有用 short block 的 encoder(如 Xing)就會被 EncSpot 的作者歸類到爛 encoder 裡面去。
兩個方法並用,就可以控制 pre-echo 的問題。
各家 encoder 多少都會改良 ISO 的設計,像 FhG 的 encoder,Bit Reservoir 的使用就更有效率,long block 也會使用 Bit Reservoir。(ie. 不止 attack 的時候會使用 Bit Reservoir,代表心理聲學模型的判斷更為複雜)

上面又提到一個名詞,叫做 scale factor band(SFB)。SFB 是 MDCT 轉換完以後,將 MDCT 轉出來的係數,幾個幾個集合起來,分成幾個群組,這每一個群組(也就是一個頻帶)叫做 SFB。分成 SFB 做什麼呢?SFB 很接近人耳特性的 critical band,基本上你可以就將它視為 critical band,包成 SFB 之後再送進去量化,如前所述遮蔽計算會好很多。這些 SFB 為什麼命名為 SFB?因為這些 SFB 頻帶裡的 MDCT 數值,都用同一個 scale factor。那什麼是 scale factor 呢?scale factor 就是科學記號 的那個指數 "2"。假設現在 SFB 裡面包含了三個 MDCT 係數: 2.6, 1.3, 0.2,encoder 會找那個最大的係數 2.6,把他改成科學記號表示法,使有效位數的範圍落在正負 1 之間。例如 然後再送進去量化,這時候只量化前面的有效位數。解碼的時候反量化之後的數值再乘上這個 scale factor 就可以還原回原本的 MDCT 係數。那為什麼不乾脆就叫它指數就好還要給它取一個新名字叫做 scale factor 呢?因為這個指數的作用,會重新 scale(放大)有效位數的長度,使有效位數的大小剛剛好符合量化所提供的 bit 數。
詳細的原理,必須說明 MP3 的量化程序 ^^;

先說明一下 EncSpot 的圖表裡面另外提到的兩個名詞:
1. Scalefac_scale: scale factor 的底數一般是 2 (,二進位),但是可以換為以根號 2 為底 ()。以 2 為底可以調整較大的範圍,以根號 2 為底可以做較細的微調。Scalefac_scale 為 0 或 1(EncSpot 顯示打勾)代表切換以 2 或根號 2 為底,這個參數是在告訴 decoder 要用那個數位為底數才能還原正確的 MDCT 係數。
2. Scfsi: Scale Factor Selection infomation,這個參數在 MP2 和 MP3 的 Format 裡面意思不一樣,我現在忘記了,沒時間查資料,總之是告訴 decoder 解碼的時候哪幾個 SFB 是用哪幾個 Scale Factor 乘的,正樣才能乘出正確的係數。沒有共用 Scale factor 就不用有這個資訊。

量化的程序:
量化的程式分為內外兩個迴圈。內部的迴圈叫做 bitrate control,它會根據可用的總 bit 數,分配 bit 給各個 SFB,並且控制最後編碼的 bit 總數會小於可用的 bit 數,所以這個迴圈叫做 bitrate control loop。如果編碼的結果超過可用的 bit 數,bitrate control 就會提高一個參數叫做 global gain,提高這個參數會使得需要編碼的有效位數變短,所以需要的 bit 數便會降低,使得編碼後的 bit 數符合可用 bit 數。
外部的迴圈叫做 quality control loop,當內部迴圈 encode 完以後,會將結果送出給外部迴圈,外部迴圈會計算目前內部迴圈編碼完以後所產生的量化噪音,並且和心理聲學模型送來的 SMR(可以容許的量化噪音)做比較。如果有 SFB 目前的量化噪音大於可以允許的量化噪音(代表目前的量化噪音超過遮蔽曲線),程式便會放大(提高)一個參數叫做 Scale factor
放大 Scale factor 會使得需要編碼的有效位數變長,所以需要的 bit 數便會增加,bit 數增加會使得量化噪音減小,直到產生的量化噪音符合可以容許的界限為止。外部迴圈放大 Scale factor 的動作叫做 amplify Scale factor band,放大這個參數以後會重跑一次內部迴圈,重新分配一次 bit。此時 Scale factor 有放大的 SFB 會需要較多的 bit,當然其他的 SFB 就必須減少 bit。因為其他的 SFB 本來的量化噪音是符合容許的,所以我們就開始祈禱經過重新分配以後,bit 數被減少的 SFB 的量化噪音仍然會低於可以允許的界限。如果是,那麼太好了,經過調整以後所有的 SFB 的量化噪音都小於允許的界限,那麼就跳出迴圈,大功告成。如果不是,經過調整以後還是有 SFB 超過可以允許的量化噪音,那麼就再放大這幾個 SFB 的 Scale factor,重跑一次內部迴圈。重新分配完以後外部迴圈再檢查,還有沒有 SFB 不符規定.....如此週而復始,直到:
1. 所有的 SFB 都小於或等於可以允許的量化噪音
2. 所有的 Scale factor 都已經放大到最大值

然後跳出迴圈。
以 2. 的條件跳出來的,代表還有 SFB 的量化噪音超過可以容許的範圍(例如 bitrate 太低,這種情況當然再怎麼調整還是會有 SFB 超過限制),此時就要從剛剛所有的量化結果中,挑一個失真最小的結果來編碼。
例如有兩種情況
1. 僅 SFB 9 (1.9-2.2kHz) 超過界限
2. SFB 0 (0-172Hz) 和 SFB 20 (13-16kHz) 超過界限

Lame 會選 1 來編碼。
ISO reference code 會笨笨的用跳出迴圈之前的最後一個結果來編碼,而最後一個計算的結果通常是最糟的 case

這個量化的程序,與其說是在做 bit allocation(分配 bit),倒不如說是在做 noise allocation(分配 noise),決定 noise 要分配到哪些地方,哪些地方 noise 多一點,哪些地方 noise 少一點。所以你看 MP3 的說明文件,它會把這個程序稱為 noise allocation,而不用一般的說法 bit allocation。

瞭解 Scale factor 這個參數的作用之後,接下來要解釋為什麼「這個指數的作用,會重新 scale(放大)有效位數的長度,使有效位數的大小剛剛好符合量化所提供的 bit 數」。
假設現在 MDCT 的數值是 9.6,改成 (讓有效位數介於正負 1 之間),用二進位紀錄有效位數 0.6,最接近的是 .101 數值為 和原來 0.6 誤差 0.025,需要 3 個 bit 紀錄。現在放大 Scale factor,改成 ,用二進位記錄有效位數 0.3,最接近的是 .0101,數值為 0.3125,和原來誤差 0.0125,和上面相比誤差縮小,而所需的 bit 增加為 4 個。所以提高 scale factor,可以使有效位數剛剛好符合量化增加的 bit 數,或者說可以"用完"增加的 bit 數的所能提高的精確度。
上面的說明只是為了方便瞭解簡化之後的例子,真正 MP3 壓縮時用的 scale 指數相當複雜,包含了上面提到的 global gain 參數(global gain 越高,所需 bit 越少,品質越糟,和 Scale factor 的作用剛好相反)和 scale factor,還有 pre-emphsis tab 等等的參數混合在一起,才組成真正的 gain 參數。
long block 使用的式子


如上所述調整 Scale factor 能夠有效的運用所有 bit 數的精確度,有助於音質提升。Xing 早期的 encoder 不會使用 Scale factor(Scale factor = 初始值 0),後來才加入 Scale factor 的功能。
http://www.xingtech.com/developer/mp3/
看到 EncSpot 顯示有使用 Scale factor(Scalefac > 0 佔百分之幾),代表這個 encoder 不會太笨
但是要注意的是,音質要好,Scale factor > 0 不是必要的,有可能各個 SFB 都沒有超過容許的量化噪音,所以也不需要放大 Scale factor。

說了這麼多,可能還是很難吸收(表達能力太差 >_<)
有興趣的人可以使用一個 tool,叫做 MP3x,其實就是 Lame 這個 encoder 的特別版本。它會在壓縮的時候用圖形的方式表現目前壓縮的狀態....放一張圖好了....
如下圖

由上而下分別是
原始 PCM 視窗,三條黃線分割的區域,中間黃線的左右兩邊代表 1152 個 sample 分成的兩個 granule,
下面是經壓縮後,再合成(還原,也就是播放時的)波形
再下面是 MDCT window 轉換後的係數,對應上面兩個 granule 的視窗,黃線區分的是不同的 SFB。你可以切換顯示狀態,變成顯示"量化"之後的 MDCT 係數,由圖形變化,你可以看到經量化後產生的誤差。
然後下面是原始 PCM 經 FFT 的分析之後的頻譜,也就是心理聲學模型判斷的部分,每個 bar 代表 critical band。灰色的線是原始波形的頻譜,藍色的線是可允許的 distortion,紅色的線是經過 encode 之後,實際的 distortion。如果你看到紅色的線超過藍色的線,代表有些 SFB 的 distortion 已經超過心理聲學模型所可以容忍的範圍了,你應該要提高 Lame 壓縮的 bitrate。
最後一個視窗是 Scale factor band。
用這個軟體看圖說故事,比較能夠瞭解 MP3 encoder 內部到底是如何運作的。

以上,應該有很多打錯寫錯的部分,請原諒,我大概永遠都無力更正了


音訊壓縮的原理-5

把那天偷懶沒寫的部分寫完...

MP3x 的圖形示範說明
壓縮的 wav 檔是 EBU SQAM test tone 27 ,著名的 pre-echo 殺手 "castanets"
這個 wav 檔有非常多變態的 attack 波形,是各種 encoder 最痛恨的那一種壓縮對像
Lame CBR 128kbps 壓縮,所有參數都是預設值,移動到第 37 個 frame = 第 0.97 秒

圖1最上面那行顯示的是 frame header information,紅色的字體代表 "on"
js 所在的這個欄位會顯示幾種情況: mono, joint-stereo, stereo,代表這個 frame 是以哪一種聲道模式壓縮。如果是 joint-stereo(js),還會顯示是 mid-side stereo,還是 intensity stereo。(ms 和 is 的意義,請參照 LukeLo 大大的「漫談數位音樂」一文)
mdb 代表 main data begin,告訴 decoder 往前移動多少 bytes 才是這個 frame 真正 data 的起始位置。後面兩個數位則是 壓縮這個 frame 的 MDCT 係數所花費的 bit 數/壓縮這個 frame 之前 Bit Resevior 的大小

第一個視窗是原始 PCM 的波形,平常是顯示左或右聲道,上面我切換為顯示 mid-channel,圖2是 side-channel .

最左和最右邊的黃色的線之間包含的是這個 frame 壓縮的 1152 個 sample。中間的黃色的線再把這個 frame 切成兩半,分為兩個 granule,各 576 個 sample。granule0 和 granule1 分別做 MDCT 轉換,對應下面的兩個 MDCT 視窗。可以看到圖中右邊的 granule1 有一個音量急遽上升的 attack 波形,所以 Lame 把這個 granule 再切成三個 short block(多出兩條黃線切成三等分),各 192 個 sample,分別做 MDCT 轉換。
視窗底部的藍色和綠色的線,代表 psy-model FFT window 的長度,分別對應下面的左右兩個 FFT 視窗。前面說 ISO 是用 1024 個 sample 的 FFT window size,Lame 則是用 768 個 sample 的 window size。(這是有原因的,因為 768 個 sample 的長度對於計算一個參數叫做 perceptual entropy 會比較準確。由 perceptual entropy 這個參數 psy-model 可以知道這個波形發生了 attack,告知 MDCT 做 window switch。768 個 sample 的長度較短,越少距離 granule 中心越遠 sample 會被扯進來干擾計算,對於 pe 的計算判斷會較準確。當然有一好沒兩好,FFT window size 越小,頻率的解析度就越不精確,遮蔽計算的效果越差。凡事都是對立需要妥協的,這是不管在那個領域都會成立的真理 )

第二個視窗是壓縮之後,synthesis filter bank 還原回來的 PCM 波形(播放時候的 PCM 波形)。
圖3是 ISO 的 psy-model 壓出來的結果

可以看到 ISO 的 psy-model 漏掉了這個 attack,沒有做 MDCT 的 window switch(沒有切成三個短的 short block,看黃色的線)。事實上 ISO 的 psy-model 是慢了一步,在下一個 granule 才換成 short block。(因為 1024 個 FFT window size 的關係?)
所以可以看到右邊的 granule1 大音量開始的前面,波形多出了一堆雜訊,這個就是我們之前常常說的 pre-echo

第三個視窗是 MDCT 的係數,左邊的 MDCT0(start) 代表用的是中介窗 start(從 long block 換到 short block 不是立刻轉換,中間會經過幾中介的 window,照這樣的順序:normal--> start--> short--> end--> normal),右邊則是 MDCT1(short),代表使用 short block。
圖4是切換為顯示量化之後的 MDCT 結果


第四個視窗是 FFT 的頻譜,各個顏色的意思上次有說過,後面那些數位 pe 是 perceptual entropy,其他的不知道

最後一個視窗是 SFB,scale = Scalefac_scale, preflag = pre-emphasis flag, ggain = global gain
各個 bar 為 Scale factor band,一開始的 scale factor 都是 0,然後有放大的 band 長條圖會變長。

QuickTime 6.0 可以壓 MPEG4 AAC,用的是 Dolby AAC 的引擎(改自目前世界上最頂尖(?)的 FhG professional AAC Codec,速度比較快,音質稍微差一點,類似 MP3Enc 和 FastEnc 的差別)。psy-tel AAC 的開發者 Ivan 用這首 castanets 測試,結果發現 QT6.0 AAC 的 psy-model 會漏掉幾個 attack 沒有切換為 short block(而 FhG 的 AACdemo 2.2、LiquidAudio AAC 則正常)。不過也有人持反論,認為這幾個 attack 相隔距離太近,pre-echo 瑕疵可以利用前一個 attack 的 post-masking 遮蔽掉。也許有興趣的人可以試試看,看看 pre-echo 到底聽不聽得到




lame 4.0 還在開發階段,我這幾天才剛測試過,令人印象深刻
不過對於一些 sample,lame 4.0 會破功,有明顯壓縮瑕疵。
現階段最穩定的版本是 3.90.2/ 3.90.3,已經被調整得相當成熟,
對於各種檔案類型的 sample 都很少有明顯的壓縮瑕疵,音質也相當好。

不過和 3.94 alpha 相比,3.90.x 就是有 "老 MP3" 的那種悶悶的,音像不開闊的感覺。
也是在開發中的 3.94 alpha 在這一點上就比 3.90.x 系列好很多,
可惜的是還不夠穩定,遇到一些 sample,會有很明顯的壓縮瑕疵。

最不建議使用的就是 3.93,真的是 lame
3.93 系列有推出補強修正版 3.93.1,如果真的要用 3.93 系列,
用 3.93.1 較好,不過我還是建議用 3.90.x 或 3.94 alpha 壓壓看。

3.94 alpha 在 128kbps 的音質,我最近發現可以贏過 FHG 現在的 mp3PRO Codec。
FHG 現在的 mp3PRO Codec,壓普通的 MP3 時(非 mp3PRO)有 bug,會有明顯壓縮瑕疵。
就算是備受讚譽的老的壓縮引擎(例如 Audioactive Production Studio),
音質也還是比 3.94 alpha 差。(前提是 3.94 alpha 不能壓出明顯壓縮瑕疵 ^^;)

另外 tooLAME 的音質也比許多要錢的 MP2 Encoder 好 ^_^
誰說一定要商業軟體才有高品質 ^_^

不過缺點是會不穩定就是了 ^^;;


關於DD音效的問題勒..?

像我們知道DD音效有對聲音作Dialogue Normalize, 而DTS沒有
當我們要對DTS跟DD作交互比較的時候
是只要同時調高擴大機的volumn就好??
還是只要單獨對中央聲道的DB值調高就好呢??? 可不可以給愚弟解惑一下

調高擴大機的音量,將 DD 的音量調高 4dB。
一般電影的平均音量大約是 -27dB,DD 作的 Dialogue Normalization(就是 Volume Normalization)
一般設為 -31dB,相差 4dB。 引用
順便請問一下, DD音效對動態範圍壓縮, 對於音質的破壞影響有很大嗎?

動態範圍縮小,大炮的巨響和槍聲變得一樣大,當然不好。
壓縮動態範圍會增加量化噪聲,聆聽環境良好的話建議將動態壓縮關閉,取得完整的動態範圍表現。


只寫這樣好像在灌水

補充說明一下。
Dialogue Normalization 是 Dolby Digital 資料流中的一個 Audio Metadata 參數,
Audio Metadata 的意思是「記錄 Audio Data 的一些額外訊息的 Data」,給 deocder 使用,
在解碼的時候做一些額外的控制。
這個參數的意義是指示 decoder,在解碼的時候要將各聲道的音量降低幾 dB,
也就是等於 Volume Normalization 的作用。
那麼為什麼 Dolby 要另外給它取一個名詞叫「Dialogue Normalization」呢?
因為 Dolby 一向很喜歡故弄玄虛,把平凡無奇的技術冠上一個很漂亮的名字,讓消費者覺得很深奧,
乖乖掏錢付權利金

使用 Dialogue Normalization(簡寫作 dialnorm)的原因有三個:
1. 將所有節目的平均音量都一致調整到(正規化到)-31dBFS(數位音量最大聲是 0dB Full Scale,簡寫作 0dBFS),讓不同節目的平均音量都差不多,這樣消費者在收看節目的時候,就不用每轉一次台就要調整一次音量。
譬如說我原來在收看古典音樂的節目,平均音量比較小,聽到一半突然插入新聞快報,聲音一下變得很大聲,很不協調。
還有,不同節目、不同電台之間的音量往往也都不相同。
做 dialnorm 之後,所有節目的平均音量都正規化到 -31dBFS,使用者就不需要一直調整音量。

2. 因為使用者使用的視聽設備不盡相同,有的很好有的很差,為了符合一般人使用的器材環境,做 dialnorm 降低最大聲的音量,可以保證使用者的視聽器材絕對不會發生 clipping(音量過大失真)的情況。

3. dialnorm 這個參數同時會影響到動態壓縮這個參數的使用結果,動態壓縮當中的 Null Band,就是以 dialnorm 所設定的音量大小為中心點。(後面再解釋)

那麼要如何讓所有節目的平均音量都等於 -31dBFS 呢?
首先我們要先計算節目的一段長時間的平均音量大小,這個平均音量要用 A-weighted 的曲線來計算。
因為人耳的聽覺對不同頻率的敏感程度不一樣,20KHz -20dBFS 的聲音我們聽起來可能和 1KHz -100dBFS 差不多大,所以計算音量的時候就要對各個頻率的音量做適當的加權計算,加重比較敏感的頻率的影響力,這樣算出來的平均音量大小才會接近實際上人耳的聽覺感受。

使用 A-weighted 的加權曲線計算就是讓原始訊號通過一個濾波器,這個濾波器會在不同頻率的地方衰減不同的 dB 數。
譬如說在 20KHz 的頻率衰減 80dB,原來的訊號在 20KHz 的地方就會由 -20dBFS 減弱到 -100dBFS,
變得跟人耳聽覺上的感受一模一樣,這樣計算出來的平均音量就會非常接近實際聽起來的音量大小。

根據經驗,一般電影的平均音量約為 -27dBFS,最大聲可達 0dBFS。
新聞節目的平均音量為 -20dBFS,最大聲為 -10dBFS。
搖滾類的音樂節目平均音量為 -10dBFS,最大聲為 0dBFS。

知道平均音量以後,就可以設定 dialnorm 這個參數。
譬如說電影的平均音量為 -27dBFS,dialnorm 就設為 -27dB,這樣解碼的時候 decoder 就知道
-27-(-31) = 4dB,要降低音量 4dB,播放時的平均音量才會為 Dolby 規定的 -31dB。
同時,本來最大聲為 0dBFS,現在做 dialnorm 之後,降為 -4dB,沒有辦法到達數位紀錄的最大音量
0dBFS,但是也可以保證不會 clipping。

有用過 Sonic Foundry Soft Encode 這個壓 DD 5.1 的軟體嗎?裡面 Dialogue Normalization 參數的
預設值,就是 -27dB。
這是因為它預設你要做的是電影的 DD 5.1 音軌,所以使用這個預設值。

DTS 沒有 dialnorm 這個設計,所以比較 DTS 音軌和 DD 音軌的時候,要將 DD 的音量調高 4dB。
不過這是一般通常的情況,也有 dialnorm 不是 -27dB 的情況,這時候就只好用聽的,
想辦法盡量調整到差不多接近一樣。

動態壓縮... 我想就算了不要再補充了(打字好累 ^^;),總之能關掉就關掉,
這樣才能得到最好的音質表現。
==

當時寫得很爛,把很簡單的道理說得很複雜,不過懶得重寫了,只好將就著看吧 ^^;
..
__________________
http://bbsimg.qianlong.com/upload/01/08/29/68/1082968_1136014649812.gif
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
 



發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 04:02 PM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1