721建议被726取代,为ADPCM编码
pcm编码取值范围广,711为了减少bit数,对信号进行了非线性量化,
DPCM则是对信号的差值进行量化,可以进一步减少量化比特数
ADPCM则对量化阶提供了自适应,根据信号差值的均方动态调整量化阶
算法粗略分析如下:
step 1 信号展开
输入信号(u律,A律)展开成pcm
step 2 计算估值信号
根据以往的重建信息sr1 sr2,反量化生成的dq1,...dq2
参数a1,a2 以及b1,...b6(在之前的解码计算出来)
估值信号se = sr1 * a1 + sr2 * a2 + b1 * dq1 + ... + b6 * dq6
计算se的过程,同时也计算了sez
step 3 差值量化
d = s - se,得到差值
求d的对数(2) dl
计算自适应量化放大因子:y=al * yu[n - 1] + (1 - al)yl[n - 1]
al:根据长短时间平均的差值算出(介于0-1之量,后继说明)
yu:快速自适应量化因子 值为: yu[n] = (1-power(2,-5))y[n] + power(2,-5)W[i[n]]
yl:慢整自适应量化因子 值为: yl[n] = (1-power(2,-6))yl[n - 1] + power(2,-6)yu[n]
w的取值由查表得出(下为32kb/s时的取值表)
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0
70.13 22.19 12.38 7.00 4.00 2.56 1.13 -0.75
yu的取值问题,它是由乘子法自适应量化导出的,在后向自适应过程中用一个指数窗,
对均方值进行估值,则当前量化阶,可用之前的量化值来估计,同样转换到对数域,相应的乘
法就变成了加法.w为估值,并对y做衰减.当y[n-1]值偏大时,认为量化器可能会过载,应增大量化阶
可以看到i[k]值越大w值也越大
yl则可以认为是对yu做了低通滤波,得到的值.
y量化因子综合考虑了yu与yl,将两者按比例融合,比例因子为al(取值后继说明)
量化 dl[n] = dl - y (真数的除法,对数域相应为减法)
dl[n]量化查表得到i(视编码所选择的速率,32kb/s情况下,i为4bit, 1bit为符号位)
step 4 重建信号
反量化i 查表得到dql[n]
dql = dql[n] + y得到差值信号的log2,进行反对数运算,得dq
sr = dq + se
step 5 更新各个存储器 a1 a2 b1 ... b6等
根据i查表,得到fi计算长短时平均dms dml
dms = (1 - power(2, -5)) * dms + power(2, -5) * fi;
dml = (1 - power(2, -7)) * dml + power(2, -7) * fi;
可以看对fi进行低通滤波,而且dml的衰减比dms慢
计算ap = (1-power(2,-4))ap[n-1]+power(2,-3)
1 当dms与dml的差值过大,即|dms - dml| > power(2, -3)dml认为信号处于剧烈变化
2 当y[n] < 3
3 当td=1 当a2[n] < -0.71875 认为出现了单频信号
可看出,当信号处于变化较为剧烈时,ap是偏向于2的,
y[n]<3 说明是idle channel noise,表明当前无信号,可能是噪声,自然也要求信号快速自适应
y 趋向于 yu
ap = 1
4 当tr=1 如果a2[n] < -0.71875 且dq绝对值大于24*power(2, yl[n]),认为信号出现瞬变,所有预测系数归零
y = yu
ap = (1-power(2,-4))ap[n-1]
5 其它情况,即dms与dml相差不大时,ap不断衰减,趋向于0,即y趋向于yl
注:
让2通过一个滤波器
即ap[n] = (1 - power(2, -4))ap[n - 1] + power(2, -3)即可看到ap是趋向于2的
计算预测系数 a1 a2, b1 ... b6
b1 ... b6 采用符号梯度法来计算
a1 a2的计算方式类似符号梯度法