將研究的內容,實作到C code後,發覺encoder energy ratio一直不符合理論推導,所以重新檢查,也幾乎重寫之後,發覺一個很奇怪的問題。

依據公式推導,Rho = ((LRAbs^2 + 1) / LRAbs^2)^0.5

※寫法一:
LRAbs[j] += pow(LRReal[j] * LRReal[j] + LRImag[j] * LRImag[j],0.5); //計算LR訊號的能量
LRAbs[j] += 10e-16; //加入一個很小的數值至LRAbs,原因為避免以後使用時在除數=0
Rho[j] = pow((LRAbs[j] * LRAbs[j] + 1) / (LRAbs[j] * LRAbs[j]), 0.5); //變數Rho由這樣計算出來

這樣算出的Rho,讓downmix signal有聲音


※寫法二:
LRAbs[j] += pow(LRReal[j] * LRReal[j] + LRImag[j] * LRImag[j],0.5); //計算LR訊號的能量
Rho[j] = pow(((LRAbs[j]+10e-16) * (LRAbs[j]+10e-16) + 1) / ((LRAbs[j]+10e-16) * (LRAbs[j] + 10e-16)), 0.5); //同寫法一,差別在運算Rho時才加很小的數值到LRAbs

這樣算出來的Rho,讓downmix signal聲音

※寫法三:
LRAbs[j] += pow(LRReal[j] * LRReal[j] + LRImag[j] * LRImag[j],0.5); //計算LR訊號的能量
Rho[j] = pow((LRAbs[j] * LRAbs[j] + 1) / (LRAbs[j] * LRAbs[j] + 10e-16), 0.5); //僅在除數加入很小的數值,以免除以0的狀態

這樣算出來的Rho,讓downmix signal聲音


真正的寫法,應該是寫法三,但居然沒聲音。且寫法二和一,理論上是要相同的,為什麼也會有不同的結果?這讓我真的很困惑...

創作者介紹
創作者 jeffreyjc 的頭像
jeffreyjc

生活筆記本

jeffreyjc 發表在 痞客邦 留言(1) 人氣()