① 壓縮器的工作原理
壓縮器(Compressor)的主要功能是衰減強度超過了給定門限的強信號,減小了信號的動態范同;而擴展器(Expander)則是衰減強度小於給定門限的弱信號,增加了信號的動態范圍。顯然這里壓縮、擴展是對應信號的動態范圍改變而言的,因此它們有時被稱為「動態范圍處理器」。 [2]
從本質上講,壓縮器(Compressor)是一種自動音量控制設備,能夠減小聲音的動態范圍。在現有的錄音棚中,壓縮器幾乎是必要沒備。壓縮器的面板上有幾個重要的控制參數,其中之一是閥值。簡單地說,閥值是允許用戶自由指定的一個臨界電平值,當輸入電平高於這個值的時候,壓縮器才開始工作。如果輸入信號的電平低於閥值,那麼壓縮器就會自動停止。因此,這里傳達出的一個重要信息就是壓縮器並不是一直都處於工作狀態的(特殊情況除外)。如果輸入信號電平過低,將永遠不會達到壓縮閾值;如果輸入信號電平過高,壓縮器將嚴重製約信號的動態范圍,影響聲音在動態上的表現。壓縮比決定壓縮器的壓縮強度,換句話說它代表的是壓縮器將壓低多少超過閥值的音頻信號。例如,5:1的壓縮比意味著,如果輸人信號在當前的基礎上增加到10倍.那麼輸出信號的電平相應地只增加到兩倍。
另外兩個重要的參數分別是建立時問和釋放時問。建立時間指的是,當輸人信號超過閾值後壓縮器由啟動到正常壓縮狀態所用的時間;釋放時間指的是,當輸人信號下降到閾值之下後壓縮器由壓縮狀態恢復到不工作狀態所需要的時間。釋放時間是一個至關重要的參數,因為如果將釋放時間設置得過大,就會產生泵音效應,尤其當前一個音較響而後一個音較弱時,這種現象尤為明顯。
② ape文件是無損壓縮音頻,如何播放和打開
APE是什麼文件
APE,全稱Monkey's Audio,是一種流行的無損音頻壓縮格式,最初由Matthew T. Ashland開發。它區別於有損壓縮格式如MP3,通過更精細的記錄方式壓縮音頻,保持數據完整,解壓後與原始文件無差別。其特點包括有查錯能力但不提供糾錯,壓縮率約55%,體積小於FLAC,便於存儲。
APE無損壓縮原理
無損壓縮如APE,如Monkey's Audio,通過動態壓縮技術,只壓縮音頻中可壓縮部分,確保音頻質量不受損。與WinZip或WinRAR類似,但不同的是,壓縮後的APE文件可直接播放,無需額外解壓。Ape技術允許將WAV文件高效壓縮為體積更小的文件,還原時音質與原文件一致,如同1080P視頻般清晰。
ape文件如何打開
ape文件廣泛兼容多種播放器,包括暴風影音、千千靜聽、Foobar2000和aimp等電腦音頻軟體,以及許多現代手機播放器,只要它們支持無損音頻格式。對於追求高品質音樂體驗的手機用戶,ape文件也是個不錯的選擇。
通過上述介紹,對於ape文件的性質和打開方式,應該已有了清晰的認識。如有任何疑問,隨時提問。
③ MP3的壓縮原理是什麼
其實音頻壓縮技術很多,MP3壓縮技術並不是最好的。但現在看來它仍然是主流。
音樂信號中有許多冗餘成分,其中包括間隔和一些人耳分辨不出的信息(如混雜在較強背景中的弱信號)。CD聲音不經壓縮,採用44.1kHz的固定速率采樣,可以保證最大動態音樂的良好再現,當然,信息量較少處的數據量也是相同的,因而存在壓縮的可能性。音響頻寬為20~20kHz(頂級CDPlayer可向下延伸至2Hz)已成為目前的音樂標准。MP3為降低聲音失真採取了名為"感官編碼技術"的編碼演算法:編碼時先對音頻文件進行頻譜分析然,然後用過濾器率掉噪音電平,接著通過量化的方式將剩下的每一位打散排列,最後形成具有較高壓縮比的MP3文件,並使壓縮後的文件在回放時能夠達到比較接近原音源的聲音效果。雖然他是一種有損壓縮,但是它的最大優勢是一極小的聲音失真換來了較高的壓縮比。且現在的MP3採用與杜比AC-3相似的變壓縮比率(VBR)壓縮技術,采樣的壓縮比率依音樂中信息多寡,並利用人耳的掩蔽效應來減少冗餘數據。
④ 音頻壓縮原理
音頻壓縮的原理
轉自http://forums.dearhoney.idv.tw/viewtopic.php?t=24378
引用:
音訊資料因為其資料內容的特性,以傳統的壓縮法難達到很高的壓縮率,不過我們人耳並沒有無限的時間解析度和頻率解析度,其實原始的音樂訊號中包含了很多我們聽不到的資料,把這些對我們來講其實無意義的資訊給去掉,這樣就可以達到很高的壓縮率。這種利用人類 感官知覺的特性作的失真壓縮法,就叫做 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 的問題,結果越講越多... ><
看的人就忍耐一下吧... -_-;;;
前面說到心理聲學模型是如何工作的。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 精確。
好了,心理聲學模型不能再講下去了,頭暈了... @_@
圖... 有機會再補 ^^;
終於進入主題了: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(或者叫 mole)叫做 TNS,可以用來解決 pre-echo 的問題。
這個,越扯越遠,寫不完了 ><
解決 pre-echo 的方法下次繼續....