OPUS裏的Silk和原始Silk簡單比較

OPUS是由Silk和CELT兩個編碼器組成的,用來處理全頻帶的語音和音樂信號,OPUS在集成Silk的時候,對Silk的一些細節作了改動,這裏簡單整理一下OPUS中的Silk模塊和純的Silk編解碼器的不一樣之處。
1、預測部分:計算邏輯上來看,兩者是相同的。不一樣之處有:
一、OPUS的總體計算精度更高一些,由Silk裏的Q10轉換成了Q14後進行判斷,包括LPC、LTP和excition部分。
二、在作Delaydecision的時候,OPUS中對判斷算法進行了重寫,增長了一個quantoffset,從新規劃了量化的範圍,這裏和Silk比較,帶來的MOS分增益我本身測的是大約在0.05左右,不必定準確。
三、OPUS是使用SHIFT_ROUND將Q10轉化成了Q0傳入到編碼模塊,Silk使用的是SHIFT方法,二者的不一樣之處在於,SHIFT_ROUND會將[-512,512]的值都轉化爲0,而SHIFT的置零區間爲[0,1024],這裏使用不一樣的SHIFT算法會影響到後續編碼激勵時分配的碼率。
四、OPUS的Delaydecision默認是計算40個採樣點的總偏差,Silk是32個,這兩個我試了一下對MOS分的影響基本沒有。
五、OPUS經過調整計算步驟,加新的參數(如delayedgain和diff等)等方法,減小了少許計算量。
2、編碼部分:
一、OPUS中的編碼模塊由依賴Silk中的機率密度函數轉成了逆機率密度函數,我這裏也不清楚作這種改動的緣由,從結果上來看,使用CDF和iCDF的編碼效率是差很少的。
二、OPUS將編碼index和excition的函數區分開了,但函數的實現及各個參數的編碼順序是相同的。Silk的編碼函數都在了一塊兒顯得有點擁擠,也不太方便後續本身開發。
3、其他部分:
一、增益計算部分,OPUS在較多函數裏使用的是Q7,Silk使用的是Q0,從代碼上來看OPUS對增益的控制能稍微準一些
二、OPUS的碼率控制算法進行了重寫,但整體邏輯是同樣的,我我的感受OPUS的碼率控制更爲激進一點
三、OPUS的抖動算法中Seed的判斷方法也改變了,OPUS中經過判斷Seed是否小於0進行符號的轉換,Silk經過把Seed右移31位後作異或後自減進行判斷,其實這兩種方法的結果是同樣的,只是表現方法不同。
先寫到這裏吧,之後有想起來的再補充。算法

相關文章
相關標籤/搜索