音频基础--PCM音频
1、PCM定義
??PCM 全稱 Pulse-Code Modulation,就是脈沖調制編碼,是用于將波形表示的模擬音頻信號轉換為數字1和0表示的數字音頻信號,而不壓縮也不丟失信息的處理技術。簡單來說就是一種用數字表示采樣模擬信號的方法。
??如下是使用Audacity音頻處理軟件截取1~2s的時間段內音頻波形圖:
??我們再對這個區間的波形圖進行放大:
??上面一個像火柴棒的是什么?它其實就是一個樣本,接下來介紹PCM 幾個重要問題:采樣(Sampling) 、量化(Quantization) 、編碼(Coding)、聲道、存儲。
2、采樣
??通常自然界的聲音可以通過一條曲線在坐標中顯示連續的模擬信號表示:
??為了更加容易理解 PCM,選取其中的一個波形,假設這一個波形表示一秒的音頻模擬信號。則采樣可以如下圖所示:
??其中紅色的曲線表示原始信號;藍色垂直線段表示是當前時間點對原始信號的一次采樣。
??采樣率:sampel rate,每秒鐘采集的樣本數,采樣頻率一般越大,轉換失真越小,聲音的還原度就越高,質量越好,同時占用的空間也會越大。。常見的采用率有:44100HZ,48000HZ和91KHZ。
3、量化
??原始信號采樣后,需要通過量化來描述采樣數據的大小。
??量化處理過程,就是將時間連續的信號,處理成時間離散的信號,并用實數表示。這些實數將被轉換為二進制數用于模擬信號的存儲和傳輸。在圖例中,如果說采樣是畫垂直線段的話,那么量化就是畫水平線,用于衡量每次采樣的數字指標:
??每條橫線表示一個等級(level),為了更好的描述量化過程.引入位深(bit-depth) 概念:用來描述存儲數字信號值的 bit 數。
常用的模擬信號位深有:
- 8-bit:2^8 = 256 levels,有 256 個等級可以用于衡量真實的模擬信號;
- 16-bit:2^16 = 65,536 levels,有 65,536 個等級可以用于衡量真實的模擬信號;
- 32-bit:2^32 = 4294967296 levels,有 4294967296 個等級可以衡量真實的模擬信號。其中 16-bit 的最常見。顯而易見位深越大對模擬信號的描述將越真實,對聲音的描述更加準確。
??量化的過程就是將一個平頂(同一個高度)樣本四舍五入到一個可用最近 level 描述的過程。如圖中黑色加粗梯形折線。量化過程中,我們將盡量讓每個采樣和一個 level 匹配,因為每個 level 都是表示一個 bit 值。
4、編碼
??編碼就是將每個 sample 數據轉換成二進制數據,該數據就是 PCM 數據。PCM 數據可以直接存儲在介質上,也可以在經過編解碼處理后進行存儲或傳輸。PCM 數據常用量化指標: 采樣率、位深、聲道數、采樣數據是否有符號(有符號的采樣數據不能使用無符號的方式播放)、字節序(表示 PCM 數據是用大端存儲還是小端存儲,通常是小端存儲)。 例如: ffmpeg 常見的 PCM 數據格式 s16le,它表示有符號的 16 位小端pcm 數據.
5、聲道
??聲道:channel,表示音頻采集源的個數,比如:單聲道,采集源只有一個;雙聲道(立體聲),采集源有兩個,分別為左和右;多聲道(環繞聲),采集源有多個。聲道越多,播放的音頻效果越立體,但是存儲的數據越大。
??對于多聲道(大于一個聲道)的PCM音頻,在實際編碼中,我們也按照單聲道處理,統稱為一個采樣,如上面的單聲道,雙聲道和三聲道的一個采樣大小分別為:8bits,18bits和24bits;可以將多聲道分離為一個個單聲道。
??通過上面的介紹,我們可以得出如下關系:
- sample_bits = depth_bits
- channels_sample_bits = sample_bits* channel
- samples_bits_per_second = sample_rate * depth_bits * channel = sampe_rate * sample_bits * channel;
6、存儲
??例如一段有符號的 8-bit 的 pcm 數據:
+---------+-----------+-----------+----binary | 0010 0000 | 1010 0000 | ...decimal | 32 | -96 | ... +---------+-----------+-----------+----??其表示的采樣范圍是 -128 ~ 127. 當含有多通道時候 PCM 數據就會交叉排列(通常)以雙聲道為例:
+---------+-----------+-----------+-----------+-----------+----FL | FR | FL | FR | FL | +---------+-----------+-----------+-----------+-----------+----??對于 8-bit 有符號的 PCM 數據而言,上圖表示第一個字節存放第一個左聲道數據(FL),第二個字節放第一個右聲道數據(FR),第三個字節放第二個左聲道數據(FL)…不同的驅動程序對于多聲道數據的排列方式可能稍有區別,下面是常用的聲道排列地圖:
2: FL FR (stereo) 3: FL FR LFE (2.1 surround) 4: FL FR BL BR (quad) 5: FL FR FC BL BR (quad + center) 6: FL FR FC LFE SL SR (5.1 surround - last two can also be BL BR) 7: FL FR FC LFE BC SL SR (6.1 surround) 8: FL FR FC LFE BL BR SL SR (7.1 surround)??下圖展示的是8bit和16bit,單聲道和多聲道的存儲方式示意圖:
??下圖展示的左右聲道的PCM數據:
??從以上可以看出,剛開始的4個字節是同一個采樣點,其中0x04e8是左聲道,0x01c9是右聲道,發現是不一樣的。通過cool edit pro查看波形:
??從上圖,可以發現左右聲道的數據雖然形狀類似,但是值得大小不同:
參考資料:
《https://zhuanlan.zhihu.com/p/396273481》
《https://www.cnblogs.com/smartNeo/p/14788021.html》
總結
以上是生活随笔為你收集整理的音频基础--PCM音频的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解决网页篡改,修复系统bug神器
- 下一篇: 毕设题目:Matlab图像处理