| JP08338780 | MANUFACTURE OF TERMINAL FOR PRESSURE SENSOR |
| WO/1992/008955 | MOUNTING MEANS FOR FLUID PRESSURE TRANSMITTERS |
| WO/2007/041188 | PROCESS FIELD DEVICE TEMPERATURE CONTROL |
林志斌 (中国江苏省南京市汉口路22号南京大学, Jiangsu 3, 210093, CN)
CHEN, Guoming (ZTE Plaza, Keji Road South Hi-Tech Industrial Park, Nansha, Shenzhen Guangdong 7, 518057, CN)
陈国明 (中国广东省深圳市南山区高新技术产业园科技南路中兴通讯大厦, Guangdong 7, 518057, CN)
DENG, Zheng (Nanjing University, Hankou Road 22Nanjing, Jiangsu 3, 210093, CN)
邓峥 (中国江苏省南京市汉口路22号南京大学, Jiangsu 3, 210093, CN)
YUAN, Hao (ZTE Plaza, Keji Road South Hi-Tech Industrial Park, Nansha, Shenzhen Guangdong 7, 518057, CN)
中兴通讯股份有限公司 (中国广东省深圳市南山区高新技术产业园科技南路中兴通讯大厦, Guangdong 7, 518057, CN)
LIN, Zhibin (Nanjing University, Hankou Road 22Nanjing, Jiangsu 3, 210093, CN)
林志斌 (中国江苏省南京市汉口路22号南京大学, Jiangsu 3, 210093, CN)
CHEN, Guoming (ZTE Plaza, Keji Road South Hi-Tech Industrial Park, Nansha, Shenzhen Guangdong 7, 518057, CN)
陈国明 (中国广东省深圳市南山区高新技术产业园科技南路中兴通讯大厦, Guangdong 7, 518057, CN)
DENG, Zheng (Nanjing University, Hankou Road 22Nanjing, Jiangsu 3, 210093, CN)
邓峥 (中国江苏省南京市汉口路22号南京大学, Jiangsu 3, 210093, CN)
| 权 利 要 求 书 1、 一种格型矢量量化音频编码方法, 该方法包括: 将音频信号经过修正离散余弦变换 MDCT后的频域系数划分为多个编码 子带, 并对各编码子带的幅值包络值进行量化和编码, 得到幅值包络的编码 比特; 对各编码子带进行比特分配, 并对低比特编码子带和高比特编码子带中 的矢量分别使用塔型格型矢量量化方法和球型格型矢量量化方法进行归一 化、 量化和编码, 得到频域系数的编码比特, 其中, 所述低比特编码子带是 该编码子带中单个频域系数所分配到的比特数小于预设阔值的编码子带, 所 述高比特编码子带是该编码子带中单个频域系数所分配到的比特数大于或等 于预设阔值的编码子带; 以及 将各编码子带的幅值包络的编码比特和频域系数的编码比特复用打包 后, 传送给解码端。 2、 如权利要求 1所述的方法, 其中, 在所述对各编码子带进行比特分配的步骤之前, 所述方法还包括: 根据 各编码子带的幅值包络值计算各编码子带的重要性初始值; 在所述对各编码子带进行比特分配的步骤中, 根据各编码子带的重要性 对各编码子带中每个频域系数进行比特分配, 在比特分配过程中, 比特分配 步长及比特分配后重要性降低步长均是变化的。 3、 如权利要求 1所述的方法, 其中, 对所述低比特编码子带使用塔型格型矢量量化方法进行归一化和量化的 步骤包括: 使用编码子带的量化幅值包络值对该编码子带中所有频域系数进行归一 化处理, 并分组形成多个多维待量化矢量; 对各待量化矢量进行量化处理; 其中, 对各待量化矢量进行量化处理的步骤包括: 对编码子带中的 8维待量 化矢量进行能量规整, 将能量规整后的 8维待量化矢量量化到/ ¾格点; 以及 将通过量化得到的 /¾格点的能量和编码码本中的最大塔面能量半径进 行比较, 如果/ ¾格点的能量小于或等于最大塔面能量半径, 则计算所述/ ¾ 格点在码本中的量化索引; 如果/ ¾格点的能量大于最大塔面能量半径, 则将 该编码子带规整后的待量化矢量进行能量截断, 直至能量截断后的待量化矢 量的量化格点的能量不大于最大塔面能量半径, 同时对能量截断后的待量化 矢量持续增加一个能量,直至增加能量后的待量化矢量量化到的 /¾格点的能 量超过最大塔面能量半径, 确定最后一个能量不超过最大塔面能量半径的 /¾ 格点为矢量量化格点并计算所述矢量量化格点在码本中的量化索引; 和 /或 对所述高比特编码子带使用球型格型矢量量化方法进行归一化和量化的 步骤包括: 使用编码子带的量化幅值包络值对该编码子带中所有频域系数进行归一 化处理, 并分组形成多个多维待量化矢量; 对各待量化矢量进行量化处理; 其中, 对各待量化矢量进行量化处理的步骤包括: 对编码子带中的 8维待量化矢量进行能量规整, 将能量规整后的 8维待 量化矢量量化到/ ¾格点; 将通过量化得到的 /¾格点值除以 2的比特分配数次方 2^。"-ωω后再量化 到/ ¾格点, 判断再量化的/ ¾格点值是否是零矢量, 如果再量化的/ ¾格点值 是零矢量, 则确定零矢量条件满足, 如果再量化的/ ¾格点值不是零矢量, 则 确定零矢量条件不满足, 其中 reg 0«_ t /)表示第 ·个编码子带中单个频域系 数所分配到的比特数; 如果零矢量条件满足, 则计算所述/ ¾格点的索引矢量; 以及 如果零矢量条件不满足, 则将待量化矢量的值进行能量截断, 直至零矢 量条件满足,备份待量化矢量自身的倍数值 W ,对能量截断后的待量化矢量加 上备份的倍数值 W , 然后再量化到/ ¾格点, 判断零矢量条件是否满足, 如果 零矢量条件不满足, 则计算最近满足零矢量条件的/ ¾格点的索引矢量 k, 如 果零矢量条件满足, 则继续对待量化矢量增加备份的倍数值 w , 然后再量化 到/ ¾格点, 直至零矢量条件不满足。 4、 如权利要求 3所述的方法, 其中, 在对所述 8维待量化矢量进行能量规整的步骤中, 先根据所述 8维待量 化矢量所在编码子带 中单个频域系数所分配到的比特数 region—bitif) , 从下 表中查询到该比特数所对应的码本序号 index和能量缩放因子 scale; 然后根 据下面的公式对待量化矢量进行能量规整: Yscal 其中, 1 表示编码子带 中第 个归一化后的待量化 8维矢量, ¾∞fe表 示对】 进行能量规整后的 8维矢量, a = (2- 6,2- 6,2- 6,2- 6,2- 6,2- 6,2- 6,2- 6); 在将能量规整后的 8维待量化矢量量化到 /¾格点的步骤中,釆用以下公 式将能量 ¾Lfe量化到 /¾格点 上: 其中, /¾(·)表示将某个 8维矢量映射到 /¾格点的量化算子; 所述计算 /¾格点 在码本中的量化索引的步骤包括: 步骤 1: 根据塔面能量的大小, 分别对各个塔面上的格点进行标号; 对于维数为 L的整数格点网格 ZL , 定义能量半径为 f的塔面为: S(L,K) = {Y = (yi,y2,...,yL)G ZL ∑\y =K} 记 N(J, Q为^; ^)中格点的个数, 对于整数格 ^来说, N(J, Q有如下的 递推公式: N(J,0) = 1 (L≥ 0), N(0,K) = 0 (K≥l) N(L, K) = N(L -l,K) + N(L - 1, - 1) + N(L, K -I) (L≥l,K≥l); 对于能量半径为 K 的塔面上的整数格点; = (n...,_yjez£ , 用 [0,1,....,NCL,^)-1]中的一个数 来标识, 并称 b为该格点的标号, 求解标号 b 的步骤如下: 步骤 1.1: 令 b=0, i=l, k=K, l=L, 根据所述递推公式, 计算 NO,«), (m<=L,n<=K), 并定义: sgn(x): 步骤 1.2: 如果 =0, 则 b=b+0; 1— sgnO!) ^口果y,|=l, U = b + N(l-l,k) + N(l-l,k-l); 如果y,|>l, 则 1- sgnp,.) + N(/— U— .l) 2 步骤 1.3: k = k-\yi\ =l-\,i=i+\, 如果此时 k=0, 则停止搜索, b(j,m)=b 为 Γ的标号, 否则继续步骤 1.2; 步骤 2: 在所有塔面上对该格点进行统一标号; 根据各个塔面的格点数和格点在自己的塔面上的标号, 计算该格点在所 有塔面上的统一标号, index b(J, m)― b(J, w) V(8, kk) 其中, kk 为偶数, b(, )为 /¾格点 ¾^在自身所在塔面上的标号, 而 mdex bij'm为 /¾格点 在码本中的量化索引。 5、 如权利要求 1所述的方法, 其中, 对低比特编码子带使用塔型格型矢量量化方法进行编码的步骤包括: 对所有低比特编码子带的量化索引进行霍夫曼编码; 以及 若所有低比特编码子带的量化索引经过霍夫曼编码后所消耗比特的总数 小于所有低比特编码子带的量化索引的自然编码所需要的比特数总和, 则使 用霍夫曼编码并设置频域系数霍夫曼编码标识为 1或真, 利用霍夫曼编码节 省下来的比特对编码子带的比特分配数进行修正, 以及对修正了比特分配数 的编码子带再次进行矢量量化和编码; 若所有低比特编码子带的量化索引经 过霍夫曼编码后所消耗比特的总数大于或等于所有低比特编码子带的量化索 引的自然编码所需要的比特数总和, 则重新对量化索引进行自然编码, 并设 置频域系数霍夫曼编码标识为 0或假。 6、 如权利要求 5所述的方法, 其中, 的步骤包括: 计算霍夫曼编码所节省的比特数; 在所有编码子带中寻找重要性最大的编码子带, 如果该编码子带所分配 的比特数已经达到可能给与分配的最大值, 则将该编码子带的重要性调整到 最低, 不再对该编码子带修正比特分配数, 如果该编码子带所分配的比特数 未达到可能给与分配的最大值, 则对该重要性最大的编码子带进行比特分配 爹正; 以及 比特分配数每修正 1次, 即将比特分配修正迭代次数 co /1加 1 , 当比特 分配修正迭代次数 count达到预设上限值或能够使用的比特数小于比特分配 修正所需要的比特数时, 比特分配修正流程结束。 7、 如权利要求 5所述的方法, 其中, 对所有低比特编码子带的量化索引进行霍夫曼编码时: 在单个频域系数所分配到的比特数为大于 1小于 5但除去 2的所有编码 子带中, 对每个矢量量化索引的自然二进制码中每 4位分成一组并对其进行 霍夫曼编码, 所有 4位一组的霍夫曼编码比特数之和就是该量化索引的霍夫 曼编码的消耗比特数; 在单个频域系数所分配到的比特数为 2的所有编码子带中, 对每个 8维 矢量的塔型格型矢量量化索引使用 15个比特进行编码, 将 15个比特分成 3 组 4位比特和 1组 3位比特,然后对它们分别进行霍夫曼编码, 4组的霍夫曼 编码比特消耗数之和就是该量化索引的霍夫曼编码消耗比特数; 当编码子带的单个频域系数所分配到的比特数为 1时, 如果量化索引小 于 127 ,则对量化索引使用 7个比特进行编码,把 7个比特分成 1组 3比特和 1组 4比特, 分别对两组进行霍夫曼编码, 两组的霍夫曼编码比特消耗数之 和就是该量化索引的霍夫曼编码消耗比特数; 当编码子带的单个频域系数所分配到的比特数为 1时, 如果量化索引等 于 127 , 则定义它的自然二进制码值为 "1111 1110", 4巴前面 7个 1分成 1组 3比特和 1组 4比特, 分别对两组进行霍夫曼编码, 两组的霍夫曼编码比特 消耗数之和就是该量化索引的霍夫曼编码消耗比特数; 当编码子带的单个频域系数所分配到的比特数为 1时, 如果量化索引等 于 128, 则定义它的自然二进制码值为 "1111 1111", 4巴前面 7个 1分成 1组 3比特和 1组 4比特, 分别对两组进行霍夫曼编码, 两组的霍夫曼编码比特 消耗数之和就是该量化索引的霍夫曼编码消耗比特数。 8、 一种格型矢量量化音频解码方法, 该方法包括: 对待解码比特流中各幅值包络编码比特进行解码, 得到各编码子带的幅 值包络量化指数; 对各编码子带进行比特分配, 并对低比特编码子带进行解码、 塔型格型 矢量量化的反量化及反归一化, 得到低比特编码子带的频域系数, 以及对高 比特编码子带进行解码、 球型格型矢量量化的反量化及反归一化, 得到高比 特编码子带的频域系数; 其中, 所述低比特编码子带是该编码子带中单个频 域系数所分配到的比特数小于预设阔值的编码子带, 所述高比特编码子带是 该编码子带中单个频域系数所分配到的比特数大于预设阔值的编码子带; 以 及 对噪声填充后的频域系数进行修正离散余弦逆变换 IMDCT,得到最终的 音频信号。 9、 如权利要求 8所述的方法, 其中, 在对各编码子带进行比特分配的步骤之前, 所述方法还包括: 根据编码 子带幅值包络值计算各编码子带重要性的初始值; 在对各编码子带进行比特分配的步骤中, 根据各编码子带的重要性对各 编码子带中每个频域系数进行比特分配, 在比特分配过程中, 比特分配步长 及比特分配后重要性降低步长均是变化的; 在进行比特分配之后, 解码之前, 根据编码端的比特分配修正迭代次数 count值和各编码子带的重要性, 对编码子带再进行 count次比特分配修正。 10、 如权利要求 8所述的方法, 其中: 在对低比特编码子带进行解码、 塔型格型矢量量化的反量化及反归一化 的步骤中, 根据编码端的频域系数霍夫曼编码标识对低比特编码子带进行霍 夫曼解码或直接解码得到低比特编码子带的矢量量化索引, 对所有矢量量化 索引进行塔型格型矢量量化的反量化及反归一化, 得到低比特编码子带的频 域系数; 在对高比特编码子带进行解码、 球型格型矢量量化的反量化及反归 一化的步骤中, 直接釆用自然解码得到高比特编码子带的矢量量化索引, 对 所有矢量量化索引进行球型格型矢量量化的反量化及反归一化, 得到高比特 编码子带的频域系数。 11、 如权利要求 8或 10所述的方法, 其中, 在对低比特编码子带进行解码的过程中, 当编码子带的单个频域系数所 分配到的比特数为 1时, 如果量化索引的自然二进制码值小于 "1111 111", 则按照自然二进制码值计算量化索引; 如果量化索引的自然二进制码值等于 "1111 111", 则继续读入下一位比特, 如果下一位比特是 0, 则量化索引值 为 127, 如果下一位比特是 1 , 则量化索引值为 128。 12、 如权利要求 8或 10所述的方法, 其中, 在对低比特编码子带进行解码的步骤中, 如果频域系数霍夫曼编码标识表明未使用霍夫曼编码, 则直接解码得到 低比特编码子带 j的第 m个矢量量化索引 index— bG,m), 如果频域系数霍夫曼 编码标识表明釆用了霍夫曼编码, 则通过霍夫曼解码得到低比特编码子带 的第 m个矢量量化索引 index— bG,m); 对低比特编码子带进行塔式格型矢量量化的反量化的步骤包括: a: 确定量化索引所在的能量塔面及其在该能量塔面上的标号; 在塔面能量从 2到 LargeK(region— bitG))中寻找 kk, 使得下面的不等式满 足: N(8,kk) <= index— bG,m) < N(8,kk+2), 如果找到这样的 kk, 则 K=kk为量化索引 index— bG,m) 所对应 D8格点所 在塔面的能量, b= index— bG,m)-N(8,kk)为该 D8格点在所在塔面上的索引标号; 如果找不到这样的 kk,则量化索引 index— bG,m) 所对应 D8格点的塔面能 量 K=0及索引标号 b=0; b:求解塔面能量为 K和索引标号为 b的 D8格点矢量 Y=(yl, y2 y3, y4, y5, y6, y7, y8,)的步骤如下: 步骤 1: 令 Y=(0,0,0,0,0,0,0,0), xb=0, i=l, k=K, 1=8; 步骤 2: 如果 b=xb那么 yi=0;跳转至步骤 6; 步骤 3: 如果 b<xb+N(l-l,k), 则 yi=0,跳转至步骤 5; 否则 , xb=xb+N(l-l ,k);令 j=l; 步骤 4: 如果 b<xb+2*N(l-l,k-j),则 ^口果 xb<=b<xb+N(l-l,k-j), 则 yi=j; 如果 b>=xb+N(l-l,k-j), 则 yi=-j , xb=xb+N(l-l, k-j); 否则 xb=xb+2*N(l-l, k-j)J=j+l ; 继续本步骤; 步骤 5: 更新 k=k-|yi|, 1=1-1, i=i+l , 如果 k>0, 则跳转到步骤 2; 步骤 6: 如果 k>0, 则 y8=k-| yi| , Y=( yl, y2, ... , y8)为所求格点; c: 对所求 D8格点进行能量反规整, 得到 Y 1 = {Υ + Ά) Ι scale{index) 其中, a = (2-6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 ) , scale{index)是缩放因子, 从第 一对应表中查找到; 第一对应表 在对所有 Ϋ「进行反归一化, 得到低比特编码子带的频域系数的步骤中 , 对^ "进行反归一化处理,得到解码端恢复出的编码子带 j的第 m个矢量 的频域系数: j ― j 其中, 7¾(/)为第 j个编码子带的幅值包络量化指数。 13、 权利要求 8或 10所述的方法, 其中, 直接釆用自然解码得到高比特编码子带矢量量化索引, 对所有矢量量化 索引进行球型格型矢量量化的反量化的步骤包括: a )计算 x=k*G, 并计算 _yte /?=x/(2A(reg o«— bz ( )); 其中, k为高比特编 码子带 j的第 m个矢量量化的索引矢量, reg 0«_ t( )表示编码子带 j中单个 频域系数的比特分配数; G为/ ¾格点的生成矩阵, 形式如下: 2 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 G = 1 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 b ) itij) c)对所求 D8格点进行能量反规整, 得到 = ca/e(reg謂— ^( )/(2 。" - ) + a , 其中, a = (2-6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 ) , scale(region _ bit(j))是缩放因 子, 从第二对应表中查找到; 第二对应表 在对所有 YJ"进行反归一化, 得到高比特编码子带的频域系数的步骤中, 对^ "进行反归一化处理,得到解码端恢复出的编码子带 j的第 m个矢量 的频域系数: j ― j 其中, 7¾(/)为第 j个编码子带的幅值包络量化指数。 14、 一种格型矢量量化音频编码系统, 该系统包括修正离散余弦变换 MDCT单元、 幅值包络计算单元、 幅值包络量化和编码单元、 比特分配单元、 归一化处理单元、 分类格型矢量量化和编码单元以及比特流复用器; 其中: 所述 MDCT单元设置为对音频信号进行修正离散余弦变换生成频域系 数; 所述幅值包络计算单元, 与所述 MDCT单元连接, 并设置为, 将所述 MDCT单元生成的频域系数划分为多个编码子带, 并计算各编码子带的幅值 包络值; 所述幅值包络量化和编码单元, 与所述幅值包络计算单元连接, 并设置 为, 将各编码子带的幅值包络值进行量化和编码, 生成各编码子带幅值包络 的编码比特; 所述比特分配单元, 与所述幅值包络量化和编码单元连接, 并设置为进 行比特分配, 得到各编码子带中为每个频域系数所分配的编码比特数; 归一化处理单元, 与所述 MDCT单元连接, 并设置为使用编码子带的量 化幅值包络值对各编码子带中所有频域系数进行归一化处理; 所述分类格型矢量量化和编码单元, 与所述归一化处理单元及比特分配 单元连接, 并设置为, 对低比特编码子带和高比特编码子带中的归一化后的 待量化矢量分别使用塔型格型矢量量化方法和球型格型矢量量化方法进行量 化和编码, 得到频域系数的编码比特; 其中, 所述低比特编码子带是该编码 子带中单个频域系数所分配到的比特数小于预设阔值的编码子带, 所述高比 特编码子带是该编码子带中单个频域系数所分配到的比特数大于或等于预设 阔值的编码子带; 比特流复用器, 与所述幅值包络量化和编码单元以及分类格型矢量量化 和编码单元连接, 并设置为, 将各编码子带的编码比特以及频域系数的编码 比特复用并发送到解码端。 15、 如权利要求 14所述的系统, 其中, 所述比特分配单元包括相连接的重要性计算模块及比特分配模块,其中: 所述重要性计算模块设置为 , 根据编码子带幅值包络值计算各编码子带 重要性的初始值; 所述比特分配模块设置为 , 根据各编码子带的重要性对各编码子带中每 个频域系数进行比特分配, 且在比特分配过程中, 比特分配步长及比特分配 后重要性降低步长均是变化的。 16、 如权利要求 14所述的系统, 其中, 所述分类格型矢量量化和编码单元包括分类处理模块及塔型格型矢量量 化模块, 其中: 所述分类处理模块, 与所述归一化处理单元连接, 并设置为, 对归一化 后的频域系数进行分组形成多维待量化矢量, 将低比特编码子带归一化后的 待量化矢量转给塔型格型矢量量化模块; 所述塔型格型矢量量化模块, 与所述分类处理模块连接, 设置为对各低 比特编码子带归一化处理后的待量化矢量进行塔型格型矢量量化; 所述塔型 格型矢量量化模块包括第一能量规整子模块、 第一格点量化子模块、 第一能 量调整子模块及量化索引计算子模块, 其中: 所述第一能量规整子模块, 设置为对编码子带中的 8维待量化矢量进行 能量规整; 所述第一格点量化子模块, 与所述第一能量规整子模块连接, 并设置为 将 8维待量化矢量量化到 /¾格点; 所述第一能量调整子模块, 与所述第一格点量化子模块连接, 并设置为, 将 /¾格点的能量和编码码本中的最大塔面能量半径进行比较, 如果 /¾格点 的能量小于或等于最大塔面能量半径, 则通知所述量化索引计算子模块计算 所述/ ¾格点在码本中的量化索引; 如果/ ¾格点的能量大于最大塔面能量半 径, 则将该编码子带规整后的待量化矢量进行能量截断, 并通知所述第一格 点量化子模块将能量截断, 直至能量截断后的待量化矢量的量化格点的能量 不大于最大塔面能量半径, 同时对能量截断后的待量化矢量持续增加一个能 量, 并通知所述第一格点量化子模块将增加能量后的待量化矢量量化到 /¾ 格点,直至增加能量后的待量化矢量量化到的 /¾格点的能量超过最大塔面能 量半径, 以及通知量化索引计算子模块计算最后一个能量不超过最大塔面能 量半径的 /¾格点在码本中的量化索引; 所述索引量化计算模块, 与所述第一能量调整子模块连接, 并设置为根 据第一能量调整子模块的通知计算所述/ ¾格点在码本中的量化索引; 以及 所述分类格型矢量量化和编码单元还包括与所述分类处理模块连接的球 型格型矢量量化模块; 所述分类处理模块还设置为, 将高比特编码子带归一 化处理后的待量化矢量转给球型格型矢量量化模块处理; 所述球型格型矢量量化模块设置为, 对高比特编码子带归一化处理后的 待量化矢量进行球型格型矢量量化; 所述球型格型矢量量化模块包括第二能 量规整子模块、 第二格点量化子模块、 零矢量条件判断子模块、 第二能量调 整子模块及索引矢量计算子模块, 其中: 所述第二能量规整子模块设置为, 对编码子带中的 8维待量化矢量进行 能量规整; 所述第二格点量化子模块, 与所述第二能量规整子模块连接, 并设置为 将 8维待量化矢量量化到 /¾格点; 零矢量条件判断子模块, 与所述第二格点量化子模块连接, 并设置为, 判断所述/ ¾格点是否满足零矢量条件, 若所述/ ¾格点满足零矢量条件, 则 通知索引矢量计算子模块计算所述 /¾格点的索引矢量; 若所述 /¾格点不满 足零矢量条件, 则通知所述第二能量调整子模块对待量化矢量的能量进行调 整; 所述零矢量条件是将通过矢量量化得到的 /¾格点值除以 2的比特分配数 次方 2^。"-ωω后再投影到 /¾格点, 投影后的 /¾格点值是零矢量, 其中 region _bit(j)表示第 J个编码子带中单个频域系数所分配到的比特数; 所述第二能量调整子模块, 与所述零矢量条件判断子模块及第二格点量 化子模块连接, 并设置为, 将待量化矢量的值进行能量截断, 并通知所述第 二格点量化子模块将能量截断后的待量化矢量量化到 /¾格点,直至零矢量条 件满足; 备份待量化矢量自身的倍数值 W , 对能量截断后的待量化矢量加上 备份的倍数值 w, 以及通知所述第二格点量化子模块将能量截断后的待量化 矢量量化到/ ¾格点, 直至零矢量条件不满足; 以及通知索引矢量计算子模块 计算最近满足零矢量条件的 /¾格点的索引矢量; 所述索引矢量计算子模块, 与所述零矢量条件判断子模块及第二能量调 整子模块连接, 并设置为, 根据零矢量条件判断子模块及第二能量调整子模 块的通知计算所述/ ¾格点在码本中的量化索引。 17、 如权利要求 16所述的系统, 其中, 所述第一能量规整子模块是设置为, 在对所述 8维待量化矢量进行能量 规整的步骤中, 根据所述 8维待量化矢量所在编码子带 j中单个频域系数所 分配到的比特数 region _bitj), 从下表中查询到该比特数所对应的码本序号 index和能量缩放因子 scale; 然后根据下面的公式对待量化矢量进行能量规 整: Y cale ={Y -^Yscale{index) 其中, 1 表示编码子带 中第 个归一化后的待量化 8维矢量, ¾∞fe表 示对】 进行能量规整后的 8维矢量, a = (2- 6,2- 6,2- 6,2- 6,2- 6,2- 6,2- 6,2- 6); 所述第一格点量化子模块是设置为,在将 8维待量化矢量量化到 /¾格点 时, 釆用以下公式将 8维矢量 Ϋ α1ε量化到 D8格点 fjm上: 1 j ~ JDS 1 j, scale) 其中, /¾(·)表示将某个 8维矢量映射到 /¾格点的量化算子; 所述量化索引计算子模块是设置为, 计算 /¾格点 在码本中的量化索 引时, 先根据塔面能量的大小, 分别对各个塔面上的格点进行标号, 再在所 有塔面上对该格点进行统一标号, 该统一标号即为 /¾格点 在码本中的量 化索引。 18、 如权利要求 14所述的系统, 其中, 所述分类格型矢量量化和编码单元还包括编码类型判断模块、 霍夫曼编 码模块、 自然编码模块及比特分配修正模块, 其中: 所述编码类型判断模块设置为, 判断所有低比特编码子带的量化索引经 过霍夫曼编码后所消耗比特的总数是否小于所有低比特编码子带的量化索引 自然编码所需要的比特数总数, 如果所有低比特编码子带的量化索引经过霍 夫曼编码后所消耗比特的总数小于所有低比特编码子带的量化索引自然编码 所需要的比特数总数, 则通知霍夫曼编码模块及比特分配修正模块; 如果所 有低比特编码子带的量化索引经过霍夫曼编码后所消耗比特的总数大于或等 于所有低比特编码子带的量化索引自然编码所需要的比特数总数, 则通知自 然编码模块; 霍夫曼编码模块设置为 ,对低比特编码子带的量化索引进行霍夫曼编码, 并设置频域系数霍夫曼编码标识为 1或真; 自然编码模块设置为, 对低比特编码子带的量化索引及高比特编码子带 的索引矢量进行自然编码; 所述比特分配修正模块设置为, 利用霍夫曼编码节省下来的比特对编码 子带的比特分配数进行修正, 以及通知所述分类处理模块对修正了比特分配 数的编码子带分类后, 再次进行矢量量化和编码。 19、 如权利要求 18所述的系统, 其中, 所述比特分配修正模块是设置为, 在进行比特分配时, 在所有编码子带 中寻找重要性最大的编码子带, 如果该编码子带所分配的比特数已经达到可 能给与分配的最大值, 则将该编码子带的重要性调整到最低, 不再对该编码 子带修正比特分配数, 如果该编码子带所分配的比特数未达到可能给与分配 的最大值, 则对该重要性最大的编码子带进行比特分配修正; 在比特分配修正过程中, 对比特分配数为 0的编码子带分配 1个比特, 比特分配后重要性降低 1 ; 对比特分配数大于 0且小于 5的编码子带分配 0.5 个比特, 比特分配后重要性降低 0.5; 对比特分配数大于 5的编码子带分配 1 个比特, 比特分配后重要性降低 1 ; 以及 所述比特分配修正模块每修正一次比特分配数, 即将比特分配修正迭代 次数 count加 1 , 当比特分配修正迭代次数 count达到预设上限值或能够使用 的比特数小于比特分配修正所需要的比特数时, 结束比特分配修正流程。 20、 如权利要求 18所述的系统, 其中, 所述霍夫曼编码模块对所有低比特编码子带的量化索引进行霍夫曼编码 时: 在单个频域系数所分配到的比特数为大于 1小于 5但除去 2的所有编码 子带中, 对每个矢量量化索引的自然二进制码中每 4位分成一组并对其进行 霍夫曼编码, 所有 4位一组的霍夫曼编码比特数之和就是该量化索引的霍夫 曼编码的消耗比特数; 在单个频域系数所分配到的比特数为 2的所有编码子带中, 对每个 8维 矢量的塔型格型矢量量化索引使用 15个比特进行编码, 将 15个比特分成 3 组 4位比特和 1组 3位比特,然后对它们分别进行霍夫曼编码, 4组的霍夫曼 编码比特消耗数之和就是该量化索引的霍夫曼编码消耗比特数; 当编码子带的单个频域系数所分配到的比特数为 1时, 如果量化索引小 于 127 ,则对量化索引使用 7个比特进行编码,把 7个比特分成 1组 3比特和 1组 4比特, 分别对两组进行霍夫曼编码, 两组的霍夫曼编码比特消耗数之 和就是该量化索引的霍夫曼编码消耗比特数; 当编码子带的单个频域系数所分配到的比特数为 1时, 如果量化索引等 于 127 , 则定义它的自然二进制码值为" 1111 1110",把前面 7个 1分成 1组 3 比特和 1组 4比特, 分别对两组进行霍夫曼编码, 两组的霍夫曼编码比特消 耗数之和就是该量化索引的霍夫曼编码消耗比特数; 当编码子带的单个频域系数所分配到的比特数为 1时, 如果量化索引等 于 128, 则定义它的自然二进制码值为" 1111 1111",把前面 7个 1分成 1组 3 比特和 1组 4比特, 分别对两组进行霍夫曼编码, 两组的霍夫曼编码比特消 耗数之和就是该量化索引的霍夫曼编码消耗比特数。 21、 一种格型矢量量化音频解码系统, 该系统包括比特流解复用器、 编 码子带幅值包络解码单元、 比特分配单元、 频域系数解码单元、 分类格型矢 量量化反量化单元、 反归一化处理单元、 噪声填充单元和修正离散余弦逆变 换 IMDCT单元, 其中: 所述比特流解复用器设置为, 从待解码比特流中分离出幅值包络编码比 特; 所述编码子带幅值包络解码单元, 与所述比特流解复用器连接, 并设置 为, 对所述比特流解复用器输出的幅值包络编码比特进行解码, 得到各编码 子带的幅值包络量化指数; 所述比特分配单元, 与所述幅值包络解码单元连接, 并设置为, 进行比 特分配, 得到各编码子带中为每个频域系数所分配的编码比特数; 所述频域系数解码单元, 与幅值包络解码单元和比特分配单元连接, 并 设置为, 对低比特编码子带解码, 得到低比特编码子带的量化索引; 以及对 高比特编码子带进行解码得到高比特编码子带的索引矢量, 其中, 所述低比 特编码子带是该编码子带中单个频域系数所分配到的比特数小于预设阔值的 编码子带, 所述高比特编码子带是该编码子带中单个频域系数所分配到的比 特数大于或等于预设阔值的编码子带; 所述分类格型矢量量化反量化单元设置为, 对低比特编码子带的量化索 引进行塔型格型矢量量化的反量化, 以及对高比特编码子带的索引矢量进行 球型格型矢量量化的反量化; 所述反归一化处理单元设置为,对编码子带反量化后的值进行反归一化, 得到频域系数; 所述噪声填充单元设置为, 对反归一化处理单元输出的频域系数输出值 中未分配比特的子带进行噪声填充; 所述修正离散余弦逆变换 IMDCT单元, 与所述噪声填充单元连接, 并 设置为, 对噪声填充后的频域系数进行 IMDCT, 得到音频信号。 22、 如权利要求 21所述的系统, 其中, 所述比特分配单元包括相连接的重要性计算模块和比特分配模块, 以及 与所述比特分配模块连接的比特分配修正模块, 其中: 所述重要性计算模块设置为 , 根据编码子带幅值包络值计算各编码子带 重要性的初始值; 所述比特分配模块设置为 , 根据各编码子带的重要性对各编码子带中每 个频域系数进行比特分配, 且在比特分配过程中, 比特分配步长及比特分配 后重要性降低步长均是变化的; 所述比特分配修正模块设置为, 在进行比特分配之后, 根据编码端的比 特分配修正迭代次数 count值和各编码子带的重要性, 对编码子带再进行 count t匕 #^Κ ί'爹 JE。 23、 如权利要求 21所述的系统, 其中, 所述频域系数解码单元是设置为, 对低比特编码子带进行解码时, 当编 码子带的单个频域系数所分配到的比特数为 1时, 如果量化索引的自然二进 制码值小于" 1 1 1 1 1 1 1",则按照自然二进制码值计算量化索引; 如果量化索引 的自然二进制码值等于" 1 1 1 1 1 1 1",则继续读入下一位比特,如果下一位比特 是 0 , 则量化索引值为 127 , 如果下一位比特是 1 , 则量化索引值为 128。 24、 如权利要求 22所述的系统, 其中, 所述分类格型矢量量化反量化单元包括分类处理模块及塔型格型矢量量 化反量化模块, 其中, 所述分类处理模块设置为, 将低比特编码子带的量化索引转给塔型格型 矢量反量化模块; 所述塔型格型矢量反量化模块设置为, 对低比特编码子带的量化索引进 行反量化; 所述塔型格型矢量反量化模块包括相连接的第一格点反量化子模 块及第一能量反规整子模块, 其中: 所述第一格点反量化子模块设置为, 确定低比特编码子带的量化索引所 在的能量塔面及在该能量塔面上的标号, 以及进一步求解对应的 D8格点; 所述第一能量反规整子模块设置为, 对所求 D8格点; Γ进行能量反规整, 得到 其中, a = (2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 ) , scale(index)是缩放因子; 所述反归一化处理单元是设置为,对 进行反归一化处理,得到解码端 恢复出的编码子带 j的第 m个矢量的频域系数: ThAj)l2 Xm = 2 其中, 7¾(/)为第 j个编码子带的幅值包络量化指数。 25、 如权利要求 22所述的系统, 其中, 所述分类格型矢量反量化单元还包括球型格型矢量量化反量化模块; 所 述分类处理模块还设置为, 将高比特编码子带的索引矢量转给球型格型矢量 量化反量化模块处理; 所述球型格型矢量量化反量化模块设置为, 对高比特编码子带的索引矢 量进行反量化; 所述球型格型矢量量化反量化模块包括相连接的第二格点反 量化子模块及第二能量反规整子模块, 其中: 所述第二格点反量化子模块设置为, 求解索引矢量对应的/ ¾格点, 所述 求解索引矢量对应的 /¾格点的步骤包括: 计算 x=k*G , 并计算 ytemp=xl{2 region_bit(j)); 以及计算/ ¾格点 其中, k为矢量量化 的索引矢量, r o«_ t /)表示编码子带 j 中单个频域系数的比特分配数; G 为/ ¾格点的生成矩阵, 形式如下: 2 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 G = 1 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 所述第二能量反规整子模块设置为, 对所求 D8格点进行能量反规整, 得 Ϋ 二 y cal egion—bit皿 2reg + ?i , 其中, a = (2-6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 ) , scale(region _ bit(j))是缩放因 子; 所述反归一化处理单元是设置为,对 进行反归一化处理,得到解码端 恢复出的编码子带 j的第 m个矢量的频域系数: m ― ^ Thq j ) / 2 ^ γ~ m j ― J 其中, 7¾(/)为第 j个编码子带的幅值包络量化指数。 |
技术领域
本发明涉及一种音频编解码技术, 尤其是一种格型矢量量化音频编解码 方法和系统。
背景技术
音频编码技术是诸如数字音频广播、 互联网的传播音乐和音频通讯等多 媒体应用技术的核心,这些应用会极大地受益 于音频编码器压缩性能的提高。 感知音频编码器作为有损变换域编码的一种, 是现代的主流音频编码器。 现 有音频编解码器如动态图像专家组(MPEG ) 4 高级音频编码(AAC )等釆 用非均勾标量量化方式进行变换域音频编解码 , 运算复杂度较高, 压缩能力 不强; 基于传统的统计型矢量量化器(如用 LBG算法设计的矢量量化器, LBG是由 Linde, Buzo和 Gray三人提出来的一种矢量量化方法, )具有很强 的压缩能力, 因而在音视频压缩领域得到了广泛应用, 但是量化器运算复杂 度随维数呈指数关系增长, 并且用聚类算法对训练序列进行训练得到的码 本 通常不是全局最佳的。 近年来出现一种新的音频编解码矢量量化器, 也就是 格型矢量量化, 格型矢量量化器是以空间网格中的格点作为矢 量量化器来对 信号进行量化。 由于空间格点是有规律的, 其码本可以通过代数方法构造仅 占用很少的存储空间, 并且格型矢量量化具有运算复杂度低、 量化精度高的 优点。然而现有的基于格型矢量量化的音频编 解码器 (如 G.719等)在编解码码 本选择上釆用了球型网格, 其码本截断方式仅仅适用于均勾分布和高斯分 布 的信源, 而针对于语音这种拉普拉斯分布的信源来说编 码效果不好; 同时现 有的格型矢量量化器 (如 G.719)在编码过程中比特步长为整数个比特 (如一个 比特), 低比特分配时步长过长, 造成比特分配过于集中而不能更加有效地使 用有限的比特; 另外, 该编解码器的单个比特的网格码本占用过多的 存储空 间。 发明内容 本发明要解决的技术问题是提供一种格型矢量 量化音频编解码方法和系 统, 以获得较好的语音信源编码效果。
为解决以上技术问题, 本发明提供一种格型矢量量化音频编码方法, 该 方法包括:
将音频信号经过修正离散余弦变换 MDCT后的频域系数划分为多个编码 子带, 并对各编码子带的幅值包络值进行量化和编码 , 得到幅值包络的编码 比特;
对各编码子带进行比特分配, 并对低比特编码子带和高比特编码子带中 的矢量分别使用塔型格型矢量量化方法和球型 格型矢量量化方法进行归一 化、 量化和编码, 得到频域系数的编码比特, 其中, 所述低比特编码子带是 该编码子带中单个频域系数所分配到的比特数 小于预设阔值的编码子带, 所 述高比特编码子带是该编码子带中单个频域系 数所分配到的比特数大于或等 于预设阔值的编码子带; 以及
将各编码子带的幅值包络的编码比特和频域系 数的编码比特复用打包 后, 传送给解码端。
优选地, 划分编码子带时, 将所述 MDCT变换后的频域系数分成若干个 等间隔的编码子带, 或者按照听觉感知特性划分成若干个非均勾编 码子带。
优选地, 在所述对各编码子带进行比特分配的步骤之前 , 所述方法还包 括: 根据各编码子带的幅值包络值计算各编码子带 的重要性初始值;
在所述对各编码子带进行比特分配的步骤中, 根据各编码子带的重要性 对各编码子带中每个频域系数进行比特分配, 在比特分配过程中, 比特分配 步长及比特分配后重要性降低步长均是变化的 。
优选地, 所述重要性初始值是根据最大量化信噪比增益 条件下的最佳比 特值和符合人耳感知特性的比例因子计算的, 或者是各编码子带幅值包络的 量化指数 ¾( 或 L xlog 2 [7¾ )]+v」, 其中〃>0, 〃和 V均为实数。
优选地, 对各编码子带进行比特分配的过程包括:
计算单个频域系数的比特消耗平均值;
根据码率失真理论计算在最大量化信噪比增益 条件下的最佳比特值; 计算各编码子带在比特分配中的重要性初始值 ; 根据各编码子带的重要性对各编码子带进行比 特分配: 增加重要性最大 的编码子带中每个频域系数的编码比特数, 并降低该编码子带的重要性; 直 至所有编码子带所消耗比特数的总和满足可提 供比特限制条件下的最大值。 长小于零比特编码子带和高比特编码子带的比 特分配步长及比特分配后的重 要性降低步长。 长均为 0.5;零比特编码子带和高比特编码子带的比特 配步长及比特分配后 的重要性降低步长均为 1。
优选地, 对所述低比特编码子带使用塔型格型矢量量化 方法进行归一化 和量化的步骤包括:
使用编码子带的量化幅值包络值对该编码子带 中所有频域系数进行归一 化处理, 并分组形成多个多维待量化矢量; 对各待量化矢量进行量化处理; 其中, 对各待量化矢量进行量化处理的步骤包括: 对编码子带中的 8维待量 化矢量进行能量规整, 将能量规整后的 8维待量化矢量量化到/ ¾格点; 以及 将通过量化得到的 /¾格点的能量和编码码本中的最大塔面能量半 径进 行比较, 如果/ ¾格点的能量小于或等于最大塔面能量半径, 则计算所述/ ¾ 格点在码本中的量化索引; 如果/ ¾格点的能量大于最大塔面能量半径, 则将 该编码子带规整后的待量化矢量进行能量截断 , 直至能量截断后的待量化矢 量的量化格点的能量不大于最大塔面能量半径 , 同时对能量截断后的待量化 矢量持续增加一个能量,直至增加能量后的待 量化矢量量化到的 /¾格点的能 量超过最大塔面能量半径, 确定最后一个能量不超过最大塔面能量半径的 /¾ 格点为矢量量化格点并计算所述矢量量化格点 在码本中的量化索引;
和 /或
对所述高比特编码子带使用球型格型矢量量化 方法进行归一化和量化的 步骤包括:
使用编码子带的量化幅值包络值对该编码子带 中所有频域系数进行归一 化处理, 并分组形成多个多维待量化矢量; 对各待量化矢量进行量化处理; 其中, 对各待量化矢量进行量化处理的步骤包括:
对编码子带中的 8维待量化矢量进行能量规整, 将能量规整后的 8维待 量化矢量量化到/ ¾格点;
将通过量化得到的 /¾格点值除以 2的比特分配数次方 2^。"- ωω 后再量化 到/ ¾格点, 判断再量化的/ ¾格点值是否是零矢量, 如果再量化的/ ¾格点值 是零矢量, 则确定零矢量条件满足, 如果再量化的/ ¾格点值不是零矢量, 则 确定零矢量条件不满足, 其中 r e g 0 «_ t /)表示第 ·个编码子带中单个频域系 数所分配到的比特数; 如果零矢量条件满足, 则计算所述/ ¾格点的索引矢量; 以及
如果零矢量条件不满足, 则将待量化矢量的值进行能量截断, 直至零矢 量条件满足,备份待量化矢量自身的倍数值 W,对能量截断后的待量化矢量加 上备份的倍数值 W, 然后再量化到/ ¾格点, 判断零矢量条件是否满足, 如果 零矢量条件不满足, 则计算最近满足零矢量条件的/ ¾格点的索引矢量 k, 如 果零矢量条件满足, 则继续对待量化矢量增加备份的倍数值 w, 然后再量化 到/ ¾格点, 直至零矢量条件不满足。
优选地, 在对所述 8维待量化矢量进行能量规整的步骤中, 先根据所述 8 维待量化矢量所在编码子带 中单个频域系数所分配到的比特数 region bitij), 从下表中查询到该比特数所对应的码本序号 index和能量缩放 因子 scale; 然后根据下面的公式对待量化矢量进行能量规 整:
Y cale ={Y -^Yscale{index) 其中, 1 表示编码子带 中第 个归一化后的待量化 8维矢量, ¾ ∞fe 表 示对】 进行能量规整后的 8维矢量, a = (2- 6 ,2- 6 ,2- 6 ,2- 6 ,2- 6 ,2- 6 ,2- 6 ,2- 6 );
2 2 0.85 6
2.5 3 1.2 10
3 4 1.6 14
3.5 5 2.25 22
4 6 3.05 30
4.5 7 4.64 44
在将能量规整后的 8维待量化矢量量化到 /¾格点的步骤中,釆用以下公 式将能量 ¾L fe 量化到 /¾格点 上:
其中, /¾(·)表示将某个 8维矢量映射到 /¾格点的量化算子; 所述计算 /¾格点 在码本中的量化索引的步骤包括: 步骤 1: 根据塔面能量的大小, 分别对各个塔面上的格点进行标号; 对于维数为 L的整数格点网格 ZL , 定义能量半径为 f的塔面为:
S(L,K) = {Y = (y„y 2 ,...,y L )G Z L ∑\y t \=K} 记 N(J, Q为^; ^)中格点的个数, 对于整数格 ^来说, N(J, Q有如下的 递推公式:
N(J,0) = 1 (L≥ 0), N(0,K) = 0 (K≥l)
N(L, K) = N(L -l,K) + N(L - 1, - 1) + N(L, K -I) (L≥\K≥\);
对于能量半径为 K 的塔面上的整数格点; = (n...,_yj e z £ , 用
[0,1,....,NCL,^)-1]中的一个数 来标识, 并称 b为该格点的标号, 求解标号 b 的步骤如下:
步骤 1.1: 令 b=0, i=l, k=K, l=L, 根据所述递推公式, 计算 NO,«), (m<=L,n<=K), 并定义: 1 x>0
sgn(x) 0 x = 0;
-1 x<0
1- sgnO!)
^口果y,|=l, U = b + N(l-l,k) + N(l-l,k-l);
2
如果y,|>l, 则
1- sgnp,.)
N(/— U— .l)
2 步骤 1.3: k = k-\ yi \ =l-\,i=i+\, 如果此时 k=0, 则停止搜索, b(j,m)=b 为 Γ的标号, 否则继续步骤 1.2;
步骤 2: 在所有塔面上对该格点进行统一标号;
根据各个塔面的格点数和格点在自己的塔面上 的标号, 计算该格点在所 有塔面上的统一标号, 其中, kk 为偶数, b(, )为 /¾格点 ¾^在自身所在塔面上的标号, 而 mdex bij'm为 /¾格点 在码本中的量化索引。 优选地 ,
对低比特编码子带使用塔型格型矢量量化方法 进行编码的步骤包括: 对所有低比特编码子带的量化索引进行霍夫曼 编码; 以及
若所有低比特编码子带的量化索引经过霍夫曼 编码后所消耗比特的总数 小于所有低比特编码子带的量化索引的自然编 码所需要的比特数总和, 则使 用霍夫曼编码并设置频域系数霍夫曼编码标识 为 1或真, 利用霍夫曼编码节 省下来的比特对编码子带的比特分配数进行修 正, 以及对修正了比特分配数 的编码子带再次进行矢量量化和编码; 若所有低比特编码子带的量化索引经 过霍夫曼编码后所消耗比特的总数大于或等于 所有低比特编码子带的量化索 引的自然编码所需要的比特数总和, 则重新对量化索引进行自然编码, 并设 置频域系数霍夫曼编码标识为 0或假。
优选地, 所述利用霍夫曼编码节省下来的比特对编码子 带的比特分配数 进行修正的步骤包括:
计算霍夫曼编码所节省的比特数;
在所有编码子带中寻找重要性最大的编码子带 , 如果该编码子带所分配 的比特数已经达到可能分配的最大值,则将该 编码子带的重要性调整到最低, 不再对该编码子带修正比特分配数, 如果该编码子带所分配的比特数未达到 可能分配的最大值, 则对该重要性最大的编码子带进行比特分配修 正; 以及 在比特分配修正过程中, 对比特分配数为 0的编码子带分配 1个比特, 比特分配后重要性降低 1 ; 对比特分配数大于 0且小于 5的编码子带分配 0.5 个比特, 比特分配后重要性降低 0.5 ; 对比特分配数大于 5的编码子带分配 1 个比特, 比特分配后重要性降低 1。
优选地,比特分配数每修正 1次,即将比特分配修正迭代次数 co / 1 加 1 , 当比特分配修正迭代次数 count达到预设上限值或能够使用的比特数小于 特分配修正所需要的比特数时, 比特分配修正流程结束。
优选地,编码后的比特复用打包的顺序依次为 幅值包络霍夫曼编码标识、 频域系数霍夫曼编码标识、 比特分配修正迭代次数、 幅值包络的编码比特、 频域系数的编码比特。
优选地, 对所有低比特编码子带的量化索引进行霍夫曼 编码时, 根据编 码子带中单个频域系数所分配到的比特数, 对编码子带的矢量量化索引使用 不同的码本进行编码;
为解决以上技术问题,本发明还提供了一种格 型矢量量化音频解码方法, 该方法包括:
对待解码比特流中各幅值包络编码比特进行解 码, 得到各编码子带的幅 值包络量化指数; 对各编码子带进行比特分配, 并对低比特编码子带进行解码、 塔型格型 矢量量化的反量化及反归一化, 得到低比特编码子带的频域系数, 以及对高 比特编码子带进行解码、 球型格型矢量量化的反量化及反归一化, 得到高比 特编码子带的频域系数; 其中, 所述低比特编码子带是该编码子带中单个频 域系数所分配到的比特数小于预设阔值的编码 子带, 所述高比特编码子带是 该编码子带中单个频域系数所分配到的比特数 大于预设阔值的编码子带; 以 及
对噪声填充后的频域系数进行修正离散余弦逆 变换 IMDCT,得到最终的 音频信号。
优选地, 在对各编码子带进行比特分配的步骤之前, 所述方法还包括: 根据编码子带幅值包络值计算各编码子带重要 性的初始值;
在对各编码子带进行比特分配的步骤中, 根据各编码子带的重要性对各 编码子带中每个频域系数进行比特分配, 在比特分配过程中, 比特分配步长 及比特分配后重要性降低步长均是变化的。
优选地, 在进行比特分配之后, 解码之前, 根据编码端的比特分配修正 迭代次数 count值和各编码子带的重要性,对编码子带再 行 count次比特分 配修正。
优选地, 进行比特分配时, 低比特编码子带的比特分配步长及比特分配 后的重要性降低步长小于零比特编码子带和高 比特编码子带的比特分配步长 及比特分配后的重要性降低步长;
比特分配修正时, 低比特编码子带的比特修正步长及比特修正后 的重要 性降低步长小于零比特编码子带和高比特编码 子带的比特修正步长及比特修 正后的重要性降低步长。
长均为 0.5;零比特编码子带和高比特编码子带的比特 配步长及比特分配后 的重要性降低步长均为 1。
优选地, 在对低比特编码子带进行解码、 塔型格型矢量量化的反量化及 反归一化的步骤中, 根据编码端的频域系数霍夫曼编码标识对低比 特编码子 带进行霍夫曼解码或直接解码得到低比特编码 子带的矢量量化索引, 对所有 矢量量化索引进行塔型格型矢量量化的反量化 及反归一化, 得到低比特编码 子带的频域系数; 在对高比特编码子带进行解码、 球型格型矢量量化的反量 化及反归一化的步骤中, 直接釆用自然解码得到高比特编码子带的矢量 量化 索引, 对所有矢量量化索引进行球型格型矢量量化的 反量化及反归一化, 得 到高比特编码子带的频域系数。
为解决以上技术问题,本发明还提供了一种格 型矢量量化音频编码系统, 该系统包括修正离散余弦变换(MDCT )单元、 幅值包络计算单元、 幅值包 络量化和编码单元、 比特分配单元、 归一化处理单元、 分类格型矢量量化和 编码单元以及比特流复用器; 其中:
所述 MDCT单元设置为对音频信号进行修正离散余弦 换生成频域系 数;
所述幅值包络计算单元, 与所述 MDCT单元连接, 并设置为, 将所述 MDCT单元生成的频域系数划分为多个编码子带 并计算各编码子带的幅值 包络值;
所述幅值包络量化和编码单元, 与所述幅值包络计算单元连接, 并设置 为, 将各编码子带的幅值包络值进行量化和编码, 生成各编码子带幅值包络 的编码比特;
所述比特分配单元, 与所述幅值包络量化和编码单元连接, 并设置为进 行比特分配, 得到各编码子带中为每个频域系数所分配的编 码比特数;
归一化处理单元, 与所述 MDCT单元连接, 并设置为使用编码子带的量 化幅值包络值对各编码子带中所有频域系数进 行归一化处理;
所述分类格型矢量量化和编码单元, 与所述归一化处理单元及比特分配 单元连接, 并设置为, 对低比特编码子带和高比特编码子带中的归一 化后的 待量化矢量分别使用塔型格型矢量量化方法和 球型格型矢量量化方法进行量 化和编码, 得到频域系数的编码比特; 其中, 所述低比特编码子带是该编码 子带中单个频域系数所分配到的比特数小于预 设阔值的编码子带, 所述高比 特编码子带是该编码子带中单个频域系数所分 配到的比特数大于或等于预设 阔值的编码子带;
比特流复用器, 与所述幅值包络量化和编码单元以及分类格型 矢量量化 和编码单元连接, 并设置为, 将各编码子带的编码比特以及频域系数的编码 比特复用并发送到解码端。
优选地, 所述幅值包络计算单元划分编码子带时, 将所述 MDCT变换后 的频域系数分成若干个等间隔的编码子带, 或者按照听觉感知特性划分成若 干个非均勾编码子带。
优选地, 所述比特分配单元包括相连接的重要性计算模 块及比特分配模 块, 其中:
所述重要性计算模块设置为 , 根据编码子带幅值包络值计算各编码子带 重要性的初始值;
所述比特分配模块设置为 , 根据各编码子带的重要性对各编码子带中每 个频域系数进行比特分配, 且在比特分配过程中, 比特分配步长及比特分配 后重要性降低步长均是变化的。
优选地, 所述重要性初始值是根据最大量化信噪比增益 条件下的最佳比 特值和符合人耳感知特性的比例因子计算的, 或者是各编码子带幅值包络的 量化指数 ¾( 或 L xlog 2 [7¾( )]+ 」, 其中 μ >0, μ和 ν均为实数。
优选地, 所述重要性计算模块中计算所述重要性初始值 时, 先计算单个 频域系数的比特消耗平均值; 再根据码率失真理论计算在最大量化信噪比增 益条件下的最佳比特值; 之后再根据所述比特消耗平均值及最佳比特值 计算 各编码子带在比特分配中的重要性初始值;
所述比特分配模块根据各编码子带的重要性对 各编码子带进行比特分 配: 增加重要性最大的编码子带中每个频域系数的 编码比特数, 并降低该编 码子带的重要性; 直至所有编码子带所消耗比特数的总和满足可 提供比特限 制条件下的最大值。
优选地, 所述比特分配模块进行比特分配时, 低比特编码子带的比特分 配步长及比特分配后的重要性降低步长小于零 比特编码子带和高比特编码子 带的比特分配步长及比特分配后的重要性降低 步长。 优选地, 所述比特分配模块进行比特分配时, 低比特编码子带的比特分 配步长及比特分配后的重要性降低步长均为 0.5;零比特编码子带和高比特编 码子带的比特分配步长及比特分配后的重要性 降低步长均为 1。 优选地, 所述分类格型矢量量化和编码单元包括分类处 理模块及塔型格 型矢量量化模块, 其中:
所述分类处理模块, 与所述归一化处理单元连接, 并设置为, 对归一化 后的频域系数进行分组形成多维待量化矢量, 将低比特编码子带归一化后的 待量化矢量转给塔型格型矢量量化模块;
所述塔型格型矢量量化模块, 与所述分类处理模块连接, 设置为对各低 比特编码子带归一化处理后的待量化矢量进行 塔型格型矢量量化; 所述塔型 格型矢量量化模块包括第一能量规整子模块、 第一格点量化子模块、 第一能 量调整子模块及量化索引计算子模块, 其中:
所述第一能量规整子模块, 设置为对编码子带中的 8维待量化矢量进行 能量规整;
所述第一格点量化子模块, 与所述第一能量规整子模块连接, 并设置为 将 8维待量化矢量量化到 /¾格点;
所述第一能量调整子模块, 与所述第一格点量化子模块连接, 并设置为, 将 /¾格点的能量和编码码本中的最大塔面能量半 径进行比较, 如果 /¾格点 的能量小于或等于最大塔面能量半径, 则通知所述量化索引计算子模块计算 所述/ ¾格点在码本中的量化索引; 如果/ ¾格点的能量大于最大塔面能量半 径, 则将该编码子带规整后的待量化矢量进行能量 截断, 并通知所述第一格 点量化子模块将能量截断, 直至能量截断后的待量化矢量的量化格点的能 量 不大于最大塔面能量半径, 同时对能量截断后的待量化矢量持续增加一个 能 量, 并通知所述第一格点量化子模块将增加能量后 的待量化矢量量化到 /¾ 格点,直至增加能量后的待量化矢量量化到的 /¾格点的能量超过最大塔面能 量半径, 以及通知量化索引计算子模块计算最后一个能 量不超过最大塔面能 量半径的 /¾格点在码本中的量化索引;
所述索引量化计算模块, 与所述第一能量调整子模块连接, 并设置为根 据第一能量调整子模块的通知计算所述/ ¾格点在码本中的量化索引; 以及
所述分类格型矢量量化和编码单元还包括与所 述分类处理模块连接的球 型格型矢量量化模块; 所述分类处理模块还设置为, 将高比特编码子带归一 化处理后的待量化矢量转给球型格型矢量量化 模块处理;
所述球型格型矢量量化模块设置为, 对高比特编码子带归一化处理后的 待量化矢量进行球型格型矢量量化; 所述球型格型矢量量化模块包括第二能 量规整子模块、 第二格点量化子模块、 零矢量条件判断子模块、 第二能量调 整子模块及索引矢量计算子模块, 其中:
所述第二能量规整子模块设置为, 对编码子带中的 8维待量化矢量进行 能量规整;
所述第二格点量化子模块, 与所述第二能量规整子模块连接, 并设置为 将 8维待量化矢量量化到 /¾格点;
零矢量条件判断子模块, 与所述第二格点量化子模块连接, 并设置为, 判断所述/ ¾格点是否满足零矢量条件, 若所述/ ¾格点满足零矢量条件, 则 通知索引矢量计算子模块计算所述 /¾格点的索引矢量; 若所述 /¾格点不满 足零矢量条件, 则通知所述第二能量调整子模块对待量化矢量 的能量进行调 整; 所述零矢量条件是将通过矢量量化得到的 /¾格点值除以 2的比特分配数 次方 2^。"- ωω 后再投影到 /¾格点, 投影后的 /¾格点值是零矢量, 其中 region _bit(j)表示第 J个编码子带中单个频域系数所分配到的比特 ;
所述第二能量调整子模块, 与所述零矢量条件判断子模块及第二格点量 化子模块连接, 并设置为, 将待量化矢量的值进行能量截断, 并通知所述第 二格点量化子模块将能量截断后的待量化矢量 量化到 /¾格点,直至零矢量条 件满足; 备份待量化矢量自身的倍数值 W , 对能量截断后的待量化矢量加上 备份的倍数值 w, 以及通知所述第二格点量化子模块将能量截断 后的待量化 矢量量化到/ ¾格点, 直至零矢量条件不满足; 以及通知索引矢量计算子模块 计算最近满足零矢量条件的 /¾格点的索引矢量;
所述索引矢量计算子模块, 与所述零矢量条件判断子模块及第二能量调 整子模块连接, 并设置为, 根据零矢量条件判断子模块及第二能量调整子 模 块的通知计算所述/ ¾格点在码本中的量化索引。
优选地, 所述分类格型矢量量化和编码单元还包括编码 类型判断模块、 霍夫曼编码模块、 自然编码模块及比特分配修正模块, 其中:
所述编码类型判断模块设置为, 判断所有低比特编码子带的量化索引经 过霍夫曼编码后所消耗比特的总数是否小于所 有低比特编码子带的量化索引 自然编码所需要的比特数总数, 如果所有低比特编码子带的量化索引经过霍 夫曼编码后所消耗比特的总数小于所有低比特 编码子带的量化索引自然编码 所需要的比特数总数, 则通知霍夫曼编码模块及比特分配修正模块; 如果所 有低比特编码子带的量化索引经过霍夫曼编码 后所消耗比特的总数大于或等 于所有低比特编码子带的量化索引自然编码所 需要的比特数总数, 则通知自 然编码模块; 霍夫曼编码模块设置为 ,对低比特编码子带的量化索引进行霍夫曼编 , 并设置频域系数霍夫曼编码标识为 1或真;
自然编码模块设置为, 对低比特编码子带的量化索引及高比特编码子 带 的索引矢量进行自然编码;
所述比特分配修正模块设置为, 利用霍夫曼编码节省下来的比特对编码 子带的比特分配数进行修正, 以及通知所述分类处理模块对修正了比特分配 数的编码子带分类后, 再次进行矢量量化和编码。
优选地, 所述比特分配修正模块是设置为, 在进行比特分配时, 在所有 编码子带中寻找重要性最大的编码子带, 如果该编码子带所分配的比特数已 经达到可能分配的最大值, 则将该编码子带的重要性调整到最低, 不再对该 编码子带修正比特分配数, 如果该编码子带所分配的比特数未达到可能分 配 的最大值, 则对该重要性最大的编码子带进行比特分配修 正; 以及
在比特分配修正过程中, 对比特分配数为 0的编码子带分配 1个比特, 比特分配后重要性降低 1 ; 对比特分配数大于 0且小于 5的编码子带分配 0.5 个比特, 比特分配后重要性降低 0.5; 对比特分配数大于 5的编码子带分配 1 个比特, 比特分配后重要性降低 1。 优选地, 所述比特分配修正模块每修正一次比特分配数 , 即将比特分配 修正迭代次数 count加 1 , 当比特分配修正迭代次数 count达到预设上限值或 能够使用的比特数小于比特分配修正所需要的 比特数时, 结束比特分配修正 流程。
优选地, 所述比特流复用器对编码后的比特复用打包的 顺序依次为幅值 包络霍夫曼编码标识、 频域系数霍夫曼编码标识、 比特分配修正迭代次数、 幅值包络的编码比特、 频域系数的编码比特。
优选地, 所述霍夫曼编码模块对所有低比特编码子带的 量化索引进行霍 夫曼编码时, 根据编码子带中单个频域系数所分配到的比特 数, 对编码子带 的矢量量化索引使用不同的码本进行编码。
为解决以上技术问题,本发明还提供了一种格 型矢量量化音频解码系统, 该系统包括比特流解复用器、 编码子带幅值包络解码单元、 比特分配单元、 频域系数解码单元、 分类格型矢量反量化单元、 反归一化处理单元、 噪声填 充单元和修正离散余弦逆变换 IMDCT单元, 其中:
所述比特流解复用器设置为, 从待解码比特流中分离出幅值包络编码比 特、 频域系数编码比特;
所述编码子带幅值包络解码单元, 与所述比特流解复用器连接, 并设置 为, 对所述比特流解复用器输出的幅值包络编码比 特进行解码, 得到各编码 子带的幅值包络量化指数;
所述比特分配单元, 与所述幅值包络解码单元连接, 并设置为, 进行比 特分配, 得到各编码子带中为每个频域系数所分配的编 码比特数;
所述频域系数解码单元, 与幅值包络解码单元和比特分配单元连接, 并 设置为, 对低比特编码子带解码, 得到低比特编码子带的量化索引; 以及对 高比特编码子带进行解码得到高比特编码子带 的索引矢量, 其中, 所述低比 特编码子带是该编码子带中单个频域系数所分 配到的比特数小于预设阔值的 编码子带, 所述高比特编码子带是该编码子带中单个频域 系数所分配到的比 特数大于或等于预设阔值的编码子带;
所述分类格型矢量反量化单元设置为, 对低比特编码子带的量化索引进 行塔型格型矢量量化反量化, 以及对高比特编码子带的索引矢量进行球型格 型矢量量化反量化;
所述反归一化处理单元设置为,对编码子带反 量化后的值进行反归一化, 得到频域系数;
所述噪声填充单元设置为, 对反归一化处理单元输出的频域系数输出值 中未分配比特的子带进行噪声填充;
所述修正离散余弦逆变换 IMDCT单元, 与所述噪声填充单元连接, 并 设置为, 对噪声填充后的频域系数进行 IMDCT, 得到音频信号。
优选地, 所述比特分配单元包括相连接的重要性计算模 块及比特分配模 块, 其中:
所述比特分配单元包括相连接的重要性计算模 块及比特分配模块,其中: 所述重要性计算模块设置为 , 根据编码子带幅值包络值计算各编码子带 重要性的初始值;
所述比特分配模块设置为 , 根据各编码子带的重要性对各编码子带中每 个频域系数进行比特分配, 且在比特分配过程中, 比特分配步长及比特分配 后重要性降低步长均是变化的。
优选地, 所述比特分配单元, 还包括与所述比特分配模块连接的比特分 配修正模块, 用于在进行比特分配之后, 根据编码端的比特分配修正迭代次 数 count值和各编码子带的重要性,对编码子带再 行 count次比特分配修正。
优选地, 所述比特分配模块进行比特分配时, 低比特编码子带的比特分 配步长及比特分配后的重要性降低步长小于零 比特编码子带和高比特编码子 带的比特分配步长及比特分配后的重要性降低 步长。
所述比特分配修正模块进行比特分配修正时, 低比特编码子带的比特分 配修正步长及比特分配修正后的重要性降低步 长小于零比特编码子带和高比 特编码子带的比特分配修正步长及比特分配修 正后的重要性降低步长。
优选地, 所述频域系数解码单元, 对低比特编码子带解码时, 根据编码 端的频域系数霍夫曼编码标识对低比特编码子 带进行霍夫曼解码或进行自然 解码得到低比特编码子带的矢量量化索引; 对高比特编码子带解码时, 直接 进行自然解码得到高比特编码子带的矢量量化 索引。
优选地, 所述分类格型矢量量化反量化单元包括分类处 理模块及塔型格 型矢量量化反量化模块, 其中,
所述分类处理模块设置为, 用于将低比特编码子带的量化索引转给塔型 格型矢量量化反量化模块;
所述塔型格型矢量量化反量化模块设置为, 用于对低比特编码子带的量 化索引进行反量化; 所述塔型格型矢量量化反量化模块包括相连接 的第一格 点反量化子模块及第一能量反规整子模块, 其中:
所述第一格点反量化子模块设置为, 用于确定低比特编码子带的量化索 引所在的能量塔面及在该能量塔面上的标号, 以及进一步求解对应的 D 8 格 点;
所述第一能量反规整子模块设置为,用于对所 求 D 8 格点; Γ进行能量反规 整, 得到
Y 1 = {Υ + Ά) Ι scale{index) 其中, a = (2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 ) , scale(index)是缩放因子; 所述反归一化处理子单元是设置为,对 进行反归一化处理,得到解码 端恢复出的编码子带 j的第 m个矢量的频域系数: j ― j
其中, 7¾(/)为第 j个编码子带的幅值包络量化指数。
优选地, 所述分类格型矢量量化反量化单元还包括球型 格型矢量量化反 量化模块; 所述分类处理模块, 还用于设置为, 将高比特编码子带的索引矢 量转给球型格型矢量量化反量化模块处理;
所述球型格型矢量量化反量化模块用于设置为 , 对高比特编码子带的索 引矢量进行反量化; 所述球型格型矢量量化反量化模块包括相连接 的第二格 点反量化子模块及第二能量反规整子模块, 其中:
所述第二格点反量化子模块设置为, 用于求解索引矢量对应的 /¾格点, 所述求解索引矢量对应的 /¾格点的步骤具体包括: 计算 x=k*G , 并计算 ytemp=xl(2^(region_bit j));
以及计算/ ¾格点 其中, k为矢量量化 的索引矢量, r o«_ t /)表示编码子带 j 中单个频域系数的比特分配数; G 为/ ¾格点的生成矩阵, 形式如下:
2 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0
1 0 1 0 0 0 0 0
1 0 0 1 0 0 0 0
G =
1 0 0 0 1 0 0 0
1 0 0 0 0 1 0 0
1 0 0 0 0 0 1 0
1 0 0 0 0 0 0 1
所述第二能量反规整子模块设置为, 用于对所求 D 8 格点进行能量反规 整, 得到
Y m = y * scale(region—bit(j ) /(2 、
+ a
其中, a = (2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 ) , scak(region _ bit(j))是缩放因
所述反归一化子单元是设置为,对 进行反归一化处理,得到解码端恢 复出的编码子带 j的第 m个矢量的频域系数:
其中, 7¾(/)为第 j个编码子带的幅值包络量化指数。
本发明格型矢量量化音频编解码方法和系统充 分考虑语音信源的分布特 性, 釆用一种融合型格型矢量量化方式对待量化矢 量进行量化, 具体根据编 码子带的比特分配数, 对低比特编码子带和高比特编码子带分别使用 塔型格 型矢量量化方式和球型格型矢量量化方式, 并在解码时釆用编码的逆过程, 从而获得较好的音频信源编码效果。 另外, 在比特分配时釆用了变步长的比 特分配方式, 单个频域系数的比特分配步长最低可以调整为 半个比特, 提高 了比特的使用效率。 同时设计出低比特步长的塔型格型矢量量化器 , 其格点 标号算法复杂度低, 也减少存储空间, 另外在高比特编码子带的球型格型矢 量量化中, 在码本扩展标号上釆用新的判别准则, 可进一步降低格型矢量量 化器的算法复杂度。 在编码过程中还设计出了节省比特的算法。
附图概述
图 1是本发明格型矢量量化音频编码方法示意图
图 2是本发明格型矢量量化过程示意图;
图 3是本发明比特分配修正过程示意图;
图 4是本发明格型矢量量化音频解码方法示意图
图 5是本发明格型矢量量化音频编码系统的结构 意图;
图 6是本发明编码系统的分类格型矢量量化和编 单元的模块结构示意 图;
图 7是本发明格型矢量量化音频解码系统的结构 意图;
图 8是本发明解码系统的分类格型矢量量化反量 单元的模块结构示意 图;
图 9是本发明实施例的码流构成示意图。
本发明的较佳实施方式
本发明的核心思想是, 釆用一种融合型格型矢量量化方式对待量化矢 量 进行量化, 具体根据编码子带的比特分配数, 对低比特编码子带和高比特编 码子带分别使用塔型格型矢量量化方式和球型 格型矢量量化方式, 在解码时 釆用编码的逆过程, 从而获得较好的编码效果。 另外, 在比特分配时釆用了 变步长的比特分配方式, 提高了比特的使用效率。
以下分编码方法、 解码方法、 编码系统、 解码系统四部分来对本发明进 行详细说明:
一、 编码方法
本发明格型矢量量化音频编码方法包括以下步 骤:
A、将音频信号经过修正离散余弦逆变换(MDCT )变换后的频域系数划 分为若干个编码子带, 并对各编码子带的幅值包络值进行量化和编码 , 得到 幅值包络的编码比特;
划分编码子带时,将所述 MDCT变换后的频域系数分成若干个等间隔的 编码子带, 或者按照听觉感知特性划分成若干个非均勾编 码子带。
B、对各编码子带进行比特分配,并对低比特 码子带和高比特编码子带 中的矢量分别使用塔型格型矢量量化方法和球 型格型矢量量化方法进行归一 化、 量化和编码, 得到频域系数的编码比特; 其中, 所述低比特编码子带是 指该编码子带中单个频域系数所分配到的比特 数小于预设阔值的编码子带, 所述高比特编码子带是指该编码子带中单个频 域系数所分配到的比特数大于 或等于预设阔值的编码子带;
对各编码子带进行比特分配前, 先根据编码子带幅值包络值计算各编码 子带重要性的初始值, 再根据编码子带的重要性对编码子带中每个频 域系数 进行比特分配, 在比特分配过程中, 比特分配步长及比特分配后重要性降低 的步长均是变化的。
根据编码子带的重要性对编码子带中每个频域 系数进行比特分配时, 比 特分配步长及比特分配后的重要性降低步长是 变化的; 具体表现为: 对编码子带进行比特分配时, 低比特编码子带的比特分配步长及比特分 配后的重要性降低步长小于零比特编码子带和 高比特编码子带的比特分配步 长及比特分配后的重要性降低步长。 零比特编码子带指编码子带中每个频域 系数分配的比特数为零的编码子带。
重要性初始值可以根据最大量化信噪比增益条 件下的最佳比特值和符合 人耳感知特性的比例因子计算, 也可以将编码子带幅值包络的量化指数 Th q {j) . 或将 L xlog 2 [7¾( )]+v」 (其中〃>0, 〃和 V均为实数)作为各编码子 带的比特分配重要性初始值, j=0,..., - 1。
C、将各编码子带的所述幅值包络的编码比特 所述频域系数的编码比特 复用打包后, 传送给解码端。
实施例 1-编码方法
图 1是本发明实施例一种格型矢量量化音频编码 法的结构示意图。 本 实施例中以帧长为 20ms,釆样率为 32kHz的音频流为例具体说明本发明的音 频编码方法。 在其它帧长和釆样率条件下, 本发明的方法同样适用。 如图 1 所示, 该方法包括:
步骤 101 : 对待编码音频流实施 MDCT ( Modified Discrete Cosine Transform, 修正离散余弦变换)得到 N个频域釆样点上的频域系数;
本步骤的具体实现方式可以是:
将当前帧的 N点时域釆样信号 与上一帧的 N点时域釆样信号 Xouin) 组 2N点时域釆样信号 , 2Ν点的时域釆样信号可由下式表示:
对 《)实施 MDCT变换, 得到如下频域系数: (:) = j(«)w(«)cos[ (« + +—)0+"4] k = 0,---,N-l (2) 其中, 表示正弦窗函数, 表达式为: w(«)-sin[— («+-)] η=0,···,2Ν-1 (3 )
2Ν 2
当帧长为 20ms, 釆样率为 32kHz时, 得到 640个频域系数。 其他帧长及 釆样率可同样算出相应的频域系数个数 N。
步骤 102: 将 N点频域系数分成若干个编码子带, 计算各个编码子带的 幅值包络;
在本实施例中釆用非均匀子带划分, 计算各个子带的频域幅值包络(简 称幅值包络) 。
本步骤可以釆用如下子步骤实现:
步骤 102a: 将所需处理的频带范围内的频域系数分成 L个子带(可以称 为编码子带) ;
本实施例中, 所需处理的频带范围是 0~ 13.6kHz, 可以按照人耳感知特 性进行非均勾子带划分, 表 1给出了一个具体的划分方式。
在表 1中将 0 ~ 13.6kHz频带范围内的频域系数划分成 28个编码子带, 也就是 L=28; 并将 13.6kHz以上的频域系数置为 0。
步骤 102b: 按照以下公式计算各编码子带的幅值包络: ( 4 )
其中, Llndexij和 分别表示第 j个编码子带的起始频率点和结束 频率点, 其具体数值如表 1所示。
起始频率点 结束频率点 子带宽度 子带序号
(LIndex) (Hlndex) (Bandwidth)
0 0 7 8
1 8 15 8
2 16 23 8
3 24 31 8
4 32 47 16
5 48 63 16
6 64 79 16
7 80 95 16
8 96 111 16
9 112 127 16
10 128 143 16
11 144 159 16
12 160 183 24
13 184 207 24
14 208 231 24
15 232 255 24
16 256 279 24
17 280 303 24
18 304 327 24
19 328 351 24
20 352 375 24
21 376 399 24
22 400 423 24
23 424 447 24
24 448 471 24
25 472 495 24
26 496 519 24
27 520 543 24 表 1频域非均匀子带划分方式实例 步骤 103: 对各编码子带的幅值包络值进行量化和编码, 得到幅值包络 的量化指数和幅值包络的量化指数编码比特( 即幅值包络的编码比特) ; 釆用以下公式(5 )对根据公式(4)计算得到的各编码子带幅值包 络进 行量化, 得到各编码子带幅值包络的量化指数:
其中, ^」表示向下取整, 1¾(0)为第一个编码子带的幅值包络量化指数, 将其范围限制在 [ - 5, 34]内,即当 Th q (0) < - 5时,令 = -5; 当 Th q (0) > 34时, 令 = 34。
根据量化指数重建的量化幅值包络为 2 τ ω/2 。
使用 6比特对第一个编码子带的幅值包络量化指数 行编码, 即消耗 6 比特。
各编码子带幅值包络量化指数间的差分运算值 釆用如下公式计算:
Δ7¾ ) = Th q (J +\)-Th q (j) . = 0,…, - 2 (6)
可以对幅值包络进行如下修正以保证 Δ ¾( ·)的范围在[ - 15, 16]之内: 如果 Δ ¾ 9 0)<— 15, 则令 Δ ¾ (_/·) =— 15, 7¾ g ( j) = 7¾ g (j + 1) + 15, j = L-2,-,0; 如果 Δ ^ΟθΙδ , 则令 A7¾ g C/) = 16, Th q (j + \) = Th q (j) + \6J = 0,...,L-2;
对 A7¾ g C/),_/ = 0,...,J- 2进行霍夫曼 ( Huffinan )编码, 并计算此时所消耗的 比特数(称为霍夫曼编码比特, Huffinan coded bits ) 。 如果此时霍夫曼编码 比特大于等于固定分配的比特数(在本实施例 中大于 L- l)x 5 ) , 则使用自 然编码方式对 ATh q (j)J = 0,..., J- 2进行编码, 并置幅值包络霍夫曼编码标志位 Flag huff—丽 = 0; 否则利用霍夫曼编码对 ATh q ), j = Q,,L_2进行编码, 并置 幅值包络霍夫曼编码标志位 Flag huff—rms = 1。 幅值包络量化指数的编码比 特(即幅值包络差分值的编码比特)和幅值包 络霍夫曼编码标志位需要被传 送到 MUX中。
步骤 104: 根据各编码子带的重要性对各编码子带进行比 特分配; 先根据码率失真理论和编码子带幅值包络信息 计算各编码子带重要性的 初始值, 再根据各子带的重要性对各子带进行比特分配 ; 本步骤可以釆用如 下子步骤实现: 步骤 104a: 计算单个频域系数的比特消耗平均值;
从 20ms帧长可提供的总的比特数 bits available中, 扣除边信息消耗的 比特数 bit sides和编码子带幅值包络所消耗掉的比特数 bits—Th , 得到剩余的 可用于频域系数编码的比特数 bz¾— /e/i, 即:
bits left = bits available ― bit sides ― bits Th ( 7 ) 边信息包括幅值包络霍夫曼编码标志 Fla g —huff—rms 频域系数霍夫曼编 码标志 Flag huff )lvq和迭代次数 count的比特。 Flag huff 用于标识是否 对子带幅值包络使用了霍夫曼编码; Flag huff j?lvq用于标识是否在对频域系 数进行矢量量化和编码时使用了霍夫曼编码, 而迭代次数 count用于标识比 特分配修正时的迭代次数(详见后续步骤中的 描述) 。
计算单个频域系数的比特消耗平均值^ :
― bits left
R = ― ( 8 )
HIndex{L— 1) + 1 其中, 为编码子带的个数。
步骤 104b: 根据码率失真理论计算在最大量化信噪比增益 条件下的最佳 比特值;
通过拉格朗日方法优化基于独立高斯分布随机 变量的码率失真度, 可计 算得到该码率失真度界限下各编码子带的最大 量化信噪比增益条件下的最佳 比特
其中, m(j) = _/ = 0,…, — 1 ( 10 )
以及
1 L ~ x
mean _ Th = Th (i)[HIndex(i) - Llndex(i) + 1] ( 11 )
_ HI dex(L - 1) + 1 ""^
步骤 104c: 计算各编码子带在比特分配中的重要性初始值 : 使用上述最佳比特值, 以及符合人耳感知特性的比例因子, 可以得到在 实际比特分配中用于控制比特分配的各编码子 带重要性的初始值:
rk(j) = axrr(j) = a[R + R nin ( )l j = 0,…, — 1 ( 12)
其中 为比例因子, 该因子跟编码比特率相关, 可通过统计分析得到, 通常 0< <1, 在本实施例中 取值为 0.6。 表示第 ·个编码子带用于比特 分配时的重要性。
步骤 104d: 根据各编码子带的重要性对各编码子带进行比 特分配; 具体描述如下:
首先从各 中找到最大值所在的编码子带, 假设该编码子带的编号为 j k , 然后增加该编码子带中每个频域系数的编码比 特数, 并降低该编码子带的 重要性; 同时计算用 最后计 算所有编码子带所消耗比特数的总和腿 (bit band used - 1; 重 复上述过程直至所消耗比特数的总和满足可提 供比特限制条件下的最大值。
比特分配数是指一个编码子带中单个频域系数 所分配到的比特数。 一个 编码子带所消耗的比特数是指该编码子带中单 个频域系数所分配比特数乘以 该编码子带中所包含频域系数的个数。
在本实施例中, 对比特分配数为 0的编码子带分配比特的步长是 1个比 特, 比特分配后重要性降低的步长为 1, 对比特分配数大于 0且小于阔值 5 的编码子带追加分配比特时的比特分配步长为 0.5 个比特, 追加分配比特后 重要性降低的步长也为 0.5,对比特分配数大于等于阔值 5的编码子带追加分 配比特时的比特分配步长为 1, 追加分配比特后重要性降低的步长也为 1。
本步骤中的比特分配方法可以由如下伪代码表 示:
令 region b it(j')=0 , j=0,\,---,L-\;
对于编码子带 0,1,..., - 1:
寻找 j k = arg max[rk(j)];
J=0,-,L-
^口果 region_bit jk)<5 ^口果
令 region— bitjk) = region— bitjk) + 1;
计算 bit— band— usedjk) = region— bitjk) * BandWidthjk);
令 rkG k ) = rkG k ) - 1;
否则如果 region— bit(j k )>=l
令 region— bitjk) = region— bitjk) + 0.5;
计算 bit— band— usedjk) = region— bitjk) * BandWidthjk)*0.5;
令 rkG k ) = rkGk)_0.5;
否则 口果 region— bit(j k )>=
令 region— bitjk) = region— bitjk) + 1;
on _ bit( j k ) < MaxBit
计算 bit— band— usedjk) = region— bitjk) x BandWidthjk);
计算 bit— used— all = sum(bit_band_usedj )) j=0, 1 , ... ,L - 1 ;
如果 bit— used— all < bits— left -24, 返回并在各编码子带中重新寻找 j 循环计算比特分配值; 其中 24为编码子带宽度的最大值。
否则, 结束循环, 计算比特分配值, 输出此时的比特分配值。
最后,根据编码子带的重要性, 将剩余的不到 24个比特按如下原则分配 给满足要求的编码子带, 优先在比特分配为 1的编码子带中给每个频域系数 分配 0.5个比特, 同时降低该编码子带的重要性 0.5; 否则给比特分配为 0的 子带中每个频域系数分配 1个比特, 同时降低该编码子带的重要性 1, 直至 bit— left - bit— used— all < 4 , 比特分配结束。
其中, MaxBit为编码子带中单个频域系数所能分配到的 最大的编码比特 数。 本实施例中釆用 MaxBit=9。 这个值可以根据编解码器的编码码率适当调 整。 region— bitG)为第 j个编码子带中单个频域系数所分配的比特数
步骤 105: 对低比特编码子带和高比特编码子带中的矢量 分别使用塔型 格型矢量量化方法和球型格型矢量量化方法进 行量化和编码, 得到频域系数 的编码比特;
后续结合图 2对本发明分类格型矢量量化和编码的过程进 详细说明。 步骤 106: 构造编码码流;
图 9是本发明实施例的码流构成示意图。 首先将边信息按如下顺序写入 比特流复用器 MUX中, Flag huff—丽、 Flag huff )lvq和 count 然后将编 码子带幅值包络编码比特写入 MUX,然后将频域系数的编码比特写入 MUX; 最后将按上述顺序写成的码流传送到解码端;
分类格型矢量量化和编码过程
具体地, 如图 2所示, 分类格型矢量量化和编码过程包括:
步骤 201 : 使用编码子带的量化幅值包络值对该编码子带 中所有频域系 数进行归一化处理, 并分组形成若干个待量化矢量;
使用编码子带 j的量化幅值包络 hq (J 1 对该编码子带中所有频域系数 Xj 进行归一化处理: n o rm a lize d ― X J
将编码子带中连续的 8个频域系数分组构成 1个 8维矢量。 根据表 1对 编码子带的划分, 编码子带 j中的系数正好可以分组构成 Lattice— D8G)个 8维 矢量。 各个归一化后分组的 8维待量化矢量可表示为 ^ , 其中 m表示该 8 维矢量在编码子带中的位置, 其范围在 0到 Lattice— D8G)-1之间。 步骤 202:判断编码子带 j的比特分配数 region— bitG)是否小于预设阔值, 如果是, 则该编码子带为低比特编码子带, 执行步骤 203, 即釆用塔型格型 矢量量化方法进行量化, 并在量化后执行步骤 205进行编码; 否则该编码子 带为高比特编码子带, 执行步骤 204, 即釆用球型格型矢量量化方法进行量 化, 并在量化后执行步骤 206进行编码;
步骤 203: 对低比特编码子带釆用塔型格型矢量量化方法 进行量化; 在本实施例中,预设阔值为 5, 即低比特编码子带 j所分配到的比特数满 足: 1 <=region b it{j)<5。
本实施例釆用基于/ ¾格点的 8维格型矢量量化,其中 /¾格点定义如下:
A =
其中 Z 8 表示 8维的整数空间。 将 8维矢量映射到 (即量化到) /¾格点的 基本方法描述如下:
设 X为任意实数, x)表示取和 X相邻的两个整数中相距较近的整数的取 整量化, 表示取相邻的两个整数中相距较远的整数的取 整量化。 对任意 矢量 =( ^,..., ^^,同样可定义/ ( ) = (/^),/( ),...,/( 》。 在 )中选择 取整量化误差的绝对值最大的分量中的最小下 标, 记为 由此定义 (^ = (/^),/( ), J( ¾ ),...,/(X s 》, 则 )或 G ( )中有一个且只有一个是/ ¾格 点的数值, 此时/ ¾格点的量化值为:
f n 。
对低比特编码子带的待量化矢量量化进行塔型 格型矢量量化的过程包 括:
步骤 203a、 对待量化矢量进行能量规整;
根据待量化矢量所在编码子带 j 中单个频域系数所分配的比特数 region bitij), 从以下表 2中查询到该比特数所对应的码本序号(index) 能 量缩放因子 (scale) ; 然后根据下面的公式对待量化矢量进行能量规 整:
Y cale ={Y -^Yscale{index) 其中, 1 表示编码子带 中第 个归一化后的待量化 8维矢量, ¾ ∞fe 表 示对】 进行能量规整后的 8维矢量, n rm m 。
需要说明的是以下表 2是根据统计得到的, 其统计方法为:
首先将 ^fl/e限制在一定范围中并以特定步长 1计算釆用相应步长条件下 塔式格型矢量量化和反量化在某个量化比特数 条件下对应的均方误差值, 寻 找最小均方误差值对应的 值所在的特定区域范围,以特定步长 2搜索塔 式格型矢量量化和反量化在某个量化比特数条 件下对应的均方误差值, 寻找 最小均方误差值对应的 值,该值为某个量化比特条件下对应的 值。
表 2塔型格型矢量量化比特数与码本序号、 能量缩放因子及最大塔面能 量半径的对应关系
步骤 203b: 将能量规整后的矢量量化到格点上;
首先将能量规整后的矢量量化到格点上,然后 判断量化后的格点 的塔 面能量是否小于或等于编码码本中的最大塔面 能量半径, 如果是则执行步骤 203c, 否则对能量规整后的矢量进行能量截断后再进 行格点量化;
将能量规整后的 8维矢量 ¾L fe 量化到 /¾格点 上: : 其中, /¾ (·)表示将某个 8维矢量映射到 /¾格点的量化算子。 计算 /¾格点 的塔面能量并和编码码本中的最大塔面能量半 径进行比 较。 /¾格点 的塔面能量即 各分量绝对值之和。 编码码本是指所有用来 量化待量化矢量的 /¾格点的集合。
如果/ ¾格点¾^的塔面能量不大于最大塔面能量半径 flrgefOifex), 则 直接执行步骤 203c, 计算该格点在码本中的量化索引;
如果该格点 f 1 的塔面能量大于最大塔面能量半径,则将 该编码子带规整 后的待量化矢量 i¾ ∞fe 进行能量截断, 直到能量截断后的待量化矢量的量化 格点的能量不大于最大塔面能量半径; 这时对能量截断后的待量化矢量持续 增加其自身的一个小能量,直至其量化到 /¾格点的能量超过最大塔面能量半 径;取最后一个能量不超过最大塔面能量半径 的 /¾格点作为待量化矢量的量 化值, 即作为生成矢量量化索引的格点。
在格点 能量大于最大塔面能量半径时,对待量化矢量 进行能量截断的 具体过程可以用下面伪代码描述:
计算 /¾格点 的塔面能量, 即求 的各分量绝对值之和,
Ybak = Y J m
Kbak = temp _ K
If temp— K> LargeK(index)
While temp—K> LargeK(index)
Ybak = Y: r
Kbak = temp _ K
While temp_K<= LargeK(index)
Ybak = Y J m
Kbak - temp j , scale j , scale
temp _K = sum Ϋ.
Y 二
J m Ybak temp _K = Kbak 这时的 是最后一个能量不超过最大塔面能量半径的 /¾格点, temp _ K是该格点的能量。
步骤 203c : 计算/ ¾格点¾"在码本中的矢量量化索引;
计算 /¾格点 在码本中的矢量量化索引的步骤包括:
步骤 1: 根据塔面能量的大小, 分别对各个塔面上的格点进行标号。 对于维数为 L的整数格点网格 ZL , 定义能量半径为 f的塔面为:
S(L,K) = {Y = (y„y 2 ,...,y L )GZ L |∑\y t \=K} 记 N(J, Q为^; ^)中格点的个数, 对于整数格 ^来说, N(J, Q有如下的 递推关系: N(J,0) = 1 (L≥ 0), N(0,K) = 0 (K≥l)
N(L, K) = N(L - K) + N(L -1,^-1) + N(L, K-\) (L≥\K≥\) 对于能量半径为 K 的塔面上的整数格点; = (n...,_yj e z £ , 用
[0,1,....,NL,^)-1]中的某一个数 来标识, 并称 b为该格点的标号。 求解标号 b的步骤如下:
步骤 1.1: 令 b=0, i=l, k=K, l=L, 根据上述的递推公式, 计算 NO,«),
(m<=L,n<=K)。 定义: 步骤 1.2: 如果 =0, 则 b=b+0;
果
如果y,|>l, 则
l-sgn(^)
+ N(/— ΐϋ Ι)
2 步骤 1.3: k = 则停止搜索, b为 Y的 标号, 否则继续步骤 1.2)。
步骤 2: 对所有塔面上的格点进行统一标号。
根据各个塔面的格点数和每个格点在各自塔面 上的标号, 计算每个格点 在全体塔面中的标号:
index b(J, m) - b(J, w) V(8, kk) 其中, kk 为偶数, b(, )为 /¾格点^ 在自身所在塔面上的标号, 而 mdex b{j,m为 ¾^在码本中的索引。 也就是编码子带 中第 w个 8维矢量的 索引。 步骤 203d : 重复以上步骤 203a ~203c,直到所有编码比特大于 0但小于 阔值 5的编码子带的各个 8维矢量都完成矢量量化索引的计算;
步骤 204: 对高比特编码子带釆用球型格型矢量量化方法 进行量化; 高比特编码子带 j所分配到的比特数满足: 5〈=regwn bit j、 <=9。
此处同样釆用基于/ ¾格的 8维格型矢量量化。
对高比特编码子带的待量化矢量进行球型格型 矢量量化的过程包括: 步骤 204a: 对待量化矢量进行能量规整;
对编码子带 j的第 m个归一化后待量化矢量 1 进行如下能量规整:
™ = ^( y m -a) 其中 , a = (2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 ) ,
\
β =—— - ~~ ,
scale(region _ bit(j)) 而 scale(region _ bit(J 表示编码子带中单个频域系数的比特分配数为 region _bit(j)时的能量缩放因子, 根据表 3可查到它们的对应关系。
获得以下表 3的统计方法与获取表 2的统计方法相同。
表 3 球型格型矢量量化的比特分配数与能量缩放因 子的对应关系
步骤 204b: 将能量规整后的矢量量化到格点上, 判断量化格点值除以 2 的比特分配数次方 2 。 后再投影到量化格点的量化值, 即 / A (f/72 °"- ¾ίω )是否为零矢量, 如果是则执行步骤 204c, 否则对能量规整 后的矢量进行能量截断后再量化到格点上; 将编码子带 j中进行能量规整后的第 m个待量化矢量 映射到 /¾格点 上:
Ϋ; = f Ds (Yj m ) , 其中, /¾(·)表示将某个 8 维矢量映射到 ¾格点的量化 算子。
判断量化格点值除以 2 的比特分配数次方 2^。"- ωω 后再投影到量化格点 的量化值/ ^0^/2 σ " ίω )是否为零矢量, 即它的各个分量是否都为零, 如 果是则称为零矢量条件满足, 否则称为零矢量条件不满足。
如果零矢量条件满足, 直接执行步骤 204c; 如果零矢量条件不满足, 对能量规整后的矢量 进行能量截断, 本实 施例中将 的值除以 2, 直至零矢量条件/ A (f/72 °" ' ίω )=0成立; 并备份 Y m 自身的小倍数值为 w, 然后对能量截断后的矢量 加上备份的小倍数值 w, 再量化到 / ¾格点, 判断零矢量条件是否满足; 如果零矢量条件不满足, 则将最近满足零矢量条件的 /¾格点作为待量化矢量的量化格点,否则继续 对 矢量^ 增加备份的小倍数值 w, 然后再量化到 / ¾格点, 直至零矢量条件不 满足。
对待量化矢量进行能量截断的具体过程可以用 下面伪代码描述: temp _D = f Dg (7/ 12 region - bit(j) )
Ybak = Y j m
Dbak = temp _ D
While temp _D≠0
Y m =f Ds (Y m )
temp _D = f Dg (7/ 12 region - bit(j) )
Ybak = Ϋ Dbak - temp _ D
While temp _D = 0
Ybak = Ϋ" 7
Dbak = temp _ D
temp_D = f D (Y
Y m 二 Ybak 步骤 204c: 生成 D8格点 的矢量量化的索引矢量:
矢量量化的索引可由下面的索引矢量生成公式 得到:
k = ( '"G" 1 )mod2 输出此时 D8格点 7 ^的索引矢量 k,其中 G为/ ¾格点的生成矩阵,形式 如下:
2 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0
1 0 1 0 0 0 0 0
1 0 0 1 0 0 0 0
G =
1 0 0 0 1 0 0 0
1 0 0 0 0 1 0 0
1 0 0 0 0 0 1 0
1 0 0 0 0 0 0 1 步骤 205: 对低比特编码子带的矢量量化索引进行编码; 结束; 如上所述, 低比特编码子带 j所分配的比特数满足: l<=regwn bit( }<5' 对低比特编码子带的矢量量化索 I进行编码包括以下步骤:
步骤 205a: 对低比特编码子带的矢量量化索引进行霍夫曼 编码; 对单个频域系数的比特分配数小于某个阔值的 所有编码子带构成的集合
C 中的矢量量化索引进行霍夫曼编码; 根据塔型格型矢量量化方法得到各个 编码子带中每个 8维矢量的矢量量化索引 index {]',]ή, 其中 表示编码子带 的第 个 8维矢量。 对量化索引 zwifex— 进行霍夫曼编码包括以下情形: a: 在单个频域系数所分配到的比特数为大于 1小于 5但除去 2的所有编 码子带中, 对每个矢量量化索引的自然二进制码中每 4位分成一组并对其进 行霍夫曼编码, 所有 4位一组的霍夫曼编码比特数之和就是该量化 引的霍 夫曼编码的消耗比特数;
b: 在单个频域系数所分配到的比特数为 2的所有编码子带中, 对每个 8 维矢量的塔型格型矢量量化索引使用 15个比特进行编码;
将 15个比特分成 3组 4位比特和 1组 3位比特,然后对它们分别进行霍 夫曼编码, 4 组的霍夫曼编码比特消耗数之和就是该量化索 引的霍夫曼编码 消耗比特数;
c: 当编码子带的单个频域系数所分配到的比特数 为 1时, 如果量化索引 小于 127,则对量化索引使用 7个比特进行编码,把 7个比特分成 1组 3比特 和 1组 4比特, 分别对两组进行霍夫曼编码, 两组的霍夫曼编码比特消耗数 之和就是该量化索引的霍夫曼编码消耗比特数 ;
d: 当编码子带的单个频域系数所分配到的比特数 为 1时, 如果量化索引 等于 127, 则定义它的自然二进制码值为 "1111 1110", 把前面 7个 1分成 1 组 3比特和 1组 4比特, 分别对两组进行霍夫曼编码, 两组的霍夫曼编码比 特消耗数之和就是该量化索引的霍夫曼编码消 耗比特数;
e: 当编码子带的单个频域系数所分配到的比特数 为 1时, 如果量化索引 等于 128, 则定义它的自然二进制码值为 "1111 1111", 把前面 7个 1分成 1 组 3比特和 1组 4比特, 分别对两组进行霍夫曼编码, 两组的霍夫曼编码比 特消耗数之和就是该量化索引的霍夫曼编码消 耗比特数。
对量化索引进行霍夫曼编码的方法可用如下伪 代码描述:
在所有的 region—biti ) =1.5和 2〈region bit(j"}〈5的编码子带内 n在 [0, region bitij) x 8/4 - 1]的范围内, 步长为 1递增, 做如下循环:
将 index bij c)右移 4*"位,
计算 "ifex— b(, :)低 4比特位 i ;?, ^LtJt tmp = md(index b(jk), 15) 计算 tmp在码本中的码字及其比特消耗数:
plvq_codebook(/,^) = plvq_code(tmp+ 1 );
plvq_count(/,^) = plvq_bit_count(tmp+ 1 );
其中 plvq_codebook(,:)和 plvq_count(,:)分别为 _/子带第 个 8维矢量的 霍夫曼编码码本中的码字和比特消耗数; lvq_bit_count和 plvq_code根据表 4 查找。
更新釆用霍夫曼编码后的比特消耗总数:
bit used hufFall = bit used hufFall + plvq_bit_count(tmp+ 1 );
在 region bit( ) =2的编码子带内
n在 [0, region bitij) x 8/4 - 2]的范围内, 步长为 1递增, 做如下循环:
将 index bij c)^^ 4*"位,
计算 "ifex— b(, :)低 4比特位 i ;?, ^LtJt tmp = md(index b(jk), 15) 计算 tmp在码本中的码字及其比特消耗:
plvq_count(/,^) = plvq_bit_count (tmp+1);
plvq_codebook(/,^) = plvq_code (tmp+1);
其中 plvq_count(,A:), 和 plvq_codebook(,:)分别为 _/子带第 :个 8维矢量 的霍夫曼比特消耗数和码字; plvq_bit— count和 plvq_code根据表 4查找。 更新釆用霍夫曼编码后的比特消耗总数:
bit used hufFall = bit used hufFall + plvq_bit_count(tmp+ 1 );
下面需要处理一个 3比特情况:
在 index— b(j ,ΐή右移 [region— bit(f) x 8/4 - 2]*4位后,
计算 "ifex—b( , )低 3比特位 i/w?, 也就 tmp = and(index—b(JJc), 7) 计算 tmp在码本中的码字及其比特消耗:
plvq_count(/,^) = plvq_bit_count _r2_3(tmp+l);
plvq_codebook(/,^) = plvq_code _r2_3(tmp+l);
其中 plvq_count(,A:), 和 plvq_codebook(,:)分别为 _/子带第 :个 8维矢量 的霍夫曼比特消耗数和码字; plvq_bit— count— r2— 3和 plvq_code— r2— 3根据表 5 查找。
更新釆用霍夫曼编码后的比特消耗总数:
bit used hufFall = bit used hufFall + plvq_bit count(tmp+ 1 );
在 region—biti ) =1的编码子带内
如果
计算 "ifex— b(, :)低 4比特位 i ;?, 也就 tmp = a (index b(j'Jc), 15) 计算 tmp在码本中的码字及其比特消耗:
plvq_count(/,^) = plvq_bit_count— rl— 4(tmp+l);
plvq_codebook(/,^) = plvq_code— rl— 4(tmp+l);
其中 plvq_count( , :)和 plvq_codebook( , :)分别为 _/子带第 :个 8维矢量的 霍夫曼比特消耗数和码字; plvq_bit— count— rl— 4和 plvq_code— rl— 4根据表 6查 找。
更新釆用霍夫曼后的比特消耗总数:
bit used hufFall = bit used hufFall + plvq_bit_count(tmp+ 1 );
下面需要处理一个 3比特情况:
将 index b{j,k右 4位,
计算 "ifex—b( , )低 3比特位 i/w?, 也就 tmp = and(index—b(JJc), 7) 计算 tmp在码本中的码字及其比特消耗:
plvq_count(/,^) = plvq_bit_count— rl— 3(tmp+l);
plvq_codebook(/,^) = plvq_code _rl_3(tmp+l);
其中 plvq_count( , :)和 plvq_codebook( , :)分别为 _/子带第 :个 8维矢量的 霍夫曼比特消耗数和码字; 码本 plvq_bit— count— rl— 3和 plvq_code— rl— 3根据 表 7查找。
更新釆用霍夫曼后的比特消耗总数:
bit used hufFall = bit used hufFall + plvq_bit count(tmp+ 1 );
如果 它的二进制值为" 1111 1110
对于前三个 "1"和后四个 "1"分别查找表 7和表 6的霍夫曼码表 : 计算方法同前面 index b(j,k)< 下的情况.
更新釆用霍夫曼后的比特消耗总数: 总共需要 8个比特.
如果 index _b(j,k)=\2S
{ 它的二进制值为" 1111 1111"
对于前三个 "1"和后四个 "1"分别查找表 7和表 6的霍夫曼码表, 计算 方法同前面 index—b{j,k〈Un下的情况.
更新釆用霍夫曼后的比特消耗总数: 总共需要 8个比特.
表 4塔型矢量量化霍夫曼码表
10 5 25
11 5 18
12 5 9
13 5 14
14 5 2
15 4 15 表 5 塔型矢量量化霍夫曼码表
Tmp Plvq_bit_count_r2_3 plvq_code_r2_3
0 1 0
1 4 1
2 4 15
3 5 25
4 3 3
5 3 5
6 4 7
7 5 9
表 6塔型矢量量化霍夫曼码表
Tmp Plvq_bit— count— r 1—4 plvq_code_rl_4
0 3 7
1 5 13
2 5 29
3 4 14
4 4 3
5 4 6 6 4 1
7 4 0
8 4 8
9 4 12
10 4 4
1 1 4 10
12 4 9
13 4 5
14 4 1 1
15 4 2
表 7 塔型矢量量化霍夫曼码表
Tmp Plvq_bit_count_r 1—3 plvq_code_rl_3
0 2 1
1 3 0
2 3 2
3 4 7
4 4 15
5 3 6
6 3 4
7 3 3 对所有编码子带的塔型格型矢量量化索引进行 霍夫曼编码时, 根据编码 子带中单个频域系数所分配到的比特数, 对编码子带的矢量量化索引使用不 同的码本进行编码。
步骤 205b: 判断霍夫曼编码是否节省比特, 如果节省, 则对量化索引釆 用霍夫曼编码, 并执行步骤 205c, 否则对量化索引进行自然编码;
通过步骤 205a)计算得到属于 C中所有编码子带的 8维矢量的量化索引经 过霍夫曼编码后消耗比特的总数 Wt_¾«¾/_/ra# _a〃。 Ί bit—used—huff—all C 中所有编码子带所消耗比特数的总和 ∞(½ _½^_¾«^( ), j≡ C)进行比较,也 就是和 C中所有编码子带的频域系数个数和该编码子 中单个频域系数所分 配 比 特 数 乘 积 的 总 和 进行 比 较 ; 如 果 bit used huff all < sum(bit band used l j C) , 则传输霍夫曼编码后的量化索引的比特, 同时设 置频域系数霍夫曼编码标志 为 1 ; 否则, 对量化矢量索引进行 自然编码, 并设置频域系数霍夫曼编码标志 Flag huff j)lvq为 0。
步骤 205c: 进行比特分配修正, 并对修正了比特分配的编码子带再次进 行矢量量化和编码。
若频域系数霍夫曼编码标志 为 0 , 则不修正编码子带的比 特分配。 若频域系数霍夫曼编码标志 为 1 , 则利用霍夫曼编码 节省下来的比特对编码子带的比特分配进行 ^ί'爹正。
对编码子带的比特分配进行修正时, 在本实施例中, 低比特编码子带的 比特修正步长及比特修正后的重要性降低步长 均为 0.5;零比特编码子带和高 比特编码子带的比特增加步长及比特增加后的 重要性降低步长均为 1。
低比特编码子带指编码子带中每个频域系数分 配的比特数小于阔值的编 码子带, 高比特编码子带指编码子带中每个频域系数分 配的比特数大于或等 于阔值的编码子带。 零比特编码子带指编码子带中每个频域系数分 配的比特 数为零的编码子带。
如图 3所示, 步骤 205c的比特分配修正流程具体包括如下步骤: 步骤 301 : 计算霍夫曼编码节省的比特数 ½#, 令 cotmt=0:
diff _ huff = sum(bit _ band _ used (j), e C) - bit _ used _ huff _ all
如果 ½#大于零, 则表示霍夫曼编码能节省比特, 霍夫曼编码所 节省的比特数即对编码子带进行比特分配修正 时所能使用的比特数。
步骤 302: 在所有编码子带中寻找重要性最大的编码子带 ;
在各 0=0, ... , - 1 ) 中寻找最大值 用公式表示为: j k = arg ax[rk(j)]
y=o,--,i-i
步骤 303 :判断重要性最大的编码子带的比特分配数加 1( region— bitGk)+l ) 是否小于等于编码子带中单个频域系数所能分 配到的最大的编码比特数 MaxBit (如 MaxBit=9 ) , 如果是则执行步骤 304 , 否则将 j k 对应的编码子带 的重要性调整到最低(例如令 r^j k )= - 100 ) , 表示无需再对该编码子带的比 特分配值进行 ^ί'爹正, 并转向步骤 302。
如果重要性最大的编码子带所分配的比特数已 经达到可能分配给与的最 大值, 则将该编码子带的重要性调整到最低, 不再对该编码子带修正比特分 配值。
步骤 304: 判断 diff— huff - (region— bitGk)+l) x BandWidth(jk)是否大于等于
0 , 如果大于等于 0 , 表明节省的比特数足够该编码子带进行比特分 配修正, 则执行步骤 305 ; 否则结束比特分配修正流程。
步骤 305 : 判断比特分配数 r e g 0 « _ t )是否等于 0或大于等于阔值 5 , 如果是则执行步骤 306 , 否则执行步骤 307 ;
步骤 306: 修正编码子带 j k 的比特分配数 region _bit{j k ) , 使 region— bitGk)=region—bitGk)+l , 降低子带重要性 rk(j k )的值, 使 rk(j k )=rk(j k )-l ; 令比特分配修正迭代次数 count =count+\ ,并对编码子带 j k 重新进行矢量量化 和霍夫曼编码, 最后更新 diff— huff的值;
步骤 307: 修正编码子带 j k 的比特分配数 region _bit{j k ) , 使 region— bitGk)=region— bitGk)+0.5;降低子带重要性 rk(j k )的值, 使 rk(j k )=rk(j k )-0.5 ; 令 count=count+ 并对编码子带 j k 重新进行矢量量化和霍夫曼编码, 最后更 新 diff— huff的值;
对修正了比特分配的编码子带再次进行矢量量 化和编码, 如果霍夫曼编 码仍然比自然编码节省比特, 则将节省下来的比特进一步用于编码子带的比 特分配爹正。
步骤 308: 判断比特分配修正迭代次数 count是否小于 Maxcount, 如果 是, 则跳转至步骤 302 , 否则比特分配修正流程结束。
上述 Maxcount为比特分配修正迭代次数上限值,该值 编码比特流及其 釆样率决定, 本实施例中釆用 Maxcount=31。
步骤 206: 对高比特编码子带的矢量量化索弓 I进行编码。
高比特编码子带 j所分配的比特数满足: 5〈=regwn bit j、〈=9。
对编码比特数为 5到 9的编码子带中的 8维矢量进行量化后得到索引矢 量 ={1^1, k2, k3, k4, k5, k6, k7, k8} , 根据单个频域系数所分配到的比特数对 索引矢量 k的各个分量进行直接编码, 得到该矢量的编码比特。
根据统计结果可以看到, 在 32kHz釆样率 32kbps码率的条件下, 比特分 配数小于 5的编码子带占 96%左右。 也就是说, 使用塔型格型矢量量化方式 的概率在整个矢量量化中为 96%, 塔型格型矢量量化方式在本发明中占有极 系数的比特分配步长最低可以调整为半个比特 , 提高了比特的使用效率。 本 发明的低比特步长的塔型格型矢量量化方法的 格点标号算法复杂度低, 占用 存储空间少, 另外在高比特编码子带的球型格型矢量量化中 , 在码本扩展标 号上釆用新的判别准则, 可进一步降低格型矢量量化方法的算法复杂度 。
二、 解码方法
本发明格型矢量量化音频解码方法是编码方法 的逆过程, 包括:
A、 对待解码比特流中各幅值包络编码比特进行解 码, 得到各编码子带 的幅值包络量化指数;
B、对各编码子带进行比特分配, 根据各编码子带的比特分配数, 将编码 子带分成低比特编码子带和高比特编码子带, 对低比特编码子带进行解码和 塔型格型矢量量化的反量化及反归一化, 以及对高比特编码子带进行解码和 球型格型矢量量化的反量化及反归一化, 得到低比特编码子带和高比特编码 子带的频域系数; 其中, 所述低比特编码子带是指该编码子带中单个频 域系 数所分配到的比特数小于预设阔值的编码子带 , 所述高比特编码子带是指该 编码子带中单个频域系数所分配到的比特数大 于预设阔值的编码子带;
对各编码子带进行比特分配前, 先根据编码子带幅值包络值计算各编码 子带重要性的初始值, 再根据各编码子带的重要性对编码子带中每个 频域系 数进行比特分配, 在比特分配过程中, 比特分配步长及比特分配后重要性降 低的步长均是变化的。 在进行比特分配之后, 解码之前, 根据编码端的比特 分配修正迭代次数 count值和各编码子带的重要性, 对编码子带再进行 count 次比特分配爹正。
对低比特编码子带解码时, 根据编码端的频域系数霍夫曼编码标识对低 比特编码子带进行霍夫曼解码或直接解码得到 低比特编码子带的矢量量化索 引, 对所有矢量量化索引进行塔型格型矢量量化的 反量化, 得到该编码子带 的频域系数; 对高比特编码子带解码时, 直接进行自然解码得到高比特编码 子带的矢量量化索引,对所有矢量量化索引进 行球型格型矢量量化的反量化, 得到该编码子带的频域系数。
C、 对噪声填充后的频域系数进行修正离散余弦逆 变换(IMDCT ) , 得 到最终的音频信号。
图 4是本发明实施例一种格型矢量量化音频解码 法的结构示意图。 如 图 4所示, 该方法包括:
步骤 401 : 对各幅值包络编码比特进行解码得到各编码子 带的幅值包络 量化指数;
从编码端传送过来的编码比特流中 (即从比特流解复用器 DeMUX中) 提取一帧的编码比特; 提取出编码比特后, 首先对边信息进行解码, 然后根 据幅值包络霍夫曼编码标志 Flag— huff— rms的值对该帧中各幅值包络编码比特 进行霍夫曼解码或直接解码, 得到各编码子带的幅值包络量化指数 Th q G), J=0, ... ,L - L
步骤 402: 对各编码子带进行比特分配;
根据各编码子带的幅值包络量化指数计算出各 编码子带重要性初始值, 并利用编码子带重要性对各编码子带进行比特 分配, 得到编码子带的比特分 配数; 解码端的比特分配方法和编码端的比特分配方 法完全相同。 在比特分 配过程中,比特分配步长及比特分配后编码子 带重要性降低的步长是变化的。
在完成上述比特分配过程后,根据编码端的比 特分配修正迭代次数 count 值和各编码子带的重要性, 对编码子带再进行 count次比特分配修正, 然后 比特分配全过程结束。
在比特分配及修正过程中, 对比特分配数为 0的编码子带分配比特时的 比特分配步长及比特分配修正的步长是 1个比特, 比特分配及比特分配修正 后重要性降低的步长为 1, 对比特分配数大于 0且小于某个阔值的编码子带 追加分配比特时的比特分配步长及比特分配修 正的步长为 0.5 个比特, 比特 分配及比特分配修正后重要性降低的步长也为 0.5,对比特分配数大于等于该 阔值的编码子带追加分配比特时的比特分配步 长及比特分配修正的步长为 1, 比特分配及比特分配修正后重要性降低的步长 也为 1;
子带和高比特编码子带, 即判断编码子带 j所分配比特数 region— bitG)是否小 于预设阔值, 如果是, 则该编码子带为低比特编码子带, 执行步骤 404, 否 则该编码子带为高比特编码子带, 执行步骤 405;
步骤 404: 对低比特编码子带进行解码, 得到塔型格型矢量量化的索引, 计算塔型格型矢量量化的索引所对应的 /¾格点,并经过反归一化后得到低比 特编码子带的频域系数; 转向步骤 406;
根据边信息, 对低比特编码子带进行霍夫曼解码或者直接进 行自然解码 得到低比特编码子带的塔型格型矢量量化的索 引。
如果 Flag— huff_plvq=0, 直接进行自然解码得到低比特编码子带 j的第 m 个矢量量化的索引 index— bG,m), 如果 Flag— huff_plvq=l, 那么根据编码子带 单个频域系数的比特分配数所对应的霍夫曼编 码码表, 得到低比特编码子带 j的第 m个矢量量化的索引 index— bG,m);
当编码子带的单个频域系数所分配到的比特数 为 1时, 如果量化索引的 自然二进制码值小于 "1111 111", 则按照自然二进制码值计算量化索引; 如 果量化索引的自然二进制码值等于 "1111 111", 则继续读入下一位比特, 如 果下一位比特是 0, 则量化索引值为 127, 如果下一位比特是 1, 则量化索引 值为 128。
计算塔型格型矢量量化的索引所对应的 /¾格点的过程实际上是矢量量 化过程的逆过程, 塔型格型矢量量化的反量化过程如下: 步骤 404a) 确定矢量量化索引所在的能量塔面及在该能量 塔面上的标 号:
在塔面能量从 2到 LargeK(region— bitG))中寻找 kk, 使得下面的不等式满 足:
N(8,kk) <= index— bG,m) < N(8,kk+2),
如果找到这样的 kk, 则 K=kk为量化索引 index— bG,m) 所对应 D 8 格点所 在塔面的能量, b= index— bG,m)-N(8,kk)为该 D 8 格点在所在塔面上的索引标号; 如果找不到这样的 kk,则量化索引 index— bG,m) 所对应 D 8 格点的塔面能 量 K=0及索引标号 b=0;
步骤 404b) 求解塔面能量为 K和索引标号为 b的 D 8 格点矢量丫=^1, y2 y3, y4, y5, y6, y7, y8,)的具体步骤如下:
步骤 1: 令 Y=(0,0,0,0,0,0,0,0), xb=0, i=l, k=K, 1=8;
步骤 2: 如果 b=xb那么 yi=0;跳转至步骤 6;
步骤 3: 如果 b<xb+N(l-l,k), 则 yi=0,跳转至步骤 5;
否则 , xb=xb+N(l-l ,k);令 j=l;
步骤 4: 如果 b<xb+2*N(l-l,k-j),则
^口果 xb<=b<xb+N(l-l,k-j), 则 yi=j;
如果 b>=xb+N(l-l,k-j), 则 yi=-j , xb=xb+N(l-l, k-j); 否则 xb=xb+2*N(l-l, k-j)J=j+l ; 继续本步骤;
步骤 5: 更新 k=k-|yi|, 1=1-1, i=i+l , 如果 k>0, 则跳转到步骤 2;
步骤 6: 如果 k>0, 则 y8=k-| yi| , Y=( yl, y2, ... , y8)为所求格点。
步骤 404c)对所求 D 8 格点进行能量反规整, 得到
Y 1 = {Υ + Ά) Ι scale{index)
其中, a = (2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 ) , scale{index)是缩放因子, 可从 表 2查找到。
步骤 404d)对 进行反归一化处理,得到解码端恢复出的编码 子带 j的 第 m个矢量的频域系数: j ― j
其中, 7¾(/)为第 j个编码子带的幅值包络量化指数。
步骤 405: 对高比特编码子带进行解码、 球型格型矢量量化的反量化及 反归一化, 得到高比特编码子带的频域系数;
对高比特编码子带的编码比特直接进行自然解 码得到高比特编码子带 _; 的第 m个索引矢量 k,对该索引矢量进行球型格型矢量量化的反量 过程实 际上是量化过程的逆过程, 具体步骤如下:
步骤 405a)计算 x=k*G, 并计算 _yte /?=x/(2 A (rego«— 其中, k为 矢量量化的索引矢量, r e g 0 «_ t /)表示编码子带 j中单个频域系数的比特分 配数; G为/ ¾格点的生成矩阵, 形式如下:
2 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0
1 0 1 0 0 0 0 0
1 0 0 1 0 0 0 0
G =
1 0 0 0 1 0 0 0
1 0 0 0 0 1 0 0
1 0 0 0 0 0 1 0
1 0 0 0 0 0 0 1 步骤 405b )计算 _y=x-/ D8 (yte /?)* (2 A (region_bit(j));
步骤 405c)对所求 D 8 格点进行能量反规整, 得到
、
Y m =y* scale(region—bit(j ) /(2 + a
其中, a = (2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 ) , scak(region _ bit(j))是缩放因 子, 可从表 3查找到。
步骤 405d)对 进行反归一化处理,得到解码端恢复出的编码 子带 j的 第 m个矢量的频域系数:
ThAj)l2
X m = 2 其中, 7¾(/)为第 j个编码子带的幅值包络量化指数。 步骤 406: 将各编码子带的频域系数按频率大小顺序排列 , 对编码过程 中未分配编码比特的子带或传输过程中丟失了 的子带进行噪声填充和带宽扩 展;
步骤 407: 对噪声填充和带宽扩展后的频域系数进行 IMDCT ( Inverse Modified Discrete Cosine Transform,修正离散余弦逆变换), 得到最终的音频 输出信号。
三、 编码系统
为实现以上编码方法,本发明还提供了一种格 型矢量量化音频编码系统, 如图 5所示, 该系统包括修正离散余弦变换(MDCT )单元 51、 幅值包络计 算单元 52、 幅值包络量化和编码单元 53、 比特分配单元 54、 归一化处理单 元 55、 分类格型矢量量化和编码单元 56和比特流复用器(MUX ) 57; 其中:
MDCT单元设置为,对音频信号进行修正离散 弦逆变换变换生成频域 系数;
幅值包络计算单元, 与所述 MDCT单元连接, 并设置为, 将所述 MDCT 生成的频域系数划分为若干个编码子带, 并计算各编码子带的幅值包络值; 幅值包络计算单元划分编码子带时,将所述 MDCT变换后的频域系数分 成若干个等间隔的编码子带, 或者按照听觉感知特性划分成若干个非均匀编 码子带。
幅值包络量化和编码单元, 与所述幅值包络计算单元连接, 并设置为, 将各编码子带的幅值包络值进行量化和编码, 生成各编码子带幅值包络的编 码比特;
比特分配单元, 与所述幅值包络量化和编码单元连接, 并设置为, 进行 比特分配, 得到各编码子带中为每个频域系数所分配的编 码比特数;
具体地, 比特分配单元包括相连接的重要性计算模块及 比特分配模块, 其中:
重要性计算模块设置为 , 根据编码子带幅值包络值计算各编码子带重要 ')·生的初始值; 所述比特分配模块设置为, 根据各编码子带的重要性对编码子带中每个 频域系数进行比特分配, 且在比特分配过程中, 比特分配步长及比特分配后 重要性降低的步长均是变化的。
所述重要性初始值是根据最大量化信噪比增益 条件下的最佳比特值和符 合人耳感知特性的比例因子计算的, 或者是各编码子带幅值包络的量化指数 或 ' 其中 μ >ο, μ和 V均为实数。
所述重要性计算模块是设置为, 计算所述重要性初始值时, 先计算单个 频域系数的比特消耗平均值; 再根据码率失真理论计算在最大量化信噪比增 益条件下的最佳比特值; 之后再根据所述比特消耗平均值及最佳比特指 计算 各编码子带在比特分配中的重要性初始值;
所述比特分配模块是设置为 , 根据各编码子带的重要性对各编码子带进 行比特分配: 增加重要性最大的编码子带中每个频域系数的 编码比特数, 并 降低该编码子带的重要性; 直至所有编码子带所消耗比特数的总和满足可 提 供比特限制条件下的最大值。
所述比特分配模块进行比特分配时, 低比特编码子带的比特分配步长及 比特分配后的重要性降低步长小于零比特编码 子带和高比特编码子带的比特 分配步长及比特分配后的重要性降低步长。 如: 所述比特分配模块进行比特 分配时, 低比特编码子带的比特分配步长及比特分配后 的重要性降低步长均 为 0.5;零比特编码子带和高比特编码子带的比特 配步长及比特分配后的重 要性降低步长均为 1。
归一化处理单元, 与 MDCT单元连接, 并设置为, 使用编码子带的量化 幅值包络值对各编码子带中所有频域系数进行 归一化处理;
分类格型矢量量化和编码单元, 与所述归一化处理单元及比特分配单元 连接, 并设置为, 对低比特编码子带和高比特编码子带中的归一 化后的待量 化矢量分别使用塔型格型矢量量化方法和球型 格型矢量量化方法进行量化和 编码, 得到频域系数的编码比特; 其中, 所述低比特编码子带是指该编码子 带中单个频域系数所分配到的比特数小于预设 阔值的编码子带, 所述高比特 编码子带是指该编码子带中单个频域系数所分 配到的比特数大于或等于预设 阔值的编码子带; 比特流复用器(MUX ) , 与所述幅值包络量化和编码单元以及分类格型 矢量量化和编码单元连接, 并设置为, 将各编码子带的编码比特以及频域系 数的编码比特复用并发送到解码端。
以下结合图 6对分类格型矢量量化和编码单元进行详细描 :
如图 6所示, 分类格型矢量量化和编码单元包括分类处理模 块 61、 塔型 格型矢量量化模块 62、 球型格型矢量量化模块 63、 编码类型判断模块 64、 霍夫曼编码模块 65、 自然编码模块 66及比特分配修正模块 67 , 其中:
分类处理模块, 与所述归一化处理单元连接, 并设置为, 对归一化后的 频域系数进行分组形成 8维待量化矢量, 将低比特编码子带归一化后的待量 化矢量转给塔型格型矢量量化模块; 以及将高比特编码子带归一化处理后的 待量化矢量转给球型格型矢量量化模块处理;
塔型格型矢量量化模块, 与所述分类处理模块连接, 并设置为, 对各低 比特编码子带归一化处理后的待量化矢量进行 塔型格型矢量量化, 该塔型格 型矢量量化模块包括第一能量规整子模块 621、 第一格点量化子模块 622、 第 一能量调整子模块 623及量化索引计算子模块 624 , 其中:
第一能量规整子模块, 设置为对编码子带中的 8维待量化矢量进行能量 规整;
所述第一能量规整子模块还设置为, 对所述 8维待量化矢量进行能量规 整时, 先根据所述 8维待量化矢量所在编码子带 j中单个频域系数所分配到 的比特数 reg o«— bz ( ),从前述表 2中查询到该比特数所对应的码本序号 index 和能量缩放因子 scale; 然后根据下面的公式对待量化矢量进行能量规 整:
YZ cale = (Y; - ^ scale(index) 其中, 1 表示编码子带 中第 个归一化后的待量化 8维矢量, ¾ ∞fe 表 示对】 进行能量规整后的 8维矢量, a = (2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 ) ;
第一格点量化子模块, 与所述第一能量规整子模块连接, 并设置为将 8 维待量化矢量量化到 /¾格点;
所述第一格点量化子模块进行格点量化时, 釆用以下公式将 8 维矢量 量化到 A格点 上: 其中, /¾ (·)表示将某个 8维矢量映射到 /¾格点的量化算子;
第一能量调整子模块, 与所述第一格点量化子模块连接, 并设置为将/ ¾ 格点的能量和编码码本中的最大塔面能量半径 进行比较, 如果小于或等于最 大塔面能量半径,则通知所述量化索引计算子 模块计算所述/ ¾格点在码本中 的量化索引; 如果大于最大塔面能量半径, 还用于将该编码子带规整后的待 量化矢量进行能量截断, 并通知所述第一格点量化子模块将能量截断后 的待 量化矢量量化到 /¾格点,直至能量截断后的待量化矢量的量化 格点的能量不 大于最大塔面能量半径, 同时对能量截断后的待量化矢量持续增加其自 身的 一个小能量, 并通知所述第一格点量化子模块将增加小能量 后的待量化矢量 量化到 / ¾格点, 直至其量化到的 / ¾格点的能量超过最大塔面能量半径, 还 用于通知量化索引计算子模块计算最后一个能 量不超过最大塔面能量半径的 D,格点在码本中的量化索引;
量化索引计算子模块, 与所述第一能量调整子模块连接, 并设置为根据 第一能量调整子模块的通知计算所述/ ¾格点在码本中的量化索引。
量化索引计算子模块是设置为,计算 /¾格点 在码本中的量化索引时, 先根据塔面能量的大小, 分别对各个塔面上的格点进行标号, 再在所有塔面 上对该格点进行统一标号, 该统一标号即 /¾格点 在码本中的量化索引。
球型格型矢量量化模块, 与所述分类处理模块相连接, 并设置为, 对高 比特编码子带归一化处理后的待量化矢量进行 球型格型矢量量化, 该球型格 型矢量量化模块包括第二能量规整子模块 631、 第二格点量化子模块 632、零 矢量条件判断子模块 633、 第二能量调整子模块 634及索引矢量计算子模块 635 , 其中:
第二能量规整子模块设置为, 对编码子带中的 8维待量化矢量进行能量 规整;
所述第二能量规整子模块, 对所述 8维待量化矢量进行能量规整时, 先 根据待量化矢量 所在编码子带 J 中单个频域系数所分配到的比特数 region—biti ) , 查询到该比特数所对应和能量缩放因子 scale(region _bit(j ); 然 后根据下面的公式第 m个对待量化矢量 1 进行能量规整:
™ = ^( y m -a) 其中, 】 表示编码子带 j 中第 m 个归一化后的 8 维待量化矢量, a = (2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 ) ,
\
β =—— - ~~ ,
scale(region _ bit(j))
而 scale(region _ bit(J )表示编码子带中单个频域系数的比特分配数 region _bit(j)时的能量缩放因子, 根据表 3可查到它们的对应关系;
第二格点量化子模块, 与所述第二能量规整子模块连接, 并设置为将 8 维待量化矢量量化到 /¾格点;
所述第二格点量化子模块釆用以下公式将编码 子带 中第 m个待量化矢 量 ^映射到 /¾的格点 上:
零矢量条件判断子模块, 与所述第二格点量化子模块连接, 并设置为判 断所述/ ¾格点是否满足零矢量条件, 具体包括, 能量规整后的格点满足零矢 量条件时, 通知索引矢量计算子模块计算所述格点的索引 矢量; 能量规整后 的格点不满足零矢量条件时, 通知所述第二能量调整子模块; 所述零矢量条 件是指将通过矢量量化得到的 /¾格点值除以 2的比特分配数次方 2^。"- ωω 后 再投影到/ ¾格点, 投影的/ ¾格点值是零矢量, 其中 Γ^ο« _½( ·)表示第 _;个 编码子带中单个频域系数所分配到的比特数;
第二能量调整子模块, 与所述零矢量条件判断子模块及第二格点量化 子 模块连接, 并设置为将待量化矢量的值进行截断, 并通知所述第二格点量化 子模块将能量截断后的待量化矢量量化到 ¾格点, 直至零矢量条件满足; 还 设置为备份待量化矢量自身的小倍数值 W, 对能量截断后的待量化矢量加上 备份的小倍数值 w, 以及通知所述第二格点量化子模块将能量截断 后的待量 化矢量量化到/ ¾格点, 直至零矢量条件不满足, 还设置为通知索引矢量计算 子模块计算最近满足零矢量条件的 /¾格点的索引矢量; 索引矢量计算子模块, 与所述零矢量条件判断子模块及第二能量调整 子 模块连接, 并设置为根据零矢量条件判断子模块及第二能 量调整子模块的通 知计算所述/ ¾格点在码本中的量化索引。 所述索引矢量计算子模块, 依据以下公式计算出第 ·个编码子带的第 m 个矢量被量化到 /¾格点 ^的矢量量化索引矢量 k:
k = (f j m G- 1 ) mod 2 reg,on - b,tU)
其中 region _bit(、表示编码子带 j中单个频域系数的比特分配数; G为/ ¾ 格点的生成矩阵, 形式如下:
2 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0
1 0 1 0 0 0 0 0
1 0 0 1 0 0 0 0
G =
1 0 0 0 1 0 0 0
1 0 0 0 0 1 0 0
1 0 0 0 0 0 1 0
1 0 0 0 0 0 0 1 编码类型判断模块, 与塔型格型矢量量化模块连接, 并设置为, 判断所 有低比特编码子带的量化索引经过霍夫曼编码 后所消耗比特的总数是否小于 所有低比特编码子带的量化索引自然编码所需 要的比特数总数, 如果是, 则 通知霍夫曼编码模块及比特分配修正模块; 否则通知自然编码模块;
霍夫曼编码模块,设置为对低比特编码子带的 量化索引进行霍夫曼编码, 并设置频域系数霍夫曼编码标识为已使用霍夫 曼编码;
所述霍夫曼编码模块对所有低比特编码子带的 量化索引进行霍夫曼编码 时:
在单个频域系数所分配到的比特数为大于 1小于 5但除去 2的所有编码 子带中, 对每个矢量量化索引的自然二进制码中每 4位分成一组并对其进行 霍夫曼编码, 所有 4位一组的霍夫曼编码比特数之和就是该量化 引的霍夫 曼编码的消耗比特数;
在单个频域系数所分配到的比特数为 2的所有编码子带中, 对每个 8维 矢量的塔型格型矢量量化索引使用 15个比特进行编码, 将 15个比特分成 3 组 4位比特和 1组 3位比特,然后对它们分别进行霍夫曼编码, 4组的霍夫曼 编码比特消耗数之和就是该量化索引的霍夫曼 编码消耗比特数;
当编码子带的单个频域系数所分配到的比特数 为 1时, 如果量化索引小 于 127 ,则对量化索引使用 7个比特进行编码,把 7个比特分成 1组 3比特和 1组 4比特, 分别对两组进行霍夫曼编码, 两组的霍夫曼编码比特消耗数之 和就是该量化索引的霍夫曼编码消耗比特数;
当编码子带的单个频域系数所分配到的比特数 为 1时, 如果量化索引等 于 127 , 则定义它的自然二进制码值为 "1111 1110", 4巴前面 7个 1分成 1组 3比特和 1组 4比特, 分别对两组进行霍夫曼编码, 两组的霍夫曼编码比特 消耗数之和就是该量化索引的霍夫曼编码消耗 比特数;
当编码子带的单个频域系数所分配到的比特数 为 1时, 如果量化索引等 于 128, 则定义它的自然二进制码值为 "1111 1111", 4巴前面 7个 1分成 1组 3比特和 1组 4比特, 分别对两组进行霍夫曼编码, 两组的霍夫曼编码比特 消耗数之和就是该量化索引的霍夫曼编码消耗 比特数。
所述霍夫曼编码模块对所有低比特编码子带的 的量化索引进行霍夫曼编 码时, 根据编码子带中单个频域系数所分配到的比特 数, 对编码子带的矢量 量化索引使用不同的码本进行编码。
自然编码模块, 设置为对低比特编码子带的量化索引及高比特 编码子带 的索引矢量进行自然编码;
比特分配修正模块, 设置为利用霍夫曼编码节省下来的比特对编码 子带 的比特分配进行修正, 以及通知所述分类处理模块对修正了比特分配 的编码 子带分类后, 再次进行矢量量化和编码。
所述比特分配修正模块进行比特分配时, 在所有编码子带中寻找重要性 最大的编码子带, 如果该编码子带所分配的比特数已经达到可能 分配给与的 最大值, 则将该编码子带的重要性调整到最低, 不再对该编码子带修正比特 分配数, 否则对该重要性最大的编码子带进行比特分配 修正;
在比特分配修正过程中, 对比特分配数为 0的编码子带分配 1个比特, 比特分配后重要性降低 1 ; 对比特分配数大于 0且小于 5的编码子带分配 0.5 个比特, 比特分配后重要性降低 0.5; 对比特分配数大于 5的编码子带分配 1 个比特, 比特分配后重要性降低 1。
所述比特分配修正模块每修正一次比特分配时 , 将比特分配修正迭代次 数 count加 1 , 当比特分配修正迭代次数 count达到预设上限值或能够使用的 比特数小于比特分配修正所需要的比特数时, 结束比特分配修正流程。
比特流复用器对编码后的比特复用打包的顺序 依次为幅值包络霍夫曼编 码标识、 频域系数霍夫曼编码标识、 比特分配修正迭代次数、 幅值包络的编 码比特、 频域系数的编码比特。
四、 解码系统
为了实现以上解码方法, 本发明还提供了一种格型矢量量化音频解码系 统, 如图 7所示, 该系统包括比特流解复用器(DeMUX ) 71、 编码子带幅值 包络解码单元 72、 比特分配单元 73、 频域系数解码单元 74、 分类格型矢量 反量化单元 75、 反归一化处理单元 76、 噪声填充单元 77、 修正离散余弦逆 变换(IMDCT )单元 78 , 其中:
比特流解复用器(DeMUX )设置为, 从待解码比特流中分离出边信息、 幅值包络编码比特、 频域系数编码比特;
幅值包络解码单元, 与所述比特流解复用器连接, 并设置为对所述比特 流解复用器输出的幅值包络的编码比特进行解 码, 得到各编码子带的幅值包 络量化指数; 比特分配单元, 与所述编码子带幅值包络解码单元连接, 并设置为进行 比特分配, 得到各编码子带中为每个频域系数所分配的编 码比特数;
比特分配单元包括重要性计算模块及比特分配 模块及比特分配修正模 块, 其中:
重要性计算模块设置为根据编码子带幅值包络 值计算各编码子带重要性 的初始值;
所述比特分配模块设置为根据各编码子带的重 要性初始值对编码子带中 每个频域系数进行比特分配, 且在比特分配过程中, 比特分配步长及比特分 配后重要性降低的步长均是变化的; 比特分配修正模块, 设置为在进行比特分配之后, 根据编码端的比特分 配修正迭代次数 count值和各编码子带的重要性,对编码子带再 行 count次 比特分配修正。
所述比特分配模块进行比特分配时, 低比特编码子带的比特分配步长及 比特分配后的重要性降低步长小于零比特编码 子带和高比特编码子带的比特 分配步长及比特分配后的重要性降低步长。
所述比特分配修正模块进行比特修正时, 低比特编码子带的比特修正步 长及比特修正后的重要性降低步长小于零比特 编码子带和高比特编码子带的 比特修正步长及比特修正后的重要性降低步长 。
频域系数解码单元, 与幅值包络解码单元和比特分配单元连接, 并设置 为, 对低比特编码子带解码得到低比特编码子带的 量化索引; 以及对高比特 编码子带进行解码得到高比特编码子带的索引 矢量, 其中, 所述低比特编码 子带是指该编码子带中单个频域系数所分配到 的比特数小于预设阔值的编码 子带, 所述高比特编码子带是指该编码子带中单个频 域系数所分配到的比特 数大于或等于预设阔值的编码子带;
所述频域系数解码单元, 对低比特编码子带解码时, 根据编码端的频域 系数霍夫曼编码标识对低比特编码子带进行霍 夫曼解码或直接解码得到低比 特编码子带的矢量量化索引; 对高比特编码子带解码时, 直接解码得到高比 特编码子带的矢量量化索引。
所述频域系数解码单元对低比特编码子带进行 霍夫曼解码方法时, 当编 码子带的单个频域系数所分配到的比特数为 1时, 如果量化索引的自然二进 制码值小于 "1111 111", 则按照自然二进制码值计算量化索引; 如果量化索 引的自然二进制码值等于 "1111 111", 则继续读入下一位比特, 如果下一位 比特是 0, 则量化索引值为 127, 如果下一位比特是 1 , 则量化索引值为 128。
分类格型矢量反量化单元, 设置为对低比特编码子带的量化索引进行塔 型格型矢量量化的反量化, 以及对高比特编码子带的索引矢量进行球型格 型 矢量量化的反量化;
反归一化处理单元, 设置为对编码子带反量化后的值进行反归一化 , 得 到频域系数;
具体地, 对 进行反归一化处理, 得到解码端恢复出的编码子带 j的第 m个矢量的频域系数: j ― j
其中, 7¾(/)为第 j个编码子带的幅值包络量化指数。
噪声填充单元, 设置为对反归一化处理单元输出的频域系数输 出值中未 分配比特的子带进行噪声填充;
修正离散余弦逆变换(IMDCT )单元, 与所述噪声填充单元连接, 并 设置为对噪声填充后的频域系数进行 IMDCT, 得到音频信号。
以下结合图 8对分类格型矢量量化反量化单元进行详细说 :
如图 8所示, 分类格型矢量量化反量化单元包括分类处理模 块 81、 塔型 格型矢量量化反量化模块 82及球型格型矢量量化反量化模块 83 , 其中: 分类处理模块, 设置为将低比特编码子带的量化索引转给塔型 格型矢量 量化反量化模块处理; 以及将高比特编码子带的索引矢量转给球型格 型矢量 反量化模块处理;
塔型格型矢量量化反量化模块, 设置为塔型格型矢量量化反量化模块对 低比特编码子带的量化索引进行反量化; 该塔型格型矢量量化反量化模块 82 包括相连接的第一格点反量化子模块 821及第一能量反规整子模块 822, 其 中:
第一格点反量化子模块, 设置为确定低比特编码子带的量化索引所在 的能量塔面及在该能量塔面上的标号, 以及进一步求解对应的 D 8 格点;
第一能量反规整子模块, 设置为对所求 D 8 格点进行能量反规整, 得到 Y 1 = {Υ + Ά) Ι scale{index) 其中, a = (2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 ) , scale(index)是缩放因子。
球型格型矢量量化反量化模块, 设置为对高比特编码子带的索引矢量进 行反量化;该球型格型矢量反量化模块 83包括相连接的第二格点反量化子模 块 831及第二能量反规整子模块 832, 其中: 第二格点反量化子模块,设置为求解索引矢量 对应的 /¾格点,具体包括: 计算 x=k*G,
并计算 ytenp=xl (2 A (region_b it{j)); y=x-f m (ytenp)* (2 A (region_b it{j)); 其中, k为矢量量化的索引矢量, r e g 0 «_ t( )表示编码子带 j 中单个频 域系数的比特分配数; G为/ ¾格点的生成矩阵, 形式如下:
第二能量反规整子模块 ^设置为对所求 D 8 格点进行能量反规整, 得到
、
Y m = y * scale(region—bit(j ) /(2 + a
其中, a = (2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 , 2- 6 ) , scak(region _ bit(j))是缩放因
本发明格型矢量量化音频编解码方法和系统 充分考虑语音信源的分布特 性, 釆用一种融合型格型矢量量化方式对待量化矢 量进行量化, 具体根据编 码子带的比特分配数, 对低比特编码子带和高比特编码子带分别使用 塔型格 型矢量量化方式和球型格型矢量量化方式, 并在解码时釆用编码的逆过程, 从而获得较好的音频信源编码效果。 另外, 在比特分配时釆用了变步长的比 特分配方式, 单个频域系数的比特分配步长最低可以调整为 半个比特, 提高 了比特的使用效率。 同时设计出低比特步长的塔型格型矢量量化器 , 其格点 标号算法复杂度低, 也减少存储空间, 另外在高比特编码子带的球型格型矢 量量化中, 在码本扩展标号上釆用新的判别准则, 可进一步降低格型矢量量 化器的算法复杂度。 在编码过程中还设计出了节省比特的算法。
本领域普通技术人员可以理解上述方法中的全 部或部分步骤可通过程序 来指令相关硬件完成, 所述程序可以存储于计算机可读存储介质中, 如只读 存储器、 磁盘或光盘等。 可选地, 上述实施例的全部或部分步骤也可以使用 一个或多个集成电路来实现。 相应地, 上述实施例中的各模块 /单元可以釆用 硬件的形式实现, 也可以釆用软件功能模块的形式实现。 本发明不限制于任 何特定形式的硬件和软件的结合。
工业实用性 本发明提供的格型矢量量化音频编解码方法和 系统, 充分考虑了语音信 源的分布特性, 釆用一种融合型格型矢量量化方式对待量化矢 量进行量化, 具体根据编码子带的比特分配数, 对低比特编码子带和高比特编码子带分别 使用塔型格型矢量量化方式和球型格型矢量量 化方式, 并在解码时釆用编码 的逆过程, 从而获得较好的音频信源编码效果。 另外, 在比特分配时釆用了 变步长的比特分配方式, 单个频域系数的比特分配步长最低可以调整为 半个 比特, 提高了比特的使用效率。 同时设计出低比特步长的塔型格型矢量量化 器, 其格点标号算法复杂度低, 存储空间少, 另外在高比特编码子带的球型 格型矢量量化中, 在码本扩展标号上釆用新的判别准则, 可进一步降低格型 矢量量化器的算法复杂度。
