语音编码器中的相位量化
文献发布时间:2023-06-19 12:02:28
背景技术
随着数字无线电话网络、互联网上语音流式传输和互联网电话的出现,语音的数字处理已变得司空见惯。工程师使用压缩来高效处理语音,同时仍保持质量。语音压缩的一个目标是以一种针对给定数量的比特提供最大信号质量的方式表示语音信号。换句话说,该目标是,对于给定的质量水平,用最少的比特表示语音信号。在一些场景中,还可以应用其他目标,例如对传输错误的弹性以及限制由于编码/传输/解码导致的整体延迟。
一种类型的常规语音编码器/解码器(“编解码器”)使用线性预测(“LP”)来实现压缩。语音编码器针对预测滤波器找到并量化LP系数,所述LP系数用于将样本值预测为先前样本值的线性组合。残差信号(也称为“激励”信号)指示原始信号的未通过滤波准确预测的部分。由于不同种类的语音具有不同的特性,因此语音编码器通常对浊音段(通过声带振动表征)、清音段和无声段使用不同的压缩技术来压缩残差信号。对应的语音解码器重构残差信号,恢复在合成滤波器中使用的LP系数,并用合成滤波器处理残差信号。
考虑到压缩对在计算机系统中表示语音的重要性,语音压缩吸引了大量的研究和开发活动。尽管以前的语音编解码器在许多情况下都提供良好的性能,但是它们也有一些缺点。特别是,在非常低的比特率情况下使用以前的语音编解码器时,可能会出现问题。在这样的情况下,无线电话网络或其他网络可能没有足够的带宽(例如,由于拥塞或分组丢失)或者可能有传输质量问题(例如,由于传输噪声或间歇性延迟),这阻止了在适用于实时通信的质量约束和时间约束下的编码语音的递送。
发明内容
总之,详细描述提出了语音编码和语音解码方面的创新。一些创新涉及语音编码期间的相位量化。其他创新涉及语音解码期间的相位重构。在许多情况下,即使在带宽不足或有传输质量问题的网络上传输编码数据时,这些创新也可以提高低比特率场景中语音编解码器的性能。
根据本文中描述的第一组创新,语音编码器接收语音输入(例如,在输入缓冲器中),对语音输入进行编码以产生编码数据,并将编码数据存储(例如,在输出缓冲器中)以作为比特流的一部分输出。作为编码的一部分,语音编码器会根据线性预测(“LP”)系数对基于语音输入的输入值进行滤波,从而产生残差值。语音编码器对残差值进行编码。特别地,语音编码器确定相位值集合并对相位值集合进行编码。例如,可以通过以下方式来确定相位值:对当前帧的子帧应用频率变换,这会产生子帧的复幅度值,并基于复幅度值计算相位值(以及对应的幅度值)。为了提高性能,语音编码器在对相位值集合进行编码时可以执行各种操作。
例如,当语音编码器对相位值集合进行编码时,语音编码器使用基函数(例如,正弦函数)的加权和以及线性分量,来表示相位值集合中的至少一些相位值。语音编码器可以使用延迟决策方法或其他方法来确定对基函数加权的系数集合。系数的计数可以不同,具体取决于编码数据的目标比特率和/或其他标准。当找到合适的系数时,语音编码器可以使用基于线性相位度量的成本函数或其他成本函数,从而基函数的加权和与线性分量一起类似于所表示的相位值。语音编码器可以使用偏移值和斜率值对线性分量进行参数化,然后将其与加权和相结合。使用基函数的加权和以及线性分量,语音编码器可以以紧凑而灵活的方式准确表示相位值,这可以改善低比特率场景下的速率失真性能(即,对于给定比特率提供更好的质量,或等效地,针对给定的质量水平提供较低的比特率)。
作为另一个示例,当语音编码器对相位值集合进行编码时,它会忽略具有高于截止频率的频率的相位值集合中的任何相位值。语音编码器可以至少部分地基于编码数据的目标比特率、基音循环信息和/或其他标准来选择截止频率。省略的高频相位值可以在解码期间基于作为编码数据一部分用信号发送的低频相位值进行合成。通过省略高频相位值(并基于低频相位值在解码期间对其进行合成),语音编码器可以高效地表示整个范围的相位值,这可以改善低比特率场景下的速率失真性能。
根据本文中描述的第二组创新,语音解码器接收编码数据(例如,在输入缓冲器中)作为比特流的一部分,解码编码数据以重构语音,并存储重构后的语音(例如,在输出缓冲器中)以用于输出。作为解码的一部分,语音解码器会解码残差值并根据LP系数对残差值进行滤波。特别地,语音解码器对相位值集合进行解码并至少部分地基于该相位值集合重构残差值。为了提高性能,语音解码器在解码相位值集合时可以执行各种操作。
例如,当语音解码器解码相位值集合时,它会使用基函数(例如,正弦函数)的加权和以及线性分量,来重构相位值集合中的至少一些相位值。线性分量可以通过偏移值和斜率值进行参数化。语音解码器可以解码系数集合(其对基函数加权)、偏移值和斜率值,然后将系数集合、偏移值和斜率值用作重构相位值的一部分。对基函数加权的系数的计数可以根据编码数据的目标比特率和/或其他标准而不同。使用基函数的加权和以及线性分量,可以以紧凑而灵活的方式准确表示相位值,这可以提高低比特率场景下的速率失真性能。
作为另一个示例,当语音解码器解码相位值集合时,语音解码器重构该相位值集合的第一子集,然后使用第一子集中的至少一些相位值来合成该相位值集合的第二子集,其中,第二个子集中的每个相位值都具有高于截止频率的频率。语音解码器可以至少部分地基于编码数据的目标比特率、基音循环信息和/或其他标准来确定截止频率。为了合成第二子集的相位值,语音解码器可以识别第一子集的范围,确定(作为模式)第一子集的范围内的相邻相位值之间的差,在截止频率之上重复该模式,并且然后对相邻相位值之间的差进行集成(integrate)以确定第二子集。通过基于比特流中用信号发送的低频相位值合成省略的高频相位值,语音解码器可以高效地重构整个范围的相位值,这可以改善低比特率场景下的速率失真性能。
本文中描述的创新包括但不限于权利要求书涵盖的创新。可以将这些创新实现为:方法的一部分,配置为执行该方法的计算机系统的一部分,或存储用于使计算机系统中的一个或多个处理器执行该方法的计算机可执行指令的计算机可读介质的一部分。各种创新可以组合使用,也可以单独使用。提供本发明内容以简化形式介绍一些概念,这些概念将在下面的详细描述中被进一步描述。本发明内容既不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。通过下面的详细描述,本发明的前述和其他目的、特征和优点将变得更加明显,下面的详细描述参考附图进行并说明了许多示例。示例也可以能够具有其他和不同的应用,并且可以在各个方面对一些细节进行修改,而不脱离所公开的创新的精神和范围。
附图说明
以下附图示出了所公开的创新的一些特征。
图1是示出其中可以实现一些所描述的示例的示例计算机系统的图。
图2a和2b是其中可以实现一些所描述的实施例的示例网络环境的图。
图3是示出示例语音编码器系统的图。
图4是示出图3的示例语音编码器系统中的残差值的编码阶段的图。
图5是示出了示例延迟决策方法的图,该延迟决策方法用于寻找将相位值表示为基函数的加权和的系数。
图6a-6d是示出用于语音编码的技术的流程图,该技术包括将相位值表示为基函数的加权和,和/或省略具有高于截止频率的频率的相位值。
图7是示出示例语音解码器系统的图。
图8是示出图7的示例语音解码器系统中的残差值的解码阶段的图。
图9a-9c是示出具有高于截止频率的频率的相位值的合成的示例方法的图。
图10a-10d是示出用于语音解码的技术的流程图,该技术包括重构被表示为基函数的加权和的相位值和/或具有高于截止频率的相位值的合成。
具体实施方式
详细描述提出了语音编码和语音解码方面的创新。一些创新涉及语音编码期间的相位量化。其他创新涉及语音解码期间的相位重构。在许多情况下,即使在带宽不足或有传输质量问题的网络上递送编码数据时,这些创新也可以提高低比特率场景中语音编解码器的性能。
在本文中所描述的示例中,不同附图中的相同附图标记表示相同的组件、模块或操作。更一般地,本文描述的示例的各种替代是可能的。例如,可以通过改变所描述的方法动作的顺序,通过分割、重复或省略某些方法动作等来改变本文所描述的一些方法。所公开技术的各个方面可以组合使用或单独使用。本文描述的一些创新解决了背景技术中提到的一个或多个问题。通常,给定的技术/工具没有解决所有这些问题。应当理解,在不脱离本公开的范围的情况下,可以利用其他示例,并且可以进行结构、逻辑、软件、硬件和电气改变。因此,以下描述不应被认为是限制性的。相反,本发明的范围由所附权利要求书限定。
I.示例计算机系统。
图1示出了合适的计算机系统(100)的一般示例,其中可以实现所描述的一些创新。本文所述的创新涉及语音编码和/或语音解码。除了其在语音编码和/或语音解码中的使用之外,计算机系统(100)并不旨在暗示对使用范围或功能的任何限制,因为可以在包括适于语音编码和/或语音解码中的操作的专用计算机系统的各种计算机系统中实现创新。
参考图1,计算机系统(100)包括中央处理单元(“CPU”)的一个或多个处理核(110...11x)和本地片上存储器(118)。处理核(110...1xx)执行计算机可执行指令。处理核(110...11x)的数量取决于实现方式,并且可以是例如4或8。本地存储器(118)可以是易失性存储器(例如,寄存器、高速缓存、RAM)、非易失性存储器(例如,ROM、EEPROM、闪存等)或二者的某种组合,其可通过相应的处理核(110...11x)访问。
本地存储器(118)可以存储软件(180),该软件(180)以计算机可执行指令的形式实现用于语音编码器中的相位量化和/或语音解码器中的相位重构的一种或多种创新的工具,以用于由相应处理核(110...11x)执行的操作。在图1中,本地存储器(118)是片上存储器,例如一个或多个高速缓存,利用处理核(110...11x)对其的访问操作、传输操作等是快速的。
计算机系统(100)可以包括图形处理单元(“GPU”)的处理核(未示出)和本地存储器(未示出)。可替代地,计算机系统(100)包括片上系统(“SoC”)、专用集成电路(“ASIC”)或其他集成电路的一个或多个处理核(未示出),以及相关联的存储器(未显示)。处理核可以执行用于语音编码器中的相位量化和/或语音解码器中的相位重构的一种或多种创新的计算机可执行指令。
更一般地,术语“处理器”可以泛指可以处理计算机可执行指令的任何设备,并且可以包括微处理器、微控制器、可编程逻辑设备、数字信号处理器和/或其他计算设备。处理器可以是CPU或其他通用单元,然而,使用例如ASIC或现场可编程门阵列(“FPGA”)来提供专用处理器也是众所周知的。
术语“控制逻辑”可以指控制器,或更一般地,一个或多个处理器,其可操作以处理计算机可执行指令,确定结果,并生成输出。取决于实现方式,控制逻辑可以通过在CPU上可执行的软件,通过控制专用硬件(例如,GPU或其他图形硬件)的软件,或通过专用硬件(例如,在ASIC中)来实现。
计算机系统(100)包括共享存储器(120),其可以是处理核可访问的易失性存储器(例如,RAM)、非易失性存储器(例如,ROM、EEPROM、闪存等),或两者的某种组合。存储器(120)以计算机可执行指令的形式存储针对所执行的操作实现用于语音编码器中的相位量化和/或语音解码器中的相位重构的一种或多种创新的工具的软件(180)。在图1中,共享存储器(120)是片外存储器,利用处理核对于其的访问操作、传输操作等较慢。
该计算机系统(100)包括一个或多个网络适配器(140)。如本文所用,术语网络适配器表示任何网络接口卡(“NIC”)、网络接口、网络接口控制器或网络接口设备。网络适配器(140)使得能够通过网络与另一计算实体(例如,服务器、其他计算机系统)进行通信。该网络可以是电话网络、广域网、局域网、存储区域网或其他网络。网络适配器(140)可以支持用于电话网络、广域网、局域网、存储区域网络或其他网络的有线连接和/或无线连接。网络适配器(140)通过网络连接以调制数据信号传送数据(例如,计算机可执行指令、语音/音频或视频输入或输出或其他数据)。调制数据信号是一种信号,其以将信息编码在信号中的方式设置或更改其一个或多个特性。作为示例而非限制,网络连接可以使用电、光、RF或其他载波。
计算机系统(100)还包括一个或多个输入设备(150)。输入设备可以是:诸如键盘、鼠标、笔或轨迹球之类的触摸输入设备,扫描设备,或向计算机系统(100)提供输入的另一设备。对于语音/音频输入,计算机系统(100)的输入设备(150)包括一个或多个麦克风。计算机系统(100)还可以包括视频输入、另一音频输入、运动传感器/跟踪器输入和/或游戏控制器输入。
该计算机系统(100)包括一个或多个输出设备(160),例如显示器。对于语音/音频输出,计算机系统(100)的输出设备(160)包括一个或多个扬声器。输出设备(160)还可以包括打印机、CD刻录机、视频输出、另一音频输出或提供来自计算机系统(100)的输出的另一设备。
存储装置(170)可以是可移动的或不可移动的,并且包括磁介质(例如,磁盘、磁带或盒式磁带)、光盘介质和/或任何其他可用于存储信息且可在计算机系统(100)内被访问的介质。存储装置(170)存储用于软件(180)的指令,该软件实现用于语音编码器中的相位量化和/或语音解码器中的相位重构的一种或多种创新的工具。
诸如总线、控制器或网络之类的互连机制(未示出)将计算机系统(100)的组件互连。通常,操作系统软件(未示出)为在计算机系统(100)中执行的其他软件提供操作环境,并协调计算机系统(100)的组件的活动。
图1的计算机系统(100)是物理计算机系统。虚拟机可以包括如图1所示组织的组件。
术语“应用”或“程序”可以指代诸如用于提供功能的任何用户模式指令之类的软件。应用(或程序)的软件可以还包括用于操作系统和/或设备驱动程序的指令。该软件可以存储在相关联的存储器中。软件可以是例如固件。尽管考虑了使用适当编程的通用计算机或计算设备来执行这种软件,但是也考虑了可以使用硬接线电路或定制硬件(例如,ASIC)代替软件指令使用或与软件指令结合使用。因此,示例不限于硬件和软件的任何特定组合。
术语“计算机可读介质”是指参与提供可由处理器读取并在计算环境内访问的数据(例如,指令)的任何介质。计算机可读介质可以采用许多形式,包括但不限于非易失性介质和易失性介质。非易失性介质包括例如光盘或磁盘以及其他永久性存储器。易失性介质包括动态随机存取存储器(“DRAM”)。计算机可读介质的常见形式包括例如固态驱动器、闪存驱动器、硬盘、任何其他磁性介质、CD-ROM、数字多功能光盘(“DVD”)、任何其他光学介质、RAM、可编程只读存储器(“PROM”)、可擦可编程只读存储器(“EPROM”)、USB记忆棒、任何其他存储器芯片或盒式磁带或计算机可以读取的任何其他介质。术语“计算机可读存储器”特别地排除了暂时性传播信号、载波和波形或其他无形或暂时性介质,虽然它们也可被计算机读取。术语“载波”可以指在幅度或频率上调制以传送信号的电磁波。
可以在目标真实或虚拟处理器上的计算机系统中执行的计算机可执行指令的一般上下文中描述本发明。所述计算机可执行指令可包括:可在通用处理器的处理核上执行以提供本文描述的功能的指令,可执行以控制GPU或专用硬件以提供本文描述的功能的指令,可在GPU的处理核上执行以提供本文描述的功能的指令,和/或可在专用处理器的处理核上执行以提供本文描述的功能的指令。在一些实现方式中,可以在程序模块中组织计算机可执行指令。通常,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、库、对象、类、组件、数据结构等。程序模块的功能可以如各个实施例中所期望的在程序模块之间进行组合或拆分。用于程序模块的计算机可执行指令可以在本地或分布式计算机系统内执行。
在本公开中描述了许多示例,并且仅出于说明性目的而给出了许多示例。所描述的示例在任何意义上都不是限制性的,并且也不旨在是限制性的。如从本公开中显而易见的,当前公开的创新可广泛地应用于多种上下文。本领域普通技术人员将认识到,可以在各种修改和变更(例如,结构、逻辑、软件和电气修改)的情况下实践所公开的创新。尽管可以参考一个或多个特定示例来描述所公开的创新的特定特征,但是应当理解,除非另外明确说明,否则这些特征不限于参考其描述的一个或多个特定示例中的用法。本公开既不是所有示例的字面描述,也不是所有示例中必须存在的本发明的特征的列表。
当在术语之前使用序数(例如,“第一”、“第二”、“第三”等)作为形容词时,该序数仅用于表示特定特征(除非另有明确说明),例如,以将该特定特征与由相同术语或相似术语描述的另一特征区分开。仅使用序数“第一”、“第二”、“第三”等并不表示任何物理顺序或位置、任何时间顺序或重要性、质量或其他方面的排名。另外,仅使用序数并没有定义对用序数标识的特征的数值限制。
在介绍元素时,词语“一”、“一个”、“该”和“所述”旨在表示存在一个或多个元素。术语“包括”、“包含”和“具有”旨在是包括性的,并且意味着除了所列元素之外,可能还有附加元素。
当描述单个设备、组件、模块或结构时,可以替代地使用多个设备、组件、模块或结构(无论它们是否协作)来代替单个设备、组件、模块或结构。被描述为由单个设备拥有的功能可以替代地由多个设备拥有,无论它们是否协作。类似地,在本文中描述多个设备、组件、模块或结构之处(无论它们是否协作),都可以替代地使用单个设备、组件、模块或结构来代替多个设备、组件、模块或结构。被描述为由多个设备拥有的功能可以替代地由单个设备拥有。通常,计算机系统或设备可以是本地的,也可以是分布式的,并且可以包括专用硬件和/或具有实现上述功能的软件的硬件的任意组合。
此外,本文中所述的技术和工具不限于本文中所述的特定示例。相反,相应技术和工具可以与本文中描述的其他技术和工具独立地和分开地使用。
彼此通信的设备、组件、模块或结构不需要彼此持续通信,除非另有明确说明。相反,这样的设备、组件、模块或结构仅需要在必要或期望时向彼此发送,并且实际上可以在大多数时间避免交换数据。例如,经由互联网与另一设备通信的设备可能都无法数周一次将数据发送到另一设备。另外,彼此通信的设备、组件、模块或结构可以直接通信或通过一个或多个中介间接地通信。
如本文所使用的,术语“发送”表示将信息从一个设备、组件、模块或结构传递到另一设备、组件、模块或结构的任何方式。术语“接收”表示在一个设备、组件、模块或结构处从另一设备、组件、模块或结构获取信息的任何方式。设备、组件、模块或结构可以是同一计算机系统或不同计算机系统的一部分。信息可以以值传递(例如,作为消息或函数调用的参数)或者以引用传递(例如,在缓冲器中)。取决于上下文,信息可以直接传递或通过一个或多个中间设备、组件、模块或结构传送。如本文中所使用的,术语“连接”表示设备、组件、模块或结构(其可以是同一计算机系统或不同计算机系统的一部分)之间的可操作的通信链路。可操作的通信链路可以是有线或无线网络连接,其可以是直接的或经过(例如,网络的)一个或多个中介。
对具有多个特征的示例的描述并不意味着所有或甚至任何此类特征都是必需的。相反,描述了各种可选特征,以说明本文中描述的创新的各种可能示例。除非另有明确说明,否则没有任何特征是必不可少的或必需的。
此外,尽管可以按顺序描述处理步骤和阶段,但是可以将这样的处理配置为以不同的顺序工作。对特定序列或顺序的描述并不一定表示要求按该顺序执行步骤/阶段。可以以任何实际顺序执行步骤或阶段。此外,尽管被描述或暗示为非同时发生,但是一些步骤或阶段可以同时执行。将过程描述为包括多个步骤或阶段并不暗示所有或甚至任何步骤或阶段都是必不可少的或必需的。各种其他示例可以省略所描述的一些或全部步骤或阶段。除非另有明确说明,否则任何步骤或阶段都不是必不可少的或必需的。类似地,尽管可以将产品描述为包括多个方面、质量或特性,但这并不意味着所有方面都是必不可少的或必需的。各种其他示例可以省略方面、质量或特性中的一些或全部。
参考语音编解码器说明了本文中描述的许多技术和工具。可替代地,可以在音频编解码器、视频编解码器、静止图像编解码器或其他媒体编解码器(对于它们,编码器和解码器使用相位值集合来表示残差值)中实现本文中描述的技术和工具。
列举的项目列表并不暗示任何或所有项目是互斥的,除非另有明确说明。同样,除非另有明确说明,否则列举的项目列表并不暗示任何项目或所有项目是任何类别的综合。
为了呈现的目的,详细描述使用诸如“确定”和“选择”之类的术语来描述计算机系统中的计算机操作。这些术语表示由计算机系统中的一个或多个处理器或其他组件执行的操作,并且不应与人类执行的动作混淆。与这些术语相对应的实际计算机操作因实现方式而异。
II.示例网络环境。
图2a和2b示出了示例网络环境(201、202),其包括语音编码器(220)和语音解码器(270)。编码器(220)和解码器(270)使用适当的通信协议通过网络(250)连接。网络(250)可以包括电话网络、因特网或另一计算机网络。
在图2a所示的网络环境(201)中,每个实时通信(“RTC”)工具(210)包括用于双向通信的编码器(220)和解码器(270)两者。给定的编码器(220)可以产生与语音编解码器格式或语音编解码器格式的扩展兼容的输出,其中,对应的解码器(270)从编码器(220)接受编码的数据。双向通信可以是音频会议、电话呼叫或其他两方或多方通信场景的一部分。尽管在图2a中的网络环境(201)包括两个实时通信工具(210),但是网络环境(201)可以替代地包括三个或更多个参与多方通信的实时通信工具(210)。
实时通信工具(210)管理编码器(220)进行的编码。图3示出了可以包括在实时通信工具(210)中的示例性编码器系统(300)。可替代地,实时通信工具(210)使用另一编码器系统。实时通信工具(210)还管理解码器(270)进行的解码。图7示出了示例解码器系统(700),其可以被包括在实时通信工具(210)中。可替代地,实时通信工具(210)使用另一解码器系统。
在图2b所示的网络环境(202)中,编码工具(212)包括编码器(220),该编码器(220)对语音进行编码以递送到包括解码器(270)的多个回放工具(214)。可以为监视系统、Web监视系统、远程桌面会议演示、游戏播放广播或其中语音被编码并从一个位置发送到一个或多个其他位置进行回放的其他场景提供单向通信。尽管在图2b中的网络环境(202)包括两个回放工具(214),但是网络环境(202)可以包括更多或更少的回放工具(214)。通常,回放工具(214)与编码工具(212)通信以确定编码语音流,以供回放工具(214)接收。回放工具(214)接收该流,在适当的时间段内将接收到的编码数据进行缓冲,并开始解码和回放。
图3示出了可以包括在编码工具(212)中的示例性编码器系统(300)。可替代地,编码工具(212)使用另一种编码器系统。编码工具(212)还可以包括服务器侧控制器逻辑,以用于管理与一个或多个回放工具(214)的连接。图7示出了示例解码器系统(700),其可以被包括在回放工具(214)中。可替代地,回放工具(214)使用另一解码器系统。回放工具(214)还可以包括用于管理与编码工具(212)的连接的客户端侧控制器逻辑。III.示例语音编码器系统。
图3示出了示例语音编码器系统(300),一些所描述的实施例可以与之结合来实现。编码器系统(300)可以是通用语音编码工具,其能够以多种模式中的任何一种进行操作,例如用于实时通信的低延时模式、转码模式、以及用于产生媒体以从文件或流回放的较高延时模式,或者编码器系统(300)可以是适用于一种这样的模式的专用编码工具。在一些示例实现方式中,编码器系统(300)可以通过各种类型的连接来提供高质量的话音和音频,包括通过带宽不足(例如,由于拥塞或高丢包率而导致的低比特率)或传输质量问题(例如,由于传输噪声或高抖动)的网络上的连接。特别地,在一些示例实现方式中,编码器系统(300)以两种低延时模式中的一种进行操作,即低比特率模式或高比特率模式。低比特率模式使用如参考图3和图4描述的组件。
编码器系统(300)可以使用GPU硬件或使用专用硬件来实现为操作系统模块的一部分、应用库的一部分、独立应用的一部分。总体而言,编码器系统(300)被配置为接收语音输入(305),对语音输入(305)进行编码以产生编码数据,并且将编码数据存储为比特流(395)的一部分。编码器系统(300)包括各种组件,其使用一个或多个处理器来实现并且被配置为对语音输入(305)进行编码以产生编码数据。
编码器系统(300)被配置为从诸如麦克风之类的源接收语音输入(305)。在一些示例实现方式中,编码器系统(300)可以接受超宽带语音输入(对于以32kHz采样的输入信号)或宽带语音输入(对于以16kHz采样的输入信号)。编码器系统(300)将语音输入(305)临时存储在输入缓冲器中,该输入缓冲器在编码器系统(300)的存储器中实现并且被配置为接收语音输入(305)。从输入缓冲器,编码器系统(300)的组件读取语音输入(305)的样本值。编码器系统(300)使用可变长度的帧。周期性地,将语音输入(305)的当前批次(输入帧)中的样本值添加到输入缓冲器中。每一批(输入帧)的长度是例如20毫秒。当对帧进行编码时,将从输入缓冲器中删除该帧的样本值。任何未使用的样本值都会保留在输入缓冲器中,以用于编码为下一帧的一部分。因此,编码器系统(300)被配置为缓冲当前批次(输入帧)中的任何未使用的样本值,并在输入缓冲器中将这些样本值放在下一批次(输入帧)之前。可替代地,编码器系统(300)可以使用均匀长度的帧。
滤波器组(filterbank)(310)被配置为将语音输入(305)分成多个频带。多个频带提供了由预测滤波器(360、362)滤波以在对应频带中产生残差值的输入值。在图3中,滤波器组(310)被配置为将语音输入(305)分成两个相等的频带——低频带(311)和高频带(312)。例如,如果语音输入(305)来自超宽带输入信号,则低频带(311)可以包括0-8kHz范围内的语音,而高频带(312)可以包括8-16kHz范围内的语音。可替代地,滤波器组(310)将语音输入(305)划分成更多的频带和/或不相等的频带。取决于实现方式,滤波器组(310)可以使用各种类型的无限冲激响应(“HR”)或其他滤波器中的任何一个。
滤波器组(310)可以被选择性地旁路。例如,在图3的编码器系统(300)中,如果语音输入(305)来自宽带输入信号,则滤波器组(310)可以被旁路。在这种情况下,可以跳过由高频带LPC分析模块(322)、高频带预测滤波器(362)、成帧器(370)、残差编码器(380)等对高频带(312)的后续处理,并且语音输入(300)直接提供由预测滤波器(360)滤波的输入值。
图3的编码器系统(300)包括两个线性预测编码(“LPC”)分析模块(320、322),其被配置为针对相应频带(311、312)确定LP系数。在一些示例实现方式中,每个LPC分析模块(320、322)使用五毫秒的前瞻窗口来计算白化系数。可替代地,LPC分析模块(320、322)被配置为以某种其他方式来确定LP系数。如果滤波器组(310)将语音输入(305)划分成更多的频带(或被省略),则编码器系统(300)可以包括用于相应频带的更多的LPC分析模块。如果滤波器组(310)被旁路(或省略),则编码器系统(300)可包括用于单个频带的单个LPC分析模块(360),即所有语音输入(305)。
LP系数量化模块(325)被配置为对LP系数进行量化,针对相应频带产生量化的LP系数(327、328)(或者如果滤波器组(310)被旁路或忽略,则为所有语音输入(305))。取决于实现方式,LP系数量化模块(325)可以使用量化操作(例如,矢量量化、标量量化)、预测操作和域转换操作(例如,转换为线谱频率(“LSF”)域)以量化LP系数的各种组合中的任一种。
图3的编码器系统(300)包括两个预测滤波器(360、362),例如,白化滤波器A(z)。预测滤波器(360、362)被配置为根据量化的LP系数(327、328)来对基于语音输入的输入值进行滤波。滤波会产生残差值(367、368)。在图3中,低频带预测滤波器(360)被配置为根据低频带(311)的量化的LP系数(327)对低频带(311)中的输入值进行滤波,或者如果滤波器组(310)被旁路或省略,则根据量化的LP系数(327)直接从语音输入(305)对输入值进行滤波,以产生(低频带)残差值(367)。高频带预测滤波器(362)被配置为根据高频带(312)的量化的LP系数(328)对高频带(312)中的输入值进行滤波,以产生高频带残差值(368)。如果滤波器组(310)被配置为将语音输入(305)划分为更多频带,则编码器系统(300)可以包括针对相应频带的更多预测滤波器。如果省略滤波器组(310),则编码器系统(300)可以包括用于语音输入(305)的整个范围的单个预测滤波器。
基音分析模块(330)被配置为执行基音分析,从而产生基音循环信息(336)。在图3中,基音分析模块(330)被配置为与LPC分析并行地处理语音输入(305)的低频带(311)。可替代地,基音分析模块(330)可以被配置为处理其他信息,例如语音输入(305)。本质上,基音分析模块(330)确定基音循环的序列,以使得相邻循环的对之间的相关性最大化。基音循环信息(336)可以是例如与基音循环相对应的子帧长度的集合,或者是在基音分析模块(330)的输入中关于基音循环的某种其他类型的信息。基音分析模块(330)也可以被配置为产生相关性值。基音量化模块(335)被配置为量化基音循环信息(336)。
清浊决策模块(340)被配置为执行清浊分析,从而产生清浊决策信息(346)。残差值(367、368)使用适用于浊音语音内容的模型或适用于清音内容的模型进行编码。清浊决策模块(340)被配置为确定要使用哪种模型。取决于实现方式,清浊决策模块(340)可以使用各种标准中的任何一种来确定要使用哪种模型。在图3的编码器系统(300)中,在逐帧的基础上,清浊决策信息(346)指示残差编码器(380)是否应将残差值(367、368)的帧编码为浊音语音内容或清音语音内容。可替代地,清浊决策模块(340)根据其他定时来产生清浊决策信息(346)。
成帧器(370)被配置为将残差值(367、368)组织为可变长度帧。特别地,成帧器(370)被配置为至少部分基于清浊决策信息(346)来设置成帧策略(浊音或清音),然后为残差值的当前帧设置帧长(367、368)并至少部分地基于基音循环信息(336)和残差值(367、368)设置当前帧的子帧的子帧长度。在比特流(395)中,每子帧用信号发送一些参数,而每帧用信号发送其他参数。在一些示例实现方式中,成帧器(370)在输入缓冲器中查看当前批次的语音输入(305)(以及来自前一批次的任何剩余)的残差值(367、368)。
如果成帧策略是浊音,则成帧器(370)被配置为至少部分地基于基音循环信息来设置子帧长度,以使得每个子帧都针对一个基音周期包括多组残差值(367、368)。这促进以基音同步的方式进行编码。(使用基音同步子帧可以促进分组丢失隐藏,因为此类操作通常会生成基音循环的整数计数。类似地,使用基音同步子帧可以促进时间压缩拉伸操作,因为此类操作通常会删除基音循环的整数计数)
成帧器(370)还被配置为将当前帧的帧长度设置为从1到w的子帧的整数计数,其中,w取决于实现方式(例如,其对应于两毫秒的最小子帧长度或某个其他毫秒计数)。在一些示例实现方式中,成帧器(370)被配置为设置子帧长度以编码每帧基音循环的整数计数,将尽可能多的子帧打包到当前帧中,同时每子帧具有单个基音周期。例如,对于20毫秒的帧长度,如果基音周期为4毫秒,则当前帧包括五个基音周期的残差值(367、368)。作为另一个示例,对于18毫秒的帧长度,如果基音周期为六毫秒,则当前帧包括三个基音周期的残差值(367、368)。实际上,帧长度受成帧器(370)的前瞻窗口限制(例如,新批次的残差值的20毫秒加上前一批次的剩余量)。
子帧长度被量化。在一些示例实现方式中,对于浊音帧,子帧长度被量化为具有以32kHz采样的信号的整数长度,并且子帧长度的总和具有以8kHz采样的信号的整数长度。因此,子帧的长度是1/32毫秒的倍数,而帧的长度是1/8毫秒的倍数。可替代地,浊音内容的子帧和帧可以具有其他长度。
如果成帧策略是清音的,则成帧器(370)被配置为根据不同的方法来设置帧的帧长度和帧的子帧的子帧长度,这可以适用于清音内容。例如,帧长度可以具有均匀或动态的大小,并且子帧的子帧长度对于子帧可以相等或可变。
在一些示例实现方式中,尽管各个帧的长度可以不同,但是平均帧长度为大约20毫秒。使用可变大小的帧可以提高编码效率,简化编解码器设计,并促进独立地对每个帧进行编码,这可以帮助语音解码器进行丢包隐藏和时标修改。
一帧的子帧中未包含的任何残差值都留给下一帧中的编码。因此,成帧器(370)被配置为缓冲任何未使用的残差值,并将它们放在残差值的下一帧之前。成帧器(370)可以接收新的基音循环信息(336)和清浊决策信息(346),然后做出关于帧/子帧长度和下一帧的成帧策略的决策。
可替代地,成帧器(370)被配置为使用某种其他方法将残差值(367、368)组织为可变长度帧。
残差编码器(380)被配置为编码残差值(367、368)。图4示出了残差编码器(380)中的残差值(367、368)的编码阶段,其包括在浊音语音的路径中的编码阶段和在清音语音的路径中的编码阶段。残差编码器(380)被配置为基于被提供给残差编码器(380)的清浊决策信息(346)来选择路径之一。
如果残差值(377、378)用于浊音语音,则残差编码器(380)包括不同频带中残差值的单独处理路径。在图4中,低频带残差值(377)和高频带残差值(378)大多在不同的处理路径中进行编码。如果滤波器组(310)被旁路或省略,用于语音输入(305)的整个范围内的残差值(377)被编码。在任何情况下,对于低频带(或者,如果该滤波器组(310)被旁路或省略,则为语音输入(305)),由于一帧被划分为每个包含一个基音循环的子帧,所以以基音同步的方式对残差值(377)进行编码。
变频器(410)被配置为将一维(“1D”)频率变换应用于残差值(377)的一个或多个子帧,由此产生相应子帧的复幅度值。在一些示例性实现方式中,1D频率变换是傅立叶变换的变化形式(例如,离散傅立叶变换(“DFT”)、快速傅立叶变换(“FFT”)),其没有重叠,或者可替代地,有重叠。可替代地,1D频率变换是从相应子帧的残差值(377)产生频域值的某个其他的频率变换。通常,子帧的复幅度值包括:对于在一定频率范围内的每个频率,(1)表示在该频率下余弦的幅度的实数值,以及(2)表示在该频率下正弦的幅度的虚数值)。因此,每个频率分组(bin)包含用于一个谐波的复幅度值。对于完全周期信号,在每个分组中的复幅度值跨子帧越保持恒定。如果子帧是彼此的拉伸或压缩的版本,则复幅度值也保持恒定。最低的分组(在0Hz)可以忽略,并且在对应的残差解码器中设置为零。
变频器(410)进一步被配置为至少部分地基于相应子帧的复幅度值来确定相应子帧的幅度值集合(414)和一个或多个相位值集合(412)。对于频率,幅度值表示在该频率下组合的余弦和正弦的幅度,并且相位值表示在该频率下余弦和正弦的相对比例。在残差编码器(380)中,幅度值(414)和相位值(412)被进一步单独编码。
相位编码器(420)被配置为编码一个或多个相位值集合(412),以产生相位值集合(412)的量化参数(384)。相位值集合可以用于低频带(311)或语音输入的整个范围(305)。相位编码器(420)可以每子帧编码一个相位值集合(412)或针对一帧编码一个相位值集合(412)。在这种情况下,用于该帧的子帧的复幅度值可以被平均或以其他方式聚合,并且可以从聚合的复幅度值来确定的帧的相位值集合(412)。部分IV详细解释了相位编码器(420)的操作。特别地,相位编码器(420)可以被配置为执行操作,以省略具有高于截止频率的频率的相位值集合(412)中的任何相位值。可以至少部分地基于编码数据的目标比特率、来自基音分析模块(330)的基音循环信息(336)和/或其他标准来选择截止频率。此外,相位编码器(420)可以被配置为执行操作以使用线性分量结合基函数的加权和来表示相位值集合(412)中的至少一些相位值。在这种情况下,相位编码器(420)可以被配置为执行操作以:使用延迟决策方法来确定对基函数加权的系数的集合,设置对基函数加权的系数的计数(至少部分地基于编码数据的目标比特率),和/或使用至少部分基于线性相位度量的成本函数来确定对该基函数加权的候选系数集的得分。
幅度编码器(430)被配置为对相应子帧的幅度值集合(414)进行编码,从而为幅度值集合(414)产生量化参数(385)。取决于实现方式,幅度编码器(430)可以使用量化操作(例如,矢量量化、标量量化)、预测操作和域转换操作(例如,转换到频域)的各种组合中的任何一个来对相应子帧的幅度值集合(414)进行编码。
变频器(410)还可被配置为产生用于残差值(377)的相关性值(416)。相关性值(416)提供了残差值(377)的一般特征的度量。通常,相关性值(416)测量跨子帧的复幅度值的相关性。在一些示例实现方式中,相关性值(416)是在以下三个频带处测量的互相关:0-1.2kHz、1.2-2.6kHz和2.6-5kHz。可替代地,可以在更多或更少的频带中测量相关性值(416)。
稀疏度评估器(440)被配置为产生用于残差值(377)的稀疏度值(442),这提供了残差值(377)的一般特征的另一度量。通常,稀疏度值(442)量化残差值(377)之中能量在时域中的扩散程度。换句话说,稀疏度值(442)量化了残差值(377)中的能量分布的比例。如果非零残差值很少,则稀疏度值高。如果有许多非零残差值,则稀疏度值低。在一些示例实现方式中,稀疏度值(442)是残差值(377)的平均绝对值与均方根值之比。可以针对残差值(377)的每个子帧在时域中计算稀疏度值(442),然后对帧的子帧进行平均或以其他方式进行聚合。可替代地,可以以某种其他方式(例如,作为非零值的百分比)来计算稀疏度值(442)。
相关性/稀疏度编码器(450)被配置为对稀疏度值(442)和相关性值(416)进行编码,从而产生用于稀疏度值(442)和相关性值(416)的一个或多个量化参数(386)。在一些示例实现方式中,每帧联合地对相关性值(416)和稀疏度值(442)进行矢量量化。当重构高频信息时,可以在语音解码器处使用相关性值(416)和稀疏度值(442)。
对于浊音语音的高频带残差值(377),编码器系统(300)依赖于通过带宽扩展的解码器重构,如下所述。在残差编码器(380)中的单独路径中处理高频带残差值(378)。能量评估器(460)被配置为例如每帧或每子帧测量高频带残差值(378)的能级。能级编码器(470)被配置为量化高频带能级(462),从而产生量化的能级(387)。
如果残差值(377、378)用于清音语音,则残差编码器(380)包括用于残差值的一个或多个单独的处理路径(未示出)。取决于实现方式,残差编码器(380)中的清音路径可以使用滤波操作、量化操作(例如,矢量量化、标量量化)和能量/噪声估计操作的各种组合中的任何一种来对清音语音的残差值(377、378)进行编码。
在图3和图4中,示出了残差编码器(380)处理低频带残差值(377)和高频带残差值(378)。可替代地,残差编码器(380)可以处理更多频带或单个频带(例如,如果滤波器组(310)被旁路或省略)中的残差值。
返回到图3的编码器系统(300),一个或多个熵编码器(390)被配置为对由编码器系统(300)的其他组件生成的编码参数(327、328、336、346、384-389)进行熵处理。例如,可以使用范围编码器对由编码器系统(300)的其他组件生成的量化参数进行熵编码,该范围编码器使用表示量化参数的值被编码的概率的累积质量函数。可以使用具有不同背景噪声水平的语音信号数据库来训练累积质量函数。可替代地,以某种其他方式对由编码器系统(300)的其他组件生成的参数(327、328、336、346、384-389)进行熵编码。
结合熵编码器,复用器(“MUX”)(391)将熵编码的参数复用到比特流(395)中。在存储器中实现的输出缓冲器被配置为存储编码数据,以作为比特流的一部分输出(395)。在一些示例实现方式中,针对比特流(395)的编码数据的每个分组被独立地编码,这帮助避免错误传播(一个分组的丢失影响后续分组的重构语音和话音质量),但是可以包含用于多个帧(例如,三个帧或某个其他帧计数)的编码数据。当单个分组包含多个帧时,熵编码器(390)可以使用条件编码来提高该分组中的第二帧和后续帧的编码效率。
由编码器系统(300)产生的编码数据的比特率取决于语音输入(305)和目标比特率。为了调整编码数据的平均比特率以使其与目标比特率匹配,速率控制器(未示出)可以将最近的平均比特率与目标比特率进行比较,然后在多个编码简档之中进行选择。所选择的编码简档可以在比特流中被指示(395)。编码简档可以定义分配给由编码器系统(300)设置的不同参数的比特。例如,编码简档可以定义:相位量化截止频率,用于将相位值集合表示为基函数的加权和(作为复幅度值的一部分)的系数计数,和/或另一个参数。
取决于实现方式和所期望的压缩类型,编码器系统(300)的模块可以被添加、省略、分成多个模块、与其他模块组合、和/或用类似的模块替换。在可替代的实施例中,具有不同模块和/或模块的其他配置的编码器执行一种或多种所描述的技术。具体的编码器实施例通常使用编码器系统(300)的变体或补充版本。编码器系统(300)内的模块之间所示的关系指示编码器系统(300)中的一般信息流;为了简单起见,未示出其他关系。
IV.语音编码器中的相位量化的示例。
本部分描述语音编码期间的相位量化的创新。在许多情况下,即使在带宽不足或有传输质量问题的网络上递送编码数据时,创新也可以提高低比特率场景中语音编解码器的性能。本部分中描述的创新分为两大组创新,其可以单独使用或组合使用。
根据第一组创新,当语音编码器对相位值集合进行编码时,语音编码器仅量化和编码低于截止频率的低频相位值。基于至少一些低频相位值,在语音解码器处合成高频相位值(高于截止频率)。通过忽略高频相位值(并在基于低频相位值的解码期间对其进行合成),语音编码器可以高效地表示整个相位值范围,这可以改善低比特率场景下的速率失真性能。截止频率可以预定义且不变。或者,为了提供用于以不同目标比特率编码语音或编码具有不同特性的语音的灵活性,语音编码器可以至少部分基于编码数据的目标比特率、基音循环信息和/或其他标准来选择截止频率。
根据第二组创新,当语音编码器对相位值集合进行编码时,语音编码器使用线性分量结合基函数的加权和来表示至少一些相位值。使用基函数的加权和以及线性分量,语音编码器可以以紧凑而灵活的方式准确表示相位值,这可以提高低比特率场景下的速率失真性能。尽管可以将语音编码器实现为在确定加权和的系数时使用各种成本函数中的任何一种,但是基于线性相位度量的成本函数通常会得到与所表示的相位值非常相似的基函数的加权和。尽管可以将语音编码器实现为在确定加权和的系数时使用各种方法中的任何一种,但是延迟决策方法通常以计算高效的方式找到合适的系数。对基函数加权的系数的计数可以被预定义并保持不变。或者,为了提供用于以不同目标比特率编码语音的灵活性,系数的计数可以取决于目标比特率。
A.忽略高频相位值,设置截止频率。
当对相位值集合进行编码时,语音编码器可以对低于截止频率的低频相位值进行量化和编码,并且忽略高于截止频率的高频相位值。被忽略的高频相位值可以基于至少一些较低频率相位值在语音解码器处合成。
被编码的相位值集合可以是用于一帧的相位值集合或用于一帧的子帧的相位值集合。如果相位值集合用于一帧,则可以直接从该帧的复幅度值计算出相位值集合。或者,可以通过聚合(例如,进行平均)帧的子帧的复幅度值、然后从聚合的复幅度值计算帧的相位值来计算相位值集合。例如,为了量化用于帧的相位值集合,语音编码器确定帧的子帧的复幅度值,对子帧的复幅度值进行平均,并且然后从用于帧的平均复幅度值计算出帧的相位值。
当省略高频相位值时,语音编码器丢弃高于截止频率的相位值。在确定相位值后,可以丢弃高频相位值。或者,可以通过丢弃高于截止频率的复幅度值(例如,平均复幅度值)来丢弃高频相位值,并且从不确定对应的高频相位值。无论哪种方式,高于截止频率的相位值都会被丢弃,因此会从比特流中的编码数据中省略。
尽管截止频率可以预先确定并且不改变,但是自适应地改变截止频率存在优点。例如,为了提供用于以不同目标比特率编码语音或编码具有不同特性的语音的灵活性,语音编码器可以至少部分基于编码数据的目标比特率和/或基音循环信息来选择截止频率,其可以表示平均基音频率。
通常,语音信号中的信息以基本频率及其一些倍数(谐波)进行传送。语音编码器可以设置截止频率,以便保留重要信息。例如,如果一帧包含高频语音内容,则语音编码器会设置更高的截止频率,以便为该帧保留更多的相位值。另一方面,如果帧仅包括低频语音内容,则语音编码器设置较低的截止频率以节省比特。这样,在一些示例实现方式中,截止频率可以以补偿由于子帧的复幅度值的平均导致的信息丢失的方式而波动。如果该帧包含高频语音内容,则基音周期短,并且许多子帧的复幅度值进行了平均。平均值可能无法代表子帧中的特定子帧中的值。由于信息可能已因平均而丢失,因此截止频率较高,以便保留剩余的信息。另一方面,如果帧包含低频语音内容,则基音周期较长,并且对较少子帧的复幅度值进行平均。因为由于平均而趋向于较少的信息丢失,所以截止频率可以较低,同时仍具有足够的质量。
关于目标比特率,如果目标比特率较低,则截止频率较低。如果目标比特率较高,则截止频率较高。这样,被分配为代表高频相位值的比特可以与可用比特率成正比地变化。
在一些示例实现方式中,截止频率落在962Hz(对于低目标比特率和低的平均基音频率)至4160Hz(对于高目标比特率和高的平均基音频率)的范围内。可替代地,截止频率可以在某个其他范围内变化。
语音编码器可以在逐帧的基础上设置截止频率。例如,即使目标比特率(例如,响应于由语音编码器外部的某个组件向语音编码器报告的网络条件而设置)较不频繁地改变,语音编码器也可以将帧的截止频率设置为帧到帧的平均基音频率变化。可替代地,截止频率可以在某个其他基础上改变。
语音编码器可以使用查找表来设置截止频率,该查找表将不同的截止频率与不同的目标比特率和平均基音频率相关联。或者,语音编码器可以根据规则、逻辑等以某种其他方式设置截止频率。类似地,可以基于语音解码器具有的关于目标比特率和基音循环的信息,在语音解码器处类似地导出截止频率。
根据实现方式,可以将恰好在截止频率处的相位值视为高频相位值之一(省略)或视为低频相位值之一(量化和编码)。
B.使用基函数的加权和表示相位值。
在对相位值集合进行编码时,语音编码器可以将相位值集合表示为基函数的加权和。例如,当基函数是正弦函数时,量化的相位值集合P
其中,N是对基函数加权的量化系数(以下称为“系数”)的计数,K
使用量化的相位值集合P
为了对相位值集合进行编码,语音编码器找到系数K
如果n=1,则|K
如果n=2,则|K
如果n=3,则|K
如果n≥4;则|K
K
尽管系数K
在评估系数K
理论上,语音编码器可以在整个参数空间上对系数K
通常,对于延迟决策方法,语音编码器会迭代执行操作以找到多个阶段中的系数K
图5示出了语音编码器的示例(500),该语音编码器使用延迟决策方法来找到系数以将相位值集合表示为基函数的加权和。为了确定系数集合K
在图5所示的示例中,对于第一阶段,语音编码器评估从-j到j的K
除了找到系数K
最后,语音编码器对已经被量化的系数K
C.语音编码中相位量化的示例技术。
图6a示出了用于语音编码的通用技术(601),其可以包括如图6b、图6c或图6d所示的附加操作。图6b示出了用于语音编码的通用技术(602),其包括省略具有高于截止频率的频率的相位值。图6c示出了用于语音编码的通用技术(603),其包括使用基函数的加权和以及线性分量来表示相位值。图6d示出了用于语音编码的更具体的示例技术(604),其包括省略高频相位值(其高于截止频率)并且将低频相位值(其低于截止频率)表示为基函数的加权和。可以由如参考图3和图4所描述的语音编码器或另一语音编码器来执行技术(601-604)。
参考图6a,语音编码器接收(610)语音输入。例如,在计算机系统的存储器中实现的输入缓冲器被配置为接收和存储语音输入。
语音编码器对语音输入进行编码(620)以产生编码数据。作为编码(620)的一部分,语音编码器根据LP系数基于语音输入对输入值进行滤波。输入值可以是例如由滤波器组产生的语音输入的频带。可替代地,输入值可以是由语音编码器接收到的语音输入。在任何情况下,滤波都会产生残差值,语音编码器会对这些残差值进行编码。图6b-6d示出了可以作为残差值的编码(620)阶段的一部分执行的操作的示例。
语音编码器存储(640)编码数据,以作为比特流的一部分输出。例如,在计算机系统的存储器中实现的输出缓冲器存储编码数据以供输出。
参考图6b,语音编码器确定(621)用于残差值的相位值集合。相位值集合可以用于残差值的子帧或残差值的帧。例如,为了确定帧的相位值集合,语音编码器将频率变换应用于当前帧的一个或多个子帧,这会产生用于相应子帧的复幅度值。频率变换可以是傅立叶变换的变体(例如,DFT、FFT),或者是产生复幅度值的某个其他频率变换。然后,语音编码器对相应子帧的复幅度值进行平均或以其他方式聚合。可替代地,语音编码器可以通过其他方式聚合用于子帧的复幅度值。最后,语音编码器至少部分地基于聚合的复幅度值来计算相位值集合。可替代地,语音编码器以某个其他方式确定相位值集合,例如,通过向整个帧应用频率变换,而不将当前帧拆分为子帧,并从用于帧的复幅度值来计算相位值集合。
语音编码器对相位值集合进行编码(635)。在这样做时,语音编码器会忽略具有高于截止频率的频率的任何相位值集合。语音编码器可以至少部分地基于用于编码数据的目标比特率、基音循环信息和/或其他标准来选择截止频率。高于截止频率的频率处的相位值被丢弃。低于截止频率的频率处的相位值被编码,例如如参考6c所描述的。取决于实现方式,可以将恰好在截止频率处的相位值视为高频相位值之一(省略)或视为低频相位值之一(量化和编码)。
参考图6c,语音编码器确定(621)用于残差值的相位值集合。相位值集合可以用于残差值的子帧或残差值的帧。例如,语音编码器确定相位值集合,如参考图6b所述的。
语音编码器对相位值集合进行编码(636)。在这样做时,语音编码器使用基函数的加权和以及线性分量来表示相位值集合中的至少一些相位值。例如,基函数是正弦函数。可替代地,基函数是余弦函数或某种其他类型的基函数。表示为基函数的加权和的相位值可以是低频相位值(如果丢弃了高频相位值)、整个相位值范围或某个其他相位值范围。
为了对相位值集合进行编码,语音编码器可以确定对基函数加权的系数集合,并且还确定对线性分量进行参数化的偏移值和斜率值。然后,语音编码器可以对系数集合、偏移值和斜率值进行熵编码。可替代地,语音编码器可以使用对基函数加权的系数集合连同定义线性分量的参数的某个其他组合(例如,无偏移值、或无斜率值、或使用其他参数)对相位值集合进行编码。或者,结合对基函数加权的系数集合和线性分量,语音编码器仍可以使用其他参数来表示相位值集合。
为了确定对基函数加权的系数集合,语音编码器可以使用延迟决策方法(如上所述)或另一种方法(例如,针对系数集合的参数空间的完全搜索)。当确定对基函数加权的系数集合时,语音编码器可以使用基于线性相位度量(如上所述)的成本函数或另一成本函数。语音编码器可以至少部分地基于编码数据的目标比特率(如上所述)和/或其他标准来设置对基函数加权的系数的计数。
在图6d的示例性技术(604)中,当编码用于残差值的相位值集合时,语音编码器会忽略频率高于截止频率的高频相位值,并将低频相位值表示为基函数的加权和。
语音编码器将频率变换应用于(622)一帧的一个或多个子帧,这产生相应子帧的复幅度值。频率变换可以是傅立叶变换的变体(例如,DFT、FFT),或者是产生复幅度值的某个其他频率变换。然后,语音编码器对帧的子帧的复幅度值进行平均(623)。接下来,语音编码器至少部分地基于平均的复幅度值来计算(624)帧的相位值集合。
语音编码器至少部分地基于用于编码数据的目标比特率和/或基音循环信息来选择(628)截止频率。然后,语音编码器丢弃(629)频率高于截止频率的任何相位值集合。因此,丢弃高于截止频率的频率处的相位值,但会进一步编码低于截止频率的频率处的相位值。根据实现方式,可以将恰好在截止频率处的相位值视为高频相位值之一(丢弃)或视为低频相位值之一(量化和编码)。
为了对低频相位值(即低于截止频率的相位值)进行编码,语音编码器使用基函数的加权和以及线性分量表示低频相位值。语音编码器至少部分地基于编码数据的目标比特率,设置(630)对基函数加权的系数的计数。语音编码器使用(631)延迟决策方法来确定对基函数加权的系数集合。语音编码器还确定(632)对线性分量进行参数化的偏移值和斜率值。然后,语音编码器对系数集合、偏移值和斜率值进行编码(633)。
语音编码器可以在逐帧的基础上重复图6d所示的技术(604)。语音编码器可以在逐帧的基础上或在某个其他基础上重复图6a-6c所示的任何技术(601-603)。
V.示例语音解码器系统。
图7示出了示例语音解码器系统(700),可以结合该示例语音解码器系统来实现所描述的一些实施例。解码器系统(700)可以是能够以诸如用于实时通信的低延时模式、转码模式和用于从文件或流回放媒体的较高延时模式之类的多种模式中的任何一种进行操作的通用语音解码工具,或者解码器系统(700)可以是适用于一种这样的模式的专用解码工具。在一些示例实现方式中,解码器系统(700)可以通过各种类型的连接来回放高质量的话音和音频,各种类型的连接包括在带宽不足(例如,由于拥塞或高丢包率导致的低比特率)或传输质量问题(例如,由于传输噪声或高抖动)的网络上的连接。特别地,在一些示例实现方式中,解码器系统(700)以两种低延时模式之一工作,即低比特率模式或高比特率模式。低比特率模式使用参考图7和图8所描述的组件。
解码器系统(700)可以使用GPU硬件或专用硬件实现为操作系统模块的一部分、应用库的一部分、独立应用的一部分。总体而言,解码器系统(700)被配置为接收编码数据作为比特流(705)的一部分,对编码数据进行解码以重构语音,并存储重构语音(775)以用于输出。解码器系统(700)包括各种组件,其使用一个或多个处理器来实现并且被配置为对编码数据进行解码以重构语音。
解码器系统(700)将编码数据临时存储在输入缓冲器中,该输入缓冲器在解码器系统(700)的存储器中实现并且被配置为接收编码数据作为比特流(705)的一部分。时不时地,由解复用器(“DEMUX”)(711)和一个或多个熵解码器(710)从输出缓冲器中读取编码数据。解码器系统(700)将重构的语音(775)临时存储在输出缓冲器中,该输出缓冲器在解码器系统(300)的存储器中实现并且被配置为存储重构的语音(775)以用于输出。周期性地,从输出缓冲器中读取重构语音的输出帧中的样本值(775)。在一些示例实现方式中,对于作为比特流(705)的一部分到达的编码数据的每个分组,分组一旦到达,解码器系统(700)就对子帧参数进行解码和缓冲(例如,执行熵解码操作、恢复参数值)。当从解码器系统(700)请求输出帧时,解码器系统(700)一次解码一个子帧,直到已经生成了重构语音(775)的足够的输出样本值并将其存储在输出缓冲器中以满足请求。解码操作的定时具有一些优点。通过在分组到达时对子帧参数进行解码,当请求输出帧时,减少了用于解码操作的处理器负载。这样可以降低输出缓冲器下溢(由于处理约束,数据无法及时可用以进行回放)的风险并允许对操作的更严格的调度。另一方面,响应于请求而“按需”解码子帧增加了已经接收到包含用于那些子帧的编码数据的分组的可能性。可替代地,解码器系统(700)的解码操作可以遵循不同的定时。
在图7中,解码器系统(700)使用可变长度的帧。可替代地,解码器系统(700)可以使用均匀长度的帧。
在一些示例实现方式中,解码器系统(700)可以重构超宽带语音(根据以32kHz采样的输入信号)或宽带语音(根据以16kHz采样的输入信号)。在解码器系统(700)中,如果重构的语音(775)用于宽带信号,则可以跳过由残差解码器(720)、高频带合成滤波器(752)等对高频带的处理,并且滤波器组(760)可以被旁路。
在解码器系统(700)中,DEMUX(711)被配置为从比特流(705)读取编码数据并从编码数据解析参数。结合DEMUX(711),一个或多个熵解码器(710)被配置为对解码的参数进行熵解码,从而产生由解码器系统(700)的其他组件使用的量化参数(712、714-719、737、738)。例如,可以使用范围解码器对由熵解码器(710)解码的参数进行熵解码,该范围解码器使用表示参数的值被解码的概率的累积质量函数。可替代地,以某种其他方式对由熵解码器(710)解码的量化参数(712、714-719、737、738)进行熵解码。
残差解码器(720)被配置为在逐子帧的基础上对残差值(727、728)进行解码,或者可替代地,在逐帧的基础上或在某个其它基础上对残差值(727、728)进行解码。特别地,残差解码器(720)被配置为对相位值集合进行解码并至少部分地基于该相位值集合来重构残差值(727、728)。图8示出残差解码器(720)中残差值(727、728)的解码阶段。
在一些地方,残差解码器(720)包括用于在不同频带中的残差值的不同的处理路径。在图8中,至少在重构或生成了相应频带的参数之后,在不同的路径中对低频带残差值(727)和高频带残差值(728)进行解码。在一些示例性实现方式中,对于超宽带语音,残差解码器(720)产生低频带残差值(727)和高频带残差值(728)。然而,对于宽带语音,残差解码(720)产生用于一个频带的残差值(727)。可替代地(例如,如果滤波器组(760)组合了两个以上的频带),则残差解码器(720)可以解码用于更多频带的残差值。
在解码器系统(700)中,使用适合于浊音语音内容的模型或适合于清音语音内容的模型来重构残差值(727、728)。残差解码器(720)包括在用于浊音语音的路径中的解码阶段以及在用于清音语音的路径中的解码阶段(未示出)。残差解码器(720)被配置为基于提供给残差解码器(720)的清浊决策信息(712)选择路径之一。
如果残差值(727、728)用于浊音语音,则使用幅度解码器(810)、相位解码器(820)和恢复/平滑模块(840)来重构复幅度值。然后,复幅度值由逆变频器(850)变换,以产生时域残差值,这些残差值由噪声添加模块(855)处理。
幅度解码器(810)被配置为使用用于幅度值集合(812)的量化参数(715)来重构用于帧的一个或多个子帧的幅度值集合(812)。取决于实现方式以及通常在编码期间执行的反转操作(由于量化而有一些损失),幅度解码器(810)可以使用逆量化操作(例如,逆矢量量化、逆标量量化)、预测操作以及域转换操作(例如,从频域转换)的各种组合中的任何一种来解码用于相应子帧的幅度值集合(715)。
相位解码器(820)被配置为使用用于相位值集合(822)的量化参数(716)来解码一个或多个相位值集合(822)。相位值集合可以用于低频带或整个范围的重构的语音(775)。相位解码器(820)可以针对每个子帧解码一个相位值集合(822)或针对一帧解码一个相位值集合(822)。在这种情况下,用于该帧的相位值集合(822)可以表示根据该帧的子帧的平均或以其他方式聚合的复幅度值来确定的相位值(如第III部分中所述),并且解码后的相位值(822)可以针对帧的相应子帧重复。部分VI详细解释了相位解码器(820)的操作。特别地,相位解码器(820)可以被配置为执行操作以使用基函数的加权和以及线性分量来重构相位值集合中的至少一些相位值(例如,低频相位值、整个相位值范围、或某个其他相位值范围)。在这种情况下,对基函数加权的系数的计数可以至少部分地基于用于编码数据的目标比特率。此外,相位解码器(820)可以被配置为执行操作以使用相位值集合的第一子集(例如,低频相位值)中的至少一些来合成相位值集合的第二子集(例如,高频相位),其中,第二子集的每个相位值都具有高于截止频率的频率。可以至少部分地基于编码数据的目标比特率、基音循环信息(722)和/或其他标准来确定截止频率。取决于截止频率,高频相位值可以跨越高频带,或者高频相位值可以跨越低频带和高频带的一部分。
恢复和平滑模块(840)被配置为至少部分地基于幅度值集合(812)和相位值集合(814)来重构复幅度值。例如,通过采用复指数将用于帧的相位值集合(814)转换为复数域并乘以谐波幅度值(812)来产生用于低频带的复幅度值。可以将低频带的复幅度值作为高频带的复幅度值重复。然后,使用被去量化(dequantize)的高频带能级(714),可以缩放高频带复幅度值,使得它们更接近地近似高频带的能量。可替代地,恢复和平滑模块(840)可以针对更多的频带(例如,如果滤波器组(760)组合了两个以上的频带)或对于单个频带(例如,如果滤波器组(760)被旁路或省略)产生复幅度值。
恢复和平滑模块(840)还被配置为至少部分地基于基音循环信息(722)和/或跨边界的幅度值的差异来自适应地使复幅度值平滑。例如,跨子帧边界(包括也是帧边界的子帧边界)来使复幅度值平滑。
对于跨子帧边界进行平滑,平滑的量可以取决于相邻子帧中的基音频率。基音循环信息(722)可以每帧用信号发送,并且指示例如子帧的子帧长度或其他频率信息。恢复和平滑模块(840)可以被配置为使用基音循环信息(722)来控制平滑量。在一些示例实现方式中,如果子帧之间的基音频率有大变化,则由于存在实信号变化(real signal change),所以复幅度值不会被平滑那么多。另一方面,如果子帧之间的基音频率变化不大,则由于不存在实信号变化,因此可以更多地使复幅度值平滑。这种平滑趋向于使复幅度值更具有周期性,从而产生噪声较少的语音。
对于跨子帧边界进行平滑,平滑的量还可以取决于子帧之间边界的两侧上的幅度值。在一些示例性实现方式中,如果跨子帧之间的边界的幅度值存在大变化,则由于存在实信号变化,所以复幅度值不会被平滑很多。另一方面,如果跨子帧之间的边界的幅度值变化不大,则由于不存在实信号变化,因此可以更多地使复幅度值平滑。同样,在一些示例实现方式中,复幅度值在较低频率下更多地被平滑,而在较高频率下更少地被平滑。
可替代地,可以省略使复幅度值平滑。
逆变频器(850)被配置为将逆频率变换应用于复幅度值。这产生了低频带残差值(857)和高频带残差值(858)。在一些示例实现方式中,逆1D频率变换是逆傅立叶变换(例如,逆DFT、逆FFT)的变体,其没有重叠,或者可替代地,有重叠。可替代地,逆1D频率变换是某个其他逆频率变换,其从复幅度值产生时域残差值。逆变频器(850)可产生用于更多频带(例如,如果滤波器组(760)组合了两个以上频带)或单个频带(例如,如果滤波器组(760)被旁路或省略)的残差值。
相关性/稀疏度解码器(830)被配置为使用针对相关性值(837)和稀疏度值(838)的一个或多个量化参数(717)来对相关性值(837)和稀疏度值(838)进行解码。在一些示例实现方式中,使用共同表示相关性值(837)和稀疏度值(838)的矢量量化索引来恢复相关性值(837)和稀疏度值(838)。在部分III中描述了相关性值和稀疏度值的示例。可替代地,可以以某个其他方式恢复相关性值(837)和稀疏度值(838)。
噪声添加模块(855)被配置为至少部分地基于相关性值(837)和稀疏度值(838)将噪声选择性地添加到残差值(857、858)。在许多情况下,添加噪声可以减轻重构的语音中的金属声音(775)。
通常,相关性值(837)可用于控制向残差值(857、858)添加多少噪声(如果添加)。在一些示例实现方式中,如果相关性值(837)高(信号是谐波),则很少或没有噪声被添加到残差值(857、858)。在这种情况下,用于对浊音内容进行编码/解码的模型往往很好地工作。另一方面,如果相关性值(837)低(信号不是谐波),则更多的噪声被添加到残差值(857、858)。在这种情况下,用于对浊音内容进行编码/解码的模型不能很好地工作(例如,由于信号不是周期性的,因此进行平均是不合适的)。
通常,稀疏度值(838)可用于控制添加噪声的位置(例如,所添加的噪声如何在基音脉冲周围分布)。通常,噪声在其提高感知质量的位置被添加。例如,在强非零基音脉冲处添加噪声。例如,如果残差值(857、858)的能量稀疏(由高稀疏度值指示),则在强非零基音脉冲周围添加噪声,但不对其余残差值(857、858)添加噪声。另一方面,如果残差值(857、858)的能量不稀疏(由低稀疏度值指示),则噪声贯穿残差值(857、858)更均匀地分布。而且,通常,在较高的频率处可以比较低的频率处添加更多的噪声。例如,在较高的频率处添加了增加的噪声量。
在图8中,噪声添加模块(855)将噪声添加到用于两个频带的残差值。可替代地,噪声添加模块(855)可以将噪声添加到用于更多频带(例如,如果滤波器组(760)组合了两个以上的频带)或单个频带(例如,如果滤波器组(760)被旁路或省略)的残差值。
如果残差值(727、728)用于清音语音,则残差解码器(720)包括用于残差值的一个或多个不同的处理路径(未示出)。取决于实现方式以及通常在编码(由于量化而具有一些损失)期间执行的反转操作,残差解码器(720)中的清音路径可以使用逆量化操作(例如,逆矢量量化、逆标量量化)、能量/噪声替代操作和滤波操作的各种组合中的任何一种以对清音语音的残差值(727、728)进行解码。
在图7和图8中,示出了残差编码器(720)处理低频带残差值(727)和高频带残差值(728)。可替代地,残差编码器(380)可以处理更多频带或单个频带(例如,如果滤波器组(760)被旁路或省略)中的残差值。
返回图7,在解码器系统(700)中,LPC恢复模块(740)被配置为针对相应频带重构LP系数(或者如果不存在多个频带,则为全部重构的语音)。取决于实现方式以及通常在编码(由于量化而具有一些损失)期间执行的反转操作,LPC恢复模块(740)可以使用逆量化操作(例如,逆矢量量化、逆标量量化)、预测操作和域转换操作(例如,从LSF域转换)的各种组合中的任何一种来重构LP系数。
图7的解码器系统(700)包括两个合成滤波器(360、362),例如滤波器A
滤波器组(760)被配置为组合多个频带(757、758),所述多个频带(757、758)是通过合成滤波器(750、752)对对应频带中的残差值(727、728)进行滤波而得到的,从而产生重构的语音(765)。在图7中,滤波器组(760)被配置为组合两个相等的频带,即低频带(757)和高频带(758)。例如,如果重构的语音(775)用于超宽带信号,则低频带(757)可以包括0-8kHz范围内的语音,而高频带(758)可以包括在8-16kHz范围内的语音。可替代地,滤波器组(760)组合更多的频带和/或不相等的频带以合成重构的语音(775)。取决于实现方式,滤波器组(760)可以使用各种类型的HR或其他滤波器中的任何一个。
后处理滤波器(770)被配置为选择性地对重构的语音(765)进行滤波,从而产生重构的语音(775)以用于输出。可替代地,可以省略后处理滤波器(770),并且输出来自滤波器组(760)的重构的语音(765)。或者,如果也省略了滤波器组(760),则来自合成滤波器(750)的输出提供重构的语音以用于输出。
取决于实现方式和期望的压缩类型,解码器系统(700)的模块可以:被添加、省略、划分成多个模块,与其他模块组合,和/或用类似模块替换。在替代实施例中,具有不同模块和/或模块的其他配置的解码器执行一种或多种所描述的技术。解码器的特定实施例通常使用解码器系统(700)的变体或补充版本。解码器系统(700)内的模块之间示出的关系指示解码器系统(700)中的一般信息流;为了简单起见,未示出其他关系。
VI.语音解码器中相位重构的示例。
本部分描述语音解码期间的相位重构方面的创新。在许多情况下,即使在带宽不足或有传输质量问题的网络上递送编码数据时,创新也可以提高低比特率场景中语音编解码器的性能。本部分中描述的创新分为两大组创新,其可以分别单独使用或组合使用。
根据第一组创新,当语音解码器解码相位值集合时,语音解码器使用基函数的加权和以及线性分量来重构相位值集合中的至少一些相位值。使用基函数的加权和以及线性分量,可以以紧凑而灵活的方式表示相位值,这可以提高低比特率情况下的速率失真性能。语音解码器可以解码对基函数加权的系数集合,然后在重构相位值时使用该系数集合。语音解码器还可以解码和使用定义线性分量的偏移值、斜率值和/或其他参数。对基函数加权的系数可以被预定义并保持不变。或者,为了提供用于以不同目标比特率编码/解码语音的灵活性,系数的计数可以取决于目标比特率。
根据第二组创新,当语音解码器解码相位值集合时,语音解码器重构低频相位值(其低于截止频率),然后使用至少一些低频相位值来合成高频相位值(其高于截止频率)。通过基于重构的低频相位值合成高频相位值,语音解码器可以高效地重构整个范围的相位值,这可以提高低比特率场景下的速率失真性能。截止频率可以预定义且不变。或者,为了提供用于以不同目标比特率编码/解码语音或编码/解码具有不同特性的语音的灵活性,语音解码器可以至少部分基于编码数据的目标比特率、基音循环信息和/或其他标准来确定截止频率。
A.使用基函数的加权和来重构相位值。
当解码相位值集合时,语音解码器可以使用基函数的加权和来重构该相位值集合。例如,当基函数是正弦函数时,量化的相位值集合Pi定义为:
其中,N是对基函数加权的量化系数(以下称“系数”)的计数,K
使用量化的相位值集合P
为了重构相位值集合,语音解码器对已经被量化的系数集合K
如果n=1,则|K
如果n=2,则|K
如果n=3,则|K
如果n≥4,则|K
可替代地,可以根据其他约束来限制系数K
尽管系数K
除了重构系数集合K
在一些示例实现方式中,语音解码器中的残差解码器至少部分地基于编码数据的目标比特率,来确定对基函数加权的系数的计数。残差解码器对系数集合、偏移值和斜率值进行解码。然后,残差解码器使用该系数集合、偏移值和斜率值来重构相位值的近似值。残差解码器应用系数K
B.合成高频相位值。
当解码相位值集合时,语音解码器可以使用至少一些低频相位值来重构低于截止频率的低频相位值,并合成高于截止频率的高频相位值。解码的相位值集合可以是用于帧的相位值集合或用于帧的子帧的相位值集合。低频相位值可以使用基函数的加权和重构(如上一部分中所述)或以某个其他方式重构。合成的高频相位值可以部分或完全替代在编码期间被丢弃的高频相位值。可替代地,合成的高频相位值可以延伸超过丢弃的相位值的频率、到更高的频率。
尽管截止频率可以是预定的且不变的,但是自适应地改变截止频率存在优点。例如,为了提供用于以不同目标比特率编码/解码语音或编码/解码具有不同特性的语音的灵活性,语音解码器可以至少部分基于编码数据的目标比特率和/或基音循环信息来确定截止频率,基音循环信息可以指示平均基音频率。例如,如果帧包括高频语音内容,则使用较高的截止频率。另一方面,如果帧仅包括低频语音内容,则使用较低的截止频率。关于目标比特率,如果目标比特率较低,则截止频率较低。如果目标比特率较高,则截止频率较高。在一些示例实现方式中,截止频率落在962Hz(对于低目标比特率和低的平均基音频率)到4160Hz(对于高目标比特率和高的平均基音频率)的范围内。可替代地,截止频率可以在某个其他范围内变化和/或取决于其他标准。
语音解码器可以在逐帧的基础上确定截止频率。例如,语音解码器可以将帧的截止频率确定为帧到帧的平均基音频率变化,即使目标比特率变化不那么频繁。可替代地,截止频率可以在某个其他基础上和/或取决于其他标准来改变。语音解码器可以使用查找表来确定截止频率,该查找表将不同的截止频率与不同的目标比特率和平均基音频率相关联。或者,只要在对应的语音编码器处类似地设置了截止频率,语音解码器就可以根据规则、逻辑等以某个其他方式确定截止频率。
取决于实现方式,可以将恰好在截止频率处的相位值视为高频相位值之一(合成)或低频相位值之一(根据比特流中的量化参数进行重构)。
取决于实现方式,可以以各种方式来合成高频相位值。图9a至9c示出用于合成高频相位值的示例性方法的特征(901-903),高频相位值具有高于截止频率的频率。在图9a-9c的简化示例中,低频相位值包括12个相位值:5 6 6 5 7 8 9 10 11 10 12 13。
为了合成高频相位值,语音解码器识别低频相位值的范围。在一些示例实现方式中,语音解码器识别已经被重构的低频相位值的频率范围的上半部,以潜在地增加或去除相位值以具有偶数个谐波。在图9a的简化示例中,低频相位值的上半部分包括六个相位值:9 10 11 10 12 13。可替代地,语音解码器可以识别已经被重构的低频相位值的某个其他范围。
语音解码器基于所识别的范围中的低频相位值来重复相位值,该范围从截止频率开始,并且一直继续到相位值集合中的最后一个相位值。所识别范围内的低频相位值可以重复一次或多次。如果所识别范围内的低频相位值的重复与相位谱的末端不完全对齐,则可以部分重复所识别范围内的低频相位值。在图9b中,重复在所识别的范围内的低频相位值以生成高频相位值,直到最后的相位值。在所识别范围内简单重复低频相位值可能引起相位谱突变,但是在典型情况下,原始相位谱中找不到这种突变。在图9b中,重复六个相位值:9 10 11 10 12 13引起相位值从13两次突然下降到9:5 6 6 5 7 8 9 10 11 10 12 139 10 11 10 12 13 9 10 11 10 12 13。
为了解决这个问题,语音解码器可以确定(作为模式)在所识别的低频相位值范围内的相邻相位值之间的差。即,对于所识别出的低频相位值范围内的每个相位值,语音解码器可以确定相对于先前相位值(按频率顺序)的差异。语音解码器然后可以重复相位值差,从截止频率开始,并且一直继续到相位值集合中的最后一个相位值。相位值差可以重复一次或多次。如果相位值差的重复不完全与相位谱的末端对齐,则可以部分重复相位值差。在重复相位值差之后,语音解码器可以对相邻相位值之间的相位值差进行集成以生成高频相位值。也就是说,对于每个高频相位值,从截止频率开始,语音解码器可以将对应的相位值差加到先前的相位值上(按频率顺序)。在图9c中,例如,对于所识别的范围内的六个相位值(9 10 11 10 12 13),相位值差为+1+1+1-1+2+1。从截止频率到相位谱的末端,相位值差重复两次:5 6 6 5 7 8 9 10 11 10 12 13 +1 +1 +1 -1+2 +1 +1 +1 +1 -1 +2 +1。然后,对相位值差进行集成以生成高频相位值:5 6 6 5 7 8 9 10 11 10 12 13 14 15 16 1517 18 19 20 21 20 22 23。
以此方式,语音解码器可以为整个范围的重构的语音重构相位值。例如,如果重构的语音是已划分为低频带和高频带的超宽带语音,则语音解码器可以使用从低频带中的截止频率以下的重构的相位值来合成用于一部分低频带(高于截止频率)和所有高频带的相位值。可替代地,语音解码器可以使用在低频带中的低于截止频率的重构相位值,仅针对一部分低频带(高于截止频率)合成相位值。
可替代地,以某个其他方式,语音解码器可以使用至少一些已经被重构的低频相位值来合成高频相位值。
C.用于语音解码中的相位重构的示例技术。
图10a示出了用于语音解码的通用技术(1001),其可以包括如图10b、图10c或图10d所示的附加操作。图10b示出了用于语音解码的通用技术(1002),其包括重构使用基函数的加权和以及线性分量表示的相位值。图10c示出了用于语音解码的通用技术(1003),其包括合成具有高于截止频率的频率的相位值。图10d示出了用于语音解码的更具体的示例技术(1004),其包括:重构使用基函数的加权和以及线性分量表示的低频相位值(其低于截止频率),以及合成高频相位值(其高于截止频率)。可以由如参考图7和图8所描述的语音解码器或另一语音解码器来执行技术(1001至1004)。
参考图10a,语音解码器接收(1010)编码数据作为比特流的一部分。例如,在计算机系统的存储器中实现的输入缓冲器被配置为接收和存储编码数据作为比特流的一部分。
语音解码器对编码的数据进行解码(1020)以重构语音。作为解码(1020)的一部分,语音解码器对残差值进行解码,并根据线性预测系数对残差值进行滤波。残差值可以例如用于稍后由滤波器组组合的重构的语音的频带。可替代地,残差值可以用于不在多个频带中的重构的语音。在任何情况下,滤波都产生重构的语音,可以对其进行进一步处理。图10b-10d示出了可以作为解码(1020)阶段的一部分执行的操作的示例。
语音解码器存储(1040)重构的语音以用于输出。例如,在计算机系统的存储器中实现的输出缓冲器被配置为存储重构的语音以用于输出。
参考图10b,语音解码器对用于残差值的相位值集合进行解码(1021)。相位值集合可以用于残差值的子帧或用于残差值的帧。在对相位值集合进行解码(1021)时,语音解码器使用基函数的加权和以及线性分量来重构相位值集合中的至少一些相位值。例如,基函数是正弦函数。可替代地,基函数是余弦函数或某个其他基函数。被表示为基函数的加权和的相位值可以是低频相位值(如果已经丢弃了高频相位值)、整个范围的相位值或某个其他范围的相位值。
为了解码该相位值集合,语音解码器可以解码对基函数加权的系数集合,并解码使线性分量参数化的偏移值和斜率值,然后使用该系数集合、偏移值和斜率作为相位值集合中的至少部分的重构的一部分。可替代地,语音解码器可以使用对基函数加权的系数集合连同定义线性分量的参数(例如,无偏移值或无斜率值,或使用一个或更多个其他参数)的某个其他组合对相位值集合进行解码。或者,结合对基函数加权的系数集合和线性分量,语音解码器还可以使用其他参数来重构相位值集合中的至少一些相位值。语音解码器可以至少部分地基于编码数据的目标比特率(如上所述)和/或其他标准来确定对基函数加权的系数的计数。
语音解码器至少部分地基于该相位值集合来重构(1035)残差值。例如,如果相位值集合用于一帧,则语音解码器针对该帧的一个或多个子帧重复相位值集合。然后,至少部分地基于用于相应子帧的重复的相位值集合,语音解码器重构用于相应子帧的复幅度值。最后,语音解码器将逆频率变换应用于用于相应子帧的复幅度值。逆频率变换可以是逆傅立叶变换的变体(例如,逆DFT、逆FFT),或者是从复幅度值重构残差值的某个其他逆频率变换。可替代地,语音解码器以某种其他方式来重构残差值,例如,通过重构用于尚未被划分为子帧的整个帧的相位值,并对用于整个帧的复幅度值应用逆频率变换。
参考图10c,语音解码器解码(1025)相位值集合。相位值集合可以用于残差值的子帧或用于残差值的帧。在解码(1025)该相位值集合时,语音解码器重构该相位值集合的第一子集(例如,低频相位值),并使用相位值的第一子集的中的至少一些相位值来合成相位值集合的第二子集(例如,高频相位值)。相位值的第二子集中的每个相位值具有高于截止频率的频率。语音解码器可以至少部分地基于编码数据的目标比特率、基音循环信息和/或其他标准来确定截止频率。根据实现方式,可以将恰好在截止频率处的相位值视为高频相位值之一(合成)或低频相位值之一(根据比特流中的量化参数进行重构)。
当使用相位值的第一子集中的至少一些相位值来合成相位值的第二子集时,语音解码器可以确定第一子集的范围内的模式,然后在截止频率之上重复该模式。例如,语音解码器可以识别范围,并且然后将范围内的相邻相位值确定为模式。在这种情况下,在截止频率之后重复该范围内的相邻相位值,以生成第二子集。或者,作为另一个示例,语音解码器可以识别范围,并且然后将范围内的相邻相位值之间的差确定为模式。在这种情况下,语音解码器可以在截止频率以上重复相位值差,然后对截止频率之后的相邻相位值之间的差进行集成以确定第二子集。
语音解码器至少部分地基于该相位值集合来重构(1035)残差值。例如,语音解码器如参考图10b所描述的那样重构残差值。
在图10d的示例技术(1004)中,当解码用于残差值的相位值集合时,语音解码器重构表示为基函数的加权和的低频相位值(其低于截止频率),并合成高频相位值(其高于截止频率)。
语音解码器对系数集合、偏移值和斜率值进行解码(1022)。语音解码器使用基函数的加权和以及线性分量来重构(1023)低频相位值,这些基函数根据系数集合进行加权,然后根据线性分量进行调整(基于斜率值和偏移值)。
为了合成高频相位值,语音解码器基于目标比特率和/或基音循环信息来确定(1024)截止频率。语音解码器确定(1026)在低频相位值的范围内的相位值差的模式。语音解码器在截止频率以上重复(1027)该模式,然后对相邻相位值之间的相位值差进行集成(1028)以确定高频相位值。根据实现方式,可以将恰好在截止频率处的相位值视为高频相位值之一(合成)或低频相位值之一(根据比特流中的量化参数进行重构)。
为了重构残差值,语音解码器(1029)重复用于帧的子帧的相位值集合。然后,至少部分地基于重复的相位值集合,语音解码器重构(1030)用于子帧的复幅度值。最后,语音解码器将逆频率变换应用于(1031)用于相应子帧的复幅度值,从而产生残差值。
鉴于可以将所公开的发明的原理应用于其的许多可能的实施例,应当认识到,所示出的实施例仅是本发明的优选示例,而不应被认为是对本发明范围的限制。相反,本发明的范围由所附权利要求书限定。因此,我们要求保护落入这些权利要求的范围和精神内的所有内容作为我们的发明。
- 语音编码器中的相位量化
- 基于传输线相位对冲量化的超高速时间编码器及编码方法