原理
音頻的原理
把模擬信號轉變成 數字信號,前者是連續的,后者離散的
。因此有DAC和ADC。
需要關注的三個指標,這三個指標決定音頻的質量
-
比特率:表示經過編碼(壓縮)后的
音頻數據每秒鍾
需要用多少個比特來表示,單位常為kbps。這個數字越大音頻質量越好,但是數據文件就越大。
-
響度和強度:聲音的主觀屬性響度表示的是一個聲音聽來有多響的程度。響度主要隨聲音的強度而變化,但也受頻率的影響。總的說,中頻純音聽來比低頻和高頻純音響一些。這個就是
振幅
。計算方式20lg(amp1/基准振幅),基准振幅就是在聲音最大的時候采用的振幅。 -
采樣和采樣率:采樣是把連續的時間信號,變成離散的數字信號。采樣率是指
每秒鍾采集多少個樣本
。采樣率越高其質量越好,一般在底層是48k采樣率,寬帶電話是16k,窄帶是8k。
Nyquist采樣定律:采樣率大於或等於連續信號最高頻率分量的2倍時,采樣信號可以用來完美重構原始連續信號。
這句話的意思大概就是, 比如采樣率是16Khz, 那么頻率只能達到8kHz;如果是48kHz的采樣率,那么頻率可以達到24kHz.
開源軟件 audacity
的插件就是ny結尾的,里面用lisp語言寫的,用於計算一些rms、THD等
- 編碼方式
主流的有2中,PCM和DPCM,
- 脈沖編碼調制 (Pulse Code Modulation)是一種對
模擬信號數字化的取樣技術
,將模擬語音信號變換為數字信號的編碼方式,把時間上連續的信號變成時間上離散的信號
。把連續的編碼成離散的,這里有損失,但是人耳聽不出來。 - 差分脈沖編碼調制(Differential Pulse code modulation,DPCM),是一種對模擬信號的編碼模式,與PCM不同每個抽樣值不是獨立的編碼,而是先根據前一個抽樣值計算出一個預測值,再取當前抽樣值和預測值之差作編碼用.此差值稱為預測誤差.抽樣值和預測值非常接近(因為相關性強),預測誤差的可能取值范圍比抽樣值變化范圍小.所以可用少幾位編碼比特來對預測誤差編碼,從而降低其比特率.這是利用減小冗余度的辦法,降低了編碼比特率。這個數據是網上找的,總的一句話就是
與相等的PCM比較,這種編碼只需要25%的比特數
,比特率小,文件就小。
視頻編碼
- 視頻通過其中
每一幀的圖像
表達信息;視頻包含的音頻可提供大量信息;視頻通過圖像的運動、場景的變換提供信息; - 視頻信號有2種
-
RGB顏色空間
-
YUV顏色空間 (Y=明亮度, UV=就是色度,包含了色調和飽和度)
沒有UV信息一樣可以顯示完整的圖像
,只不過是黑白的,這樣的設計很好地解決了彩色電視機與黑白電視的兼容問題。並且,YUV不像RGB那樣要求三個獨立的視頻信號同時傳輸,所以用YUV方式傳送占用極少的頻寬
。
因此 YUV編碼更常用。
RGB和YUV之間可以轉換。
視頻編碼的最主要目的是數據壓縮
,在傳輸過程中花費太多的帶寬。
數據有冗余的,所以可以壓縮
- 時間冗余:視頻相鄰的兩幀之間內容相似,存在運動關系
- 空間冗余:視頻的某一幀內部的相鄰像素存在相似性
- 編碼冗余:視頻中不同數據出現的概率不同
- 視覺冗余:觀眾的視覺系統對視頻中不同的部分敏感度不同
音視頻
封裝格式(也叫容器),就是將已經編碼壓縮好的
視頻軌
和音頻軌
按照一定的格式放到一個文件中
,也就是說僅僅是一個外殼,或者大家把它當成一個放視頻軌和音頻軌的文件夾也可以。說得通俗點,視頻軌相當於飯,而音頻軌相當於菜,封裝格式就是一個碗,或者一個鍋,用來盛放飯菜的容器。 下面是幾種常用的 視頻文件后綴類型 與其相對應的 封裝格式。
視頻編碼格式, 比較常見 H264
。音頻編碼常見的 aac
,和 mp3
。 AAC壓縮比高,音質更好。
- 划分宏塊
- 划分子塊 就是一個宏塊里面再分成小塊
- 幀分組 就是內容差不多的放在組里面,組成一個組稱為GOP, 參考幀為IDR/I幀, 其他的為P/B幀。
- 運動估計與補償 計算視頻中物體的運動矢量,然后保存矢量和補償
- 幀內預測
先預測,就是分成宏塊后然后幾個模式預測,完了找到最接近的預測模式
,得到預測圖片A, A與原圖對比相減,得到殘差值。
然后把殘差和預測模式保存起來就可以恢復了。 - 優化:對殘差數據做DCT 進一步壓縮
- 再優化:CABAC無損壓縮
Audio
最基礎
- 振幅, 保證輸入的輸出的在接受范圍內
- 頻率 同上
- dropout 輸出不能有不連續的信號
- distortion 畸變,比如采樣率發生變化 聲音異常
- clipping 出現嘯叫,頂峰沒有數據
驗證數據用的是
- 正玄波 sine-0db-1khz 這個主要是驗證THD 和dropout
- step gain sine -60db~0db 可以驗證clipping
- sweep 掃頻 0khz~16Khz, 驗證對每一個頻率的處理
- speech, 驗證distortion
影響聲音質量的因素
- 壓縮, 模擬型號轉為數字pcm信號的時候就有丟失。提高采樣率比如48k
- 延遲, 什么導致延遲,比如編碼、打包、網絡傳輸、jitter buffer
- jitter 抖動, udp傳輸 數據丟失,可以用jitter buffer來一職
- 丟包 udp傳輸,丟包是必然的 ,使用少量的丟包
- 回聲 聲學原因:布局、混響、延時大小、單雙講, 電學:信號干擾
- 其他噪音
評估標准
- MOS 原始的就是一個主觀的批判,
根據提供給算法的信息,語音質量測試算法可分為兩大類
-
完全引用"(FR)
算法可以訪問並使用原始參考信號進行比較(即差異分析)。它可以比較參考信號的每個樣本(說話端)與降級信號的每個對應樣本(偵聽器側)。FR 測量可提供最高的精度和可重復性
,但只能應用於實時網絡中的專用測試(例如移動網絡基准的驅動測試工具) -
"無參考"(NR)
算法僅使用降級信號進行質量評估,並且沒有原始參考信號的信息。NR 算法只是低准確性估計值
,因為源引用的原發語音特征(例如男性或女性說話者、背景噪音、非語音)完全未知。NR 算法的常見變體甚至不分析解碼的音頻信號
,而是對 IP 數據包級別上的數字位流進行分析。因此,測量僅限於傳輸流分析。
POLQA是最新的,其他都是小弟。
Perceptual Evaluation of Speech Quality
PESQ結合了PSQM和 PAMS的優勢,針對VoIP和混合的端到端應用作了改進,並針對MOS和MOS-LQ計算方法做了修改。
也是全參考測試算法
## first, install soundfile and pypesq
import soundfile as sf
from pypesq import pesq
ref, sr = sf.read("sine.wav")
deg, sr = sf.read("sine1.wav")
score = pesq(ref, deg, sr)
print(111,score)
得到的score分數就是MOS的值
輸出結果
4.5
計算方法
- POLQA PESQ的升級版 percptual objective listening quality analysis
# here is the implementation
https://chromium.googlesource.com/external/webrtc/+/3c1e558449309be965815e1bf/webrtc/audio/test/low_bandwidth_audio_test.py
並擴展到處理更高帶寬的音頻信號。進一步的改進針對時間調用信號的處理,具有許多延遲變化。
全參考算法,在對參考和測試信號的相應摘錄進行時間對齊后,對語音信號進行采樣分析 ,對於端到端的質量評估。
前面提到的都是全參考的, 無參考, 馬上就來.看下面這個就是實際的應用.
python -m frechet_audio_distance.compute_fad --background_stats stats/background_stats --test_stats stats/test1_stats
python -m frechet_audio_distance.compute_fad --background_stats stats/background_stats --test_stats stats/test2_stats
Video
- PEVA
測量算法可用於分析由數字視頻編碼/解碼(或轉碼)過程、基於無線電或 IP 的傳輸網絡和最終用戶設備引起的可見偽影。
PEVQ還通過各種KPI(包括PSNR、失真指示器和唇部同步延遲)來量化視頻信號中的異常。
psnr是“Peak Signal to Noise Ratio”的縮寫,即峰值信噪比,是一種評價圖像的客觀標准,它具有局限性,一般是用於最大值信號和背景噪音之間的一個工程項目。
PSNR是最普遍,最廣泛使用的評鑒畫質的客觀量測法,不過許多實驗結果都顯示,PSNR的分數無法和人眼看到的視覺品質完全一致
,有可能PSNR較高者看起來反而比PSNR較低者差。這是因為人眼的視覺對於誤差的敏感度並不是絕對的,其感知結果會受到許多因素的影響而產生變化
SSIM(structural similarity index),結構相似性,是一種衡量兩幅圖像相似度的指標。該指標首先由德州大學奧斯丁分校的圖像和視頻工程實驗室(Laboratory for Image and Video Engineering)提出。SSIM使用的兩張圖像中,一張為未經壓縮的無失真圖像,另一張為失真后的圖像。
應用
webrtc
WebRTC是一個免費的開放軟件項目,可通過簡單的API為瀏覽器和移動應用程序提供實時通信(RTC)功能。 WebRTC組件已經過優化,可以最好地滿足此目的。
testrtc
這里包含audio和video的測試和評估方法.
mic 主要是針對audio
- 能否2s靜音
- 計算RMS值
- clip測試
- 單雙講測試
camara 分2部分, 一個WxH分辨率(width x height) 和支持的分辨率
- 第一部分
- 檢查攝像機能否以請求的分辨率捕獲 5 秒鍾
- 檢查幀是凍結還是靜音/黑色
- 檢測開始編碼幀的時間
- 報告編碼時間和平均幀速率
- 第二部分
- 列出似乎受支持的分辨率
網絡
- Udp/Tcp
驗證它可以使用給定協議與轉服務器進行通信
- IPv6 連接
驗證它至少可以收集一個 IPv6 候選者
連接性 (主要TURN server 連接的驗證)
- relay 可以通過 TURN 服務器在對等體之間建立連接
- Reflexive 通過 NAT 驗證對等體之間的連接
- Host 驗證可以在具有相同 IP 地址的對等體之間建立連接
吞吐量
-
數據吞吐量
建立環回調用並測試鏈路上的數據通道吞吐量
-
視頻帶寬
-
建立環回呼叫並測試鏈路上的視頻性能
-
在媒體通道上測量
rtt(round-trip time)
. -
測量帶寬估計
性能(增加時間、最大值、平均值
)
read more
- https://ai.googleblog.com/2019/10/audio-and-visual-quality-measurement.html
- https://blog.csdn.net/foolskindom/article/details/5155587?utm_medium=distribute.pc_relevant.none-task-blog-title-3&spm=1001.2101.3001.4242
- https://blog.csdn.net/sinat_35821976/article/details/80081176
- https://wenku.baidu.com/view/33e49080d0d233d4b14e697d.html