在Matlab里,有一个量化函数quantiz,其函数形式有以下三种:
输入变量: sig代表的是原始信号;
codebook代表的是量化值的集合;
partition是分割向量,代表对量化范围分割等级 。
输出变量: index代表的是按照分割向量构成的区间来划分等级,看原始信号属于哪个等级索引。
quants代表的是按照索引取codebook里的量化值,即为原始信号的量化值。
需要注意的是:codebook的向量个数要比partition的向量个数多一个,因为按照下面的Index定义可知:partition分割出来的等级索引比partition自身的向量个数多一个,而codebook是根据索引取值的。因此codebook的向量个数和index的个数保持一致,就比partition多一个。
下面以两个实例来进行说明:
上面的命令我们可知,codebook意味着量化值只能是-1, 0.5, 2, 3, partition意味着量化的等级按照4个区间:(-inf,0]、(0,1]、(1,3]、(3,inf)来划分。
(这里我们同样可以看到,partition向量是3个数,所以它划分的等极是4个区间,因此codebook向量是4个数)
原始信号 samp = [-2.4, -1, -.2, 0, .2, 1, 1.2, 1.9, 2, 2.9, 3, 3.5, 5] 根据partition的等级区间,依次对应的索引为 index = [0 0 0 0 1 1 2 2 2 2 3 3]。
按照索引index取codebook里的量化值,依次为quantized = [-1 -1 -1 -1 0.5 0.5 2 2 2 2 3 3]。
为了验证分析的正确性,我们在Matlab命令窗口进行验证:
下面的第二个例子类似,这里就不再赘述了