這個篇章稍微往軟體走一步,我們來談談 DSP (Digital Signal Processing),數位訊號處理在整個音訊架構扮演怎麼樣的角色。DSP在整個電聲領域的位置是在軟體與硬體之間,通常在DSP處理音訊有一些好處:較省電、較快速。下圖是簡單的比較表,可供開發人員參考。
|
軟體 |
DSP |
編譯方式 |
簡單 上層C\JAVA等等 |
困難 Assembly code or C compiler |
聲道處理 |
通常一個串流是雙聲道 |
高階或具備DAC的晶片可直接做多聲道處理 |
速度 |
以目前的處理器來說,軟體演算法已不見得比硬體要慢。不過通常來說,還是DSP的編解碼或處理要更快,因為assembly code可以做最底層的優化 |
|
訊號格式 |
Floating point 32\64 bit以上 |
Floating\fixed point 通常為16bit |
DSP的門戶是ADC \ DAC (Analog-to-Digital Convertor),技術內容是取樣(Sampling)、量化(Quantization)與編碼(encoding);工程技術細節網路上找就能看到許多,在此不多贅述。但是一定要知道的是他們的背後意義:
(1) Sampling是指時間軸上的數位化(切割成”點”, n個/s),frame或slot是sample的更大集合,通常語音處理上會因為特性需求訂為16~32ms為1個frame,若sampling rate = 48kHz, 則 1 frame = 32ms = 48k*32m = 1536 samples。一般CD的取樣率是44.1kHz,另一常見的是48kHz,越高代表取樣越不失真。學理上講到的Nyquist rate,是不是真的可以還原出1/2 頻寬呢?運氣好取樣的曲線就像下圖:
運氣不好取樣的曲線就像下圖:
還覺得剛好兩倍頻寬是足夠的嗎?
(2) Quantization是指大小振幅上的數位化(切割成”位階”),越高bit數代表可以量化的更細緻,好比說0.49876就比0.5要更精確,展現的細節就越多。
(3)Encoding跟常見的wav或mp3不同,學術上的encode指的是更底層NRZ等硬體介面傳輸的編碼。不過筆者在應用上傾向於檔案格式這個解釋,因為比較親民。除了.pcm檔以外,每個音檔標頭(header)都記載了這個音檔的取樣速度sampling rate、bit、聲道channel,甚至於作者、曲風等等資料。
接著本篇重點中的重點,學校沒教、只有DSP界才懂的核心概念是:數位最大的單位是0dBFS (Full Scale)。類比世界裡,我們習慣說這個電壓是幾伏特,無論大小或正負我們都很常見,要做加減乘除運算十分的流暢,那麼,數位只剩下0101的世界中我們該怎麼定義呢?別忘記我們在量化的段落裡講到,bit數越高能夠表達的就越精細,也就是說如下圖:
我們將數位的最大訂為0dBFS,也就是量化單位的1,0dBFS在不同的運算器裡都代表111111…..1;而量化單位的0,在不同位元的運算裡面表達的就不同了,16位元裡是 -96dBFS,24位元裡則是 -144dBFS。別忘了,負的dB越多,是代表值越小,並不是負數。( 1 = 11111........1 = 0 dBFS,0 = 00000.......... = -96dBFS(16bit) = -144 dBFS(24bit))
可能你會有一些疑惑:數位世界最大的0dBFS到底是多大聲呢?恭喜你問到另一個重點了。先前我們講到,DSP的門戶就是ADC\DAC,0dBFS多大聲就要從DAC身上來著手,DAC的full scale reference voltage就是數位的0dBFS大小。iPhone的耳機輸出,0dBFS大約是0.95Vrms左右,而在其他手機上,就不見得會這麼大了。
我們下篇將進入到另一個主題:音量。
留言列表