A律与13折线

来源:互联网 发布:nginx 限制url访问 编辑:程序博客网 时间:2024/06/01 13:38

今天趁着无聊,试试通信原理上课讲到的用十三折线近似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。