用于通过应用分布量化和编码分裂音频信号包络的音频信号包络编码、处理和解码的装...的制作方法_5

文档序号:9583663阅读:来源:国知局
N的形式存储由总位置数指示的帧中包含的可能分裂点位置的总数。
[0309] 在步骤120,对所有可能的分裂点位置,用0对spS印Data[t]的值进行初始化。比 特数组spS印Data为待被生成的输出数据。它指示对于每个可能的分裂点位置t,可能的分 裂点位置是否包括分裂点(spSepData[t] = 1)或者是否不包括分裂点(spSepData[t]= 〇)。在步骤120,以0对所有可能的分裂点位置的相应值进行初始化。
[0310] 在步骤130,用值N-1对变量k进行初始化。在此实施例中,N个可能的分裂点位 置的编号为〇, 1,2,…,N-1。设置k=N-1,意味着首先考虑具有最高编号的可能的分裂点 位置。
[0311] 在步骤140,考虑是否k彡0。如果k〈0,分裂点位置的解码已经完成,且过程终止, 否则以步骤150继续过程。
[0312] 在步骤150,测试是否p>k。如果p大于k,这意味着所有剩余的可能分裂点位 置包括分裂点。在步骤230处继续过程,其中,剩余的可能分裂点位置1,…,k的所有的 spSepData字段值被设置为1,指示剩余的可能分裂点位置中的每个包括分裂点。在此情形 下,过程随后终止。然而,如果步骤150发现p不大于k,则在步骤160中继续解码过程。
[0313] 在步骤160,计算值e=c被用作阈值。
[0314] 在步骤170,测试分裂点状态数s的实际值是否大于或等于c,其中c为刚在步骤 160中计算的阈值。
[0315] 如果s小于c,这意味着,考虑的可能的分裂点位置(具有分裂点k)不包括分裂 点。在此情形下,无需采取进一步的动作,因为对于此可能分裂点位置,已经在步骤140中 将spS印Data[k]设置为0。然后以步骤220继续过程。在步骤220,k被设置为k: =k-l, 且考虑下一个可能的分裂点位置。
[0316] 然而,如果在步骤170的测试显示s大于或等于c,这意味着,考虑的可能的分裂 点位置k包括分裂点。在此情形下,在步骤180中更新分裂点状态数s,并将其设置为值s: =S-C。此外,在步骤190中将spSepData[k]设置为1,以指示可能的分裂点位置k包括分 裂点。此外,在步骤200,p被设置为p-1,指示待被检查的剩余的可能分裂点位置现在仅包 括p-1个具有分裂点的可能分裂点位置。
[0317] 在步骤210,测试p是否等于0。如果p等于0,剩余的可能分裂点位置不包括分裂 点,且解码过程完成。
[0318] 否则,剩余的可能分裂点位置中的至少一个包括事件,且在步骤220中继续过程, 在步骤220中,以下一个可能的分裂点位置(k-Ι)继续解码过程。
[0319] 图9中所示的实施例的解码过程生成数组spS印Data作为输出值,该输出值指示 对于每个可能的分裂点位置k,可能的分裂点位置是否包括分裂点(spS印Data[k] = 1)或 是否不包括(spSepData[k] = 0)。
[0320] 图10示出根据一实施例的实现对分裂点位置进行编码的伪代码。
[0321] 图11示出根据一实施例的用于对分裂点进行编码的编码过程。在此实施例中,在 一个位置接一个位置的基础上执行编码。根据图11所示的实施例的编码过程的目的在于 生成分裂点状态数。
[0322] 在步骤310,对值进行初始化。用0对p_s进行初始化。通过连续地更新变量p_ s,生成分裂点状态数。当编码过程完成时,P_s将携带分裂点状态数。步骤310也通过将k 设置为k:=分裂点数-1,对变量k进行初始化。
[0323] 在步骤320,将变量"pos"设置为pos:=spPos[k],其中spPos为容纳包括分裂 点的可能分裂点位置的位置的数组。
[0324] 数组中的分裂点位置以升序存储。
[0325] 在步骤330,进行测试,测试是否k多pos。如果此情形成立,则过程终止。否则, 在步骤340中继续过程。
[0326] 在步骤340,计算值e
[0327] 在步骤350,更新变量p_s,并将其设置为p_s: =p_s+c。
[0328] 在步骤360,将k设置为k: =k-1。
[0329] 然后,在步骤370,进行测试,测试是否k多0。在此情形下,考虑下一个可能的分 裂点位置k-Ι。否则,过程终止。
[0330] 图12描述根据本发明的实施例的实现对分裂点位置进行编码的伪代码。
[0331] 图13示出根据一实施例的分裂点解码器410。
[0332] 将指示可能的分裂点位置的总数的总位置数FSN、指示分裂点的(总)数量的分裂 点数ES0N以及分裂点状态数ESTN提供至分裂点解码器410。分裂点解码器410包括分裂 器440。分裂器440适于将帧分裂成包括可能的分裂点位置的第一集合的第一分区和包括 可能的分裂点位置的第二集合的第二分区,且其中为每个分区,单独地确定包括分裂点的 可能分裂点位置。由此,通过重复地将分区分裂成更小的分区,可以确定分裂点的位置。
[0333] 此实施例的分裂点解码器410的"基于分区"的解码基于以下构思:
[0334] 基于分区的解码基于此想法:所有可能的分裂点位置的集合被分裂成两个分区A 和B,每个分区包括可能的分裂点位置的集合,其中分区A包括Na个可能的分裂点位置,且 其中分区B包括Nb个可能的分裂点位置,并使得Na+Nb=N。所有可能的分裂点位置的集合 可被任意地分裂成两个分区,优选地使得分区A和B具有几乎相同的可能的分裂点位置的 总数(如,使得Na=NbSNa=Nb-1)。通过将所有可能的分裂点位置的集合分成两个分区, 确定实际的分裂点位置的任务也被分成两个子任务,即在帧分区A中确定实际的分裂点位 置和在帧分区B中确定实际的分裂点位置。
[0335] 在此实施例中,再次假设分裂点解码器105知晓可能的分裂点位置的总数、分裂 点的总数以及分裂点状态数。为了解决两个子任务,分裂点解码器105也应知晓每个分区 的可能的分裂点位置的数量、在每个分区中的分裂点的数量以及每个分区的分裂点状态数 (分区的分裂点状态数此刻可被称作"分裂点子状态数")。
[0336] 因为分裂点解码器自身将所有可能的分裂点的集合分成两个分区,它本身知道分 区A包括Na个可能的分裂点位置且分区B包括Nb个可能的分裂点位置。基于以下发现,确 定两个分区中的每个的实际分裂点数量:
[0337] 因为所有可能的分裂点位置的集合已被分成两个分区,此时实际的分裂点位置中 的每个或者位于分区A或者位于分区B。此外,假设P为分区的分裂点的数量,N为分区的 可能的分裂点位置的总数,以及f(P,N)为返回分裂点位置的不同组合的数量的函数,则对 可能的分裂点位置的整个集合进行分裂(已被分成分区A和分区B)的不同组合的数量为:
[0338]
[0339] 基于以上考虑,根据一实施例,应以小于第一阈值的分裂点状态数对采用第一配 置的所有组合进行编码,该第一配置中,分区A具有0个分裂点,分区B中具有P个分裂点。 分裂点状态数可被编码为正整数值或0。因为采用第一配置仅存在f(〇,Na) *f(P,Nb)个组 合,合适的第一阈值可以是f(〇,Na) ·f(P,Nb)。
[0340] 应以大于或等于第一阈值并小于或等于第二阈值的分裂点状态数对采用第二配 置的所有组合进行编码,在该第二配置中,分区A具有1个分裂点,分区B具有P-1个分裂 点。因为采用第二配置仅存在f(l,Na) ·?·(Ρ-1,Ν,)个组合,合适的第二阈值可以是f(0,Na )·?·(Ρ,Ν,)+?(1,Ν3) ·?·(Ρ-1,Ν,)。类似地确定用于采用其他配置的组合的分裂点状态数。
[0341] 根据一实施例,通过将所有可能的分裂点位置的集合分离成两个分区Α和Β,执行 解码。然后,测试分裂点状态数是否小于第一阈值。在优选的实施例中,第一阈值可以是 f(0,Na) ·f(P,Nb)。
[0342] 如果分裂点状态数小于第一阈值,则可以推出,分区A包括0个分裂点,分区B包 括所有的Ρ个分裂点。然后以各自确定的表示对应分区的分裂点的数量的数值对两个分区 进行解码。此外,为分区A确定第一分裂点状态数,并为分区B确定第二分裂点状态数,第 一分裂点状态数和第二分裂点状态数各自地用作新的分裂点状态数。在此文档中,分区的 分裂点状态数可被称为"分裂点子状态数"。
[0343] 然而,如果分裂点状态数大于或等于第一阈值,可以更新分裂点状态数。在 优选的实施例中,可以通过从分裂点状态数中减去某值(优选地,减去第一阈值,如 f(0,Na) .f(P,Nb))以更新分裂点状态数。在下一步骤中,测试更新的分裂点状态数是否小 于第二阈值。在优选的实施例中,第二阈值可以是f(l,Na) ·?·(Ρ-1,\)。如果分裂点状态 数小于第二阈值,则可以得到,分区Α具有1个分裂点,分区Β具有Ρ-1个分裂点。
[0344] 然后,以各自确定的每个分区的分裂点的数量对两个分区进行解码。第一分裂点 子状态数用于分区A的解码,第二分裂点子状态数用于分区B的解码。然而,如果分裂点状 态数大于或等于第二阈值,可以更新分裂点状态数。在优选的实施例中,可以通过从分裂点 状态数中减去某值(优选地,f(l,Na) ·?·(Ρ-1,Ν〇)以更新分裂点状态数。类似地,对关于 两个分区的剩余的分裂点的分布可能应用该解码过程。
[0345] 在一实施例中,用于分区Α的分裂点子状态数和用于分区Β的分裂点子状态数可 被用于分区A的解码和分区B的解码,其中通过进行除法确定两个事件子状态数:
[0346] 分裂点状态数/f(分区B的分裂点的数量,Nb)。
[0347] 优选地,分区A的分裂点子状态数为以上除法的整数部分,分区B的分裂点子状态 数为此除法的余数。应用于此除法的分裂点状态数可以是帧的原始的分裂点状态数或更新 后的分裂点状态数,如通过减去一个或多个阈值进行更新,如上所述。
[0348] 为了示出基于分区的解码的上述构思,考虑所有可能的分裂点位置的集合具有两 个分裂点的情况。此外,如果f(P,N)仍为返回分区的分裂点位置的不同组合的数量的函 数,其中P为帧分区的分裂点的数量,且N为此分区的分裂点的总数。则,对于位置的可能 分布中的每个,产生以下数量的可能的组合:
[0349]
[0350] 因此可以得出,如果帧的编码的分裂点状态数小于f(0,Na) ·f(2,Nb),则分裂点 的位置需要分布为〇和2。否则,从分裂点状态数中减去f(0,Na) *f(2,Nb),且其结果与 f(l,Na) .f(l,Nb)进行对比。如果结果小,贝1J位置分布为1和1〇否贝1J,仅剩下分布2和0, 位置分布为2和0。
[0351] 以下,根据一实施例提供伪代码,该伪代码用于对分裂点(此处:"sp")的位置进 行解码。在此伪代码中,"sp_a"为(假设的)分区A中的分裂点的数量,"sp_b"为(假设 的)分区B中的分裂点的数量。在此伪代码中,(如,更新后的)分裂点状态数可被称为 "state"。分区A和B的分裂点子状态数仍被联合编码在"state"变量中。根据实施例的 联合编码方案,A的分裂点子状态数(此处被称为"state_a")为除法state/f(Sp_b,Nb)的 整数部分,B的分裂点子状态数(此处被称为"state_b")为此除法的余数。由此,可以通 过相同的方法,对两个分区的长度(分区的分裂点的总数)和编码位置的数量(分区中的 分裂点的数量)进行解码:
[0352] 函数X=decodestate(state,sp,N)
[0353] 1.将向量分裂成长度为的Na和Nb的两个分区.
[0354] 2.for从 0 至sp的sp_a
[0355] a.sp-b=sp-sp-a
[0356] b.如果state〈f(sp_a,Na)*f(sp_b,Nb)则
[0357] 跳出for-循环.
[0358] c.state: =state-f(sp-a,Na)*f(sp-b,Nb)
[0359] 3.用于分区B的可能的状态的数量是
[0360] no-states-b=f(sp-b,Nb)
[0361] 4.states、分区A和B的state_a和state_b分别为除法state/no_states_b的 整数部分和余数。
[0362] 5.如果Na>l则通过xa=decodestate(state_a,sp_a,Na)递归地获得分区A的 解码向量
[0363] 否则(Na== 1),向量xa为标量
[0364] 可设置xa=state_a.
[0365] 6.如果Nb>l则通过xb=decodestate(state_b,sp_b,Nb)递归地获得分区B的 解码向量,
[0366] 否则(Nb== 1),向量xb为标量
[0367] 可设置xb=state-b.
[0368] 7.通过使用x=[xaxb]合并xa和xb以获得最终输出Xc^
[0369] 此算法的输出为在每个编码位置(S卩,分裂点位置)为(1)而在其他位置(S卩,在 不包括分裂点的可能的分裂点位置)为(〇)的向量。
[0370] 以下,根据一实施例提供伪代码,该伪代码用于采用类似如上的方式使用类似的 变量名对分裂点位置进行编码:
[0371] 函数state=encodestate(X,N)
[0372] 1.将向量分裂成长度为的Na和Nb的两个分区xa和xb。
[0373] 2.对分区A和B中的分裂点计数为sp_a和sp_b,并设置sp=sp_a+sp_b。
[0374] 3.设置state为 0
[0375] 4.对于从 0 至sp_a_l的k
[0376] a.state: =state+f(k,Na)*f(sp_k,Nb)
[0377] 5.如果Na>l,通过state_a=encodestate(xa,Na)对分区A进行编码;
[0378] 否贝丨J(Na= = 1),设置state_a=xa。
[0379] 6.如果Nb>l,通过state_b=encodestate(xb,Nb)对分区B进行编码;
[0380] 否则(Nb= = 1),设置state-b=xb。
[0381] 7.对states进行联合编码
[0382] state: =state+state-a*f(sp-b,Nb)+state-b.
[0383] 此处,假设,类似于解码算法,通过向量x中的(1)识别每个编码位置(S卩,分裂点 位置),其他所有元素为(〇)(即,不包括分裂点的可能的分裂点位置)。
[0384] 可以使用标准方法以非递归的形式简便地实现在伪代码中表示出的上述递归方 法。
[0385] 根据一实施例,函数f(p,N)可被实现为查找表。当位置不重叠时(如在当前上下 文中),状态的数量的函数f(P,N)为可被简单地在线计算的二项式函数,即
[0386]
[0387] 很做斗v仅明的一头施1列,緬料益和胛料器均具有for-循环,在for-循环中,对k 的连续值,计算f(p-k,Na)*f(k,Nb)的乘积。为了有效的计算,这可被写成:
[0388]
[0389] 换句话说,每次迭代通过三次乘法运算和一次除法运算可以计算用于减法/加法 运算(在解码器的步骤2b和2c中以及在编码器的步骤4a中)的逐项。
[0390] 回到图1,可选的实施例以不同的方式实现图1的用于解码以获得重建的音频信 号包络的装置。在此实施例中,正如之前已解释的,该装置包括:用于依据一个或多个分裂 点生成重建的音频信号包络的信号包络重建器110 ;以及用于输出重建的音频信号包络的 输出接口 120。
[0391] 此外,信号包络重建器110用于生成重建的音频信号包络,以使得一个或多个分 裂点将重建的音频信号包络分成两个或更多个音频信号包络部分,其中预定义的分配规则 为两个或更多个信号包络部分中的每个信号包络部分,依据该信号包络部分,定义信号包 络部分值。
[0392] 在可选的实施例中,然而,预定义的包络部分值被分配给两个或更多个信号包络 部分中的每个。
[0393] 在此实施例中,信号包络重建器110用于生成重建的音频信号包络,以使得对于 两个或更多个信号包络部分中的每个信号包络部分,该信号包络部分的信号包络部分值的 绝对值大于被分配给该信号包络部分的预定义的包络部分值的绝对值的90%,并使得该信 号包络部分的信号包络部分值的绝对值小于被分配给该信号包络部分的预定义的包络部 分值的绝对值的110%。这允许与预定义的包络部分值的一定偏差。
[0394] 在特定的实施例中,然而,信号包络重建器110用于生成重建的音频信号包络,以 使得两个或更多个信号包络部分中的每个的信号包络部分值等于被分配给该信号包络部 分的预定义的包络部分值。
[0395] 例如,可以接收将音频信号包络分成四个音频信号包络部分的三个分裂点。分配 规则可以指定,第一信号包络部分的预定义的包络部分值为〇. 15,第二信号包络部分的预 定义的包络部分值为0. 25,第三信号包络部分的预定义的包络部分值为0. 25,以及第四信 号包络部分的预定义的包络部分值为0. 35。
[0396] 当接收到三个分裂点时,信号包络重建器110根据上述构思重建信号包络。
[0397] 在另一实施例中,可以接收将音频信号包络分成两个音频信号包络部分的一个分 裂点。分配规则可以指定,第一信号包络部分的预定义的包络部分值为P,第二信号包络部 分的预定义的包络部分值为Ι-p。例如,如果P= 〇. 4,则Ι-p= 0. 6。此外,当接收到三个 分裂点时,信号包络重建器110根据上述构思重建信号包络。
[0398] 应用预定义的包络部分值的此可选的实施例可以应用上述构思中的每个。
[0399] 在一实施例中,至少两个信号包络部分的预定义的包络部分值彼此不同。
[0400] 在另一实施例中,信号包络部分中的每个的预定义的包络部分值与其他信号包络 部分中的每个的预定义的包络部分值不同。
[0401] 虽然已在装置的上下文中描述了一些方面,但显然,这些方面还表示对应的方法 的描述,其中块或装置对应于方法步骤或方法步骤的特征。类似地,在方法步骤的上下文中 描述的方面还表示对应的块或对应的装置的项目或特征的描述。
[0402] 本发明的分解信号可存储于数字存储介质上,或可在如无线传输介质或有线传输 介质(如,因特网)的传输介质上传输。
[0403] 根据某些实施要求,本发明的
当前第5页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1