今天趁著無聊,試試通訊原理上課講到的用十三折線近似A律對數壓縮特性
原本以為很快,沒想到困難重重。
為了驗證兩者之間近似效果好不好,首先想到的就是將A律與十三折線呈現在一張圖上看看效果
畫十三折線和A律函數圖還是簡單的,幾句代碼就搞定了。也達到了目的,但是,這個時候卻不能算出兩者的差,因為A律的曲線我使用函數做的,而十三折線確實直接畫的
兩個對應的幅度值y是不同維數的,不可以相減!
後來搜到一個挺巧妙的方法,
x=0:0.0001:1;
y1=16.*x.*(x>=0 & x<1/128);
y2=16.*(x-1/128).*(x>=1/128 & x<1/64)+1/8.*(x>=1/128 & x<1/64);
y3=8.*(x-1/64).*(x>=1/64 & x<1/32)+2/8.*(x>=1/64 & x<1/32);
y4=4.*(x-1/32).*(x>=1/32 & x<1/16)+3/8.*(x>=1/32 & x<1/16);
y5=2.*(x-1/16).*(x>=1/16 & x<1/8)+4/8.*(x>=1/16 & x<1/8);
y6=1.*(x-1/8).*(x>=1/8 & x<1/4)+5/8.*(x>=1/8 & x<1/4);
y7=1/2.*(x-1/4).*(x>=1/4 & x<1/2)+6/8.*(x>=1/4 & x<1/2);
y8=1/4.*(x-1/2).*(x>=1/2 & x<=1)+7/8.*(x>=1/2 & x<=1);
將條件(x>=1/128 & x<1/64)放在計算公式中,很好的避免了位元不同的困難!!
最後y=y1+y2+y3+y4+y5+y6+y7+y8;就是整個十三折線的幅度值
而A律的函數圖的方法不變,得到
上面的圖形是基於A=87.6的情況,為了對比看看哪個A的方差是最小的,得到一個二次函數
可以很好的看出當A=82.9為方差最小的,按理說A應該去82.9比取87.6好啊。。
這也許就是書中給出為什麼取A=87.6的原因了,讓十三折線近似時最靠近原點的直線斜率近似於16,另外可以讓十三折線的轉折點接近(1/2)^i。