语音编码方法、语音解码方法及装置
技术领域
本发明涉及语音信号处理技术领域,尤其涉及一种语音编码方法及装置和语音编码方法及装置。
背景技术
现有音频编解码技术可分为两类。一类是无损压缩,例如,FLAC、APE等;另一类是有损压缩,例如opus、ogg、mp3等压缩技术。
无损压缩是最理想的状态,对信号处理没有任何影响,但是此类算法计算复杂度高并不适用于目前低功耗的需求,减小了CPU的可选择性,同时压缩比较小,通常不到2:1;市面常用的有损压缩达不到信号处理的要求,通常计算量也较大。
对于无损压缩,其固有的算法复杂度导致了其不适用于语音识别这种实时的信号处理。对于有损压缩,信号处理中的回声消除、波束成形等均采用自适应线性滤波,而此类有损压缩通常会引入一些非线性变化,这类变化会在信号处理中放大导致信号处理结果较差,对于后端的语音识别产生较大的影响。
前端信号处理对原始数据非常依赖,中间发生非线性变化会引起信号处理的异常。而市面上其他公司针对一些硬件处理能力不足的情况通常采用的方式是升级自己的硬件配置来保证送给前端信号处理的数据稳定性。目前市面上尚未有低消耗的应用于前端信号处理的编解码算法。
发明内容
发明人在实现本发明的过程中起初考虑ogg格式的speex编解码算法,因为单纯的语音进行编解码后做唤醒和语音识别,总体性能降低很少,基本可用。但是对原始语音信号做完编解码之后再做前端信号处理之后则信号失真严重,做语音唤醒和语音识别的性能也大幅下降。
最开始使用过ADPCM算法,而且ADPCM算法较DPCM有其优劣,ADPCM编码为自适应差分编码技术,较DPCM的优势是其有自适应的能力。它可以自适应改变前面所讲的步进值,对于小的差值使用小的步进值,对于大的差值使用大的步进值。发明人在实现本发明的过程中发现,该方法在大部分情况下都有较好的性能,但是遇到一些信号突变的情况会导致信号产生大量的非线性变化,例如,信号传输中有丢帧的情况。
通过低损失压缩编码方式DPCM将音频进行压缩,DPCM压缩可以保证极低的音频损失,造成极小的频谱失真,通过大量测试集验证对语音的唤醒和识别造成的影响可以忽略。而且,该算法的计算复杂度极低,现有技术中,例如,cortex-m4系列的CPU占用率都不超过10%。另外,DPCM压缩比达到2-4倍,基本达到大多数的传输需求。
DPCM的原理就是利用信号采样点之间的关联性,即每个采样点与相邻的采样点之间的差别很小,因此,就可以利用该特性进行压缩。总体来说,就是先存储第一个采样点的数值,再存储每个采样点与前一个采样点之间的差值,作为压缩的数据。这样的话,就可以利用第一个采样点,加上差值,求出第二个采样点,然后再加差值…一直持续下去,就可以求出所有采样点的数值了,也就完成了语音还原。而且,由于每个采样点之间相差很小,因此,差值也不会很大,所以就可以利用较少的比特数来存储压缩的数据了,这样也就实现了压缩。
本发明实施例提供一种语音编解码方法及装置,用于至少解决上述技术问题之一。
第一方面,本发明实施例提供一种语音编码方法,包括:
预先确定用于语音信号编码的固定步进值;
计算当前时刻的语音信号与前一时刻的预测语音信号之间的差值;
基于所述固定步进值对所述差值进行编码以得到编码结果。
第二方面,本发明实施例提供一种语音解码方法,包括:
接收采用本发明实施例所述的语音编码方法对当前时刻的语音信号进行编码得到的编码结果;
基于所述固定步进值对所述编码结果进行解码以得到解码差值;
将所述解码差值与所述前一时刻的预测语音信号相加得到解码结果。
第三方面,本发明提供一种语音信号编解码方法,包括:
在第一终端进行的编码步骤:
预先确定用于语音信号编码的固定步进值;
计算当前时刻的语音信号与前一时刻的预测语音信号之间的差值;
基于所述固定步进值对所述差值进行编码以得到编码结果;
在第二终端进行的解码步骤:
接收所述编码结果;
基于所述固定步进值对所述编码结果进行解码以得到解码差值;
将所述解码差值与所述前一时刻的预测语音信号相加得到解码结果。
第四方面,本发明提供一种语音编码装置,固定步进值确定模块,用于预先确定用于语音信号编码的固定步进值;差值计算模块,用于计算当前时刻的语音信号与前一时刻的预测语音信号之间的差值;编码逻辑模块,用于基于所述固定步进值对所述差值进行编码以得到编码结果。
第五方面,本发明提供一种语音解码装置,包括:信号接收模块,用于接收采用本发明实施例所述的语音编码方法对当前时刻的语音信号进行编码得到的编码结果;解码逻辑模块,用于基于所述固定步进值对所述编码结果进行解码以得到解码差值;加法器模块,用于将所述解码差值与所述前一时刻的预测语音信号相加得到解码结果。
第六方面,本发明实施例提供一种存储介质,所述存储介质中存储有一个或多个包括执行指令的程序,所述执行指令能够被电子设备(包括但不限于计算机,服务器,或者网络设备等)读取并执行,以用于执行本发明上述任一项语音信号编码方法或者语音信号解码方法。
第七方面,提供一种电子设备,其包括:至少一个处理器,以及与所述至少一个处理器通信连接的存储器,其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行本发明上述任一项语音信号编码方法或者语音信号解码方法。
第八方面,本发明实施例还提供一种计算机程序产品,所述计算机程序产品包括存储在存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,使所述计算机执行上述任一项语音信号编码方法或者语音信号解码方法。
本发明实施例的有益效果在于:采用固定步进值,能够减小原始语音信号的非线性变化,从而在后续进行前端信号处理(例如,回声消除、波束成形)时,不会存在放大非线性变化而影响处理结果,从而避免了对后端语音识别的影响。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明的语音信号编码方法的一实施例的流程图;
图2为本发明的语音信号解码方法的一实施例的流程图;
图3为本发明的语音信号编解码方法的一实施例的流程图;
图4为本发明的语音信号编解码算法的一实施例的原理图;
图5为本发明的语音信号编码装置的一实施例的原理框图;
图6为本发明的语音信号解码装置的一实施例的原理框图;
图7为本发明的电子设备的一实施例的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
本发明可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、元件、数据结构等等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
在本发明中,“模块”、“装置”、“***”等指应用于计算机的相关实体,如硬件、硬件和软件的组合、软件或执行中的软件等。详细地说,例如,元件可以、但不限于是运行于处理器的过程、处理器、对象、可执行元件、执行线程、程序和/或计算机。还有,运行于服务器上的应用程序或脚本程序、服务器都可以是元件。一个或多个元件可在执行的过程和/或线程中,并且元件可以在一台计算机上本地化和/或分布在两台或多台计算机之间,并可以由各种计算机可读介质运行。元件还可以根据具有一个或多个数据包的信号,例如,来自一个与本地***、分布式***中另一元件交互的,和/或在因特网的网络通过信号与其它***交互的数据的信号通过本地和/或远程过程来进行通信。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”,不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
如图1所示,本发明的实施例提供一种语音信号编码方法,包括:
S11、预先确定用于语音信号编码的固定步进值。
S12、计算当前时刻的语音信号与前一时刻的预测语音信号之间的差值;所述当前时刻的语音信号为基于原始语音信号的PCM信号数据。
S13、基于所述固定步进值对所述差值进行编码以得到编码结果。
本发明实施例中,采用固定步进值,能够减小原始语音信号的非线性变化,从而在后续进行前端信号处理(例如,回声消除、波束成形)时,不会存在放大非线性变化而影响处理结果,从而避免了对后端语音识别的影响。
在一些实施例中,还包括:采用预设量化因子对所述差值进行量化处理,以压缩所述差值;此时,所述基于所述固定步进值对所述差值进行编码以得到编码结果为:基于所述固定步进值对所述差值量化后的结果进行编码以得到变化结果。
由于差值可能过大,为便于存储,一般设置一个量化因子,比如,如果量化因子是100的话,差值400就可以映射到4,这样的话压缩数据可以用更少的比特存储。但是,发明人进一步发现这种情况下容易出现量化误差。如果将所有的差值固定在一定的范围内,比如,存储比特为4,差值范围就是-8到7,再乘上量化因子。因此,如果差值过大或者过小,超出范围了,就只能按照边界值来定。而这样的话,就会导致量化误差。
如果一个数据出现了量化误差,那么后面的数据在还原的过程中就会在错误的数据上进行还原,这样的话,会让之前出现的误差一直积累下去,影响后面所有的数据还原。因此,发明人提出了一种方案:利用上一个还原的数据再对当前的数据进行压缩,这样的话,即使产生量化误差,也只是影响一个采样点,而不会影响后续采样点的还原。
对应于上述提及的问题,本发明的实施例中,所述前一时刻的预测语音信号基于对所述编码结果进行解码得到。
如图2所示,为本发明的语音信号解码方法的一实施例的流程图,该方法包括:
S21、接收采用本发明前述任一实施例所述的语音编码方法对当前时刻的语音信号进行编码得到的编码结果;
S22、基于所述固定步进值对所述编码结果进行解码以得到解码差值;
S23、将所述解码差值与所述前一时刻的预测语音信号相加得到解码结果。
如图3所示,为本发明的语音信号编解码方法的一实施例的流程图,该方法包括:
S31、在第一终端进行的编码步骤:
S311、预先确定用于语音信号编码的固定步进值;
S312、计算当前时刻的语音信号与前一时刻的预测语音信号之间的差值;所述当前时刻的语音信号为基于原始语音信号的PCM信号数据;所述前一时刻的预测语音信号基于对所述编码结果进行解码得到。
S313、基于所述固定步进值对所述差值进行编码以得到编码结果;
S32、在第二终端进行的解码步骤:
S321、接收所述编码结果;
S322、基于所述固定步进值对所述编码结果进行解码以得到解码差值;
S323、将所述解码差值与所述前一时刻的预测语音信号相加得到解码结果。
如图4所示,为本发明的语音信号编解码算法的一实施例的原理图。其中,传输左端为设备1,右端为设备2,此处的设备是一个广义定义,既可以指两个不同的设备,也可以指两个CPU。
X(n)为原始的PCM信号,X(n-1)为上一帧的预测估计值;d(n)为X(n)减掉X(n-1)的差值;S(n)为编码量化的每一个步进值;Y(n)为输出编码数据。
步骤1、首先对原始的PCM信号进行DPCM编码操作,得到编码数据进行传输。其中,编码的详细流程为:
1)将原始信号与上一帧保存的预测估计值相减,得到一个信号差值。
2)步进值计算,用于量化编码的尺度,该算法包含了非均匀量化和均匀量化两类,为了减小原始语音信号的非线性变化,此处使用了均匀量化,则此处的步进值为一个固定值S(n)。
该步进值结合了我们语音信号的特点和对应的压缩比来进行调整,语音信号通常位宽为16bit,如果以2倍的压缩比则需要压缩到8bit,因此需要对该信息量等步进的量化到8bit。通过上述方法来得到每次量化的步进长度。
3)通过步骤2得到的量化尺度,对步骤1)中的差值进行量化编码,得到最终的编码值Y(n)。
4)上述步骤已经完成了一次编码过程,下一帧需要用到当前帧的预测值,需要经过解码逻辑单元进行解码得到(相对于下一帧X(n+1)而言)。其中解码操作为步骤3的逆操作,同样做量化操作,量化尺度与步骤3一样。
步骤2、设备2接收到编码后的数据进行解码操作。其中解码操作与编码操作类似:
1)、编码数据送入到步长计算器中计算步长,此处与编码一样采用均匀量化,步长为常数。
2)、将步长与编码数据一起送入解码逻辑单元,求得差值。
3)、将差值与上一帧的预测信号相加即得到解码后的原始数据。整个过程为编码的逆过程。
步骤3、解码后的数据送到前端信号处理,如回声消除、波束成形等得到信号处理后的语音信号。
步骤4、将步骤3得到的语音信号送给识别引擎或唤醒引擎。
本发明实施例的编解码算法首先可以保证信号的低损失,达到信号处理不受影响的目的。同时,由于其可以保证信号处理的可靠性,其应用性会大大扩展。例如,可以在一些没有DMA的CPU上进行数据压缩后传输,大大降低了CPU占用率。另外,在一些低端芯片与高端芯片之间通信时,可以通过数据压缩传给高端芯片来进行信号处理,保证了低端芯片的成本和低功耗。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作合并,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
如图5所示,本发明的实施例还提供一种语音信号编码装置500,包括:
固定步进值确定模块510,用于预先确定用于语音信号编码的固定步进值。
差值计算模块520,用于计算当前时刻的语音信号与前一时刻的预测语音信号之间的差值;所述当前时刻的语音信号为基于原始语音信号的PCM信号数据;所述前一时刻的预测语音信号基于对所述编码结果进行解码得到。
编码逻辑模块530,用于基于所述固定步进值对所述差值进行编码以得到编码结果。
如图6所示,本发明的实施例还提供一种语音信号解码装置600,包括:
信号接收模块610,用于接收采用本发明前述任一实施例中所述的语音编码方法对当前时刻的语音信号进行编码得到的编码结果。
解码逻辑模块620,用于基于所述固定步进值对所述编码结果进行解码以得到解码差值。
加法器模块630,用于将所述解码差值与所述前一时刻的预测语音信号相加得到解码结果。
在一些实施例中,本发明实施例提供一种非易失性计算机可读存储介质,所述存储介质中存储有一个或多个包括执行指令的程序,所述执行指令能够被电子设备(包括但不限于计算机,服务器,或者网络设备等)读取并执行,以用于执行本发明上述任一项语音信号编码方法或者语音信号解码方法。
在一些实施例中,本发明实施例还提供一种计算机程序产品,所述计算机程序产品包括存储在非易失性计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,使所述计算机执行上述任一项语音信号编码方法或者语音信号解码方法。
在一些实施例中,本发明实施例还提供一种电子设备,其包括:至少一个处理器,以及与所述至少一个处理器通信连接的存储器,其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行语音信号编码方法或者语音信号解码方法。
在一些实施例中,本发明实施例还提供一种存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时语音信号编码方法或者语音信号解码方法。
上述本发明实施例的语音信号编码装置或者语音信号解码装置可用于执行本发明实施例的语音信号编码方法或者语音信号解码方法,并相应的达到上述本发明实施例的实现语音信号编码方法或者语音信号解码方法所达到的技术效果,这里不再赘述。本发明实施例中可以通过硬件处理器(hardware processor)来实现相关功能模块。
图7是本申请另一实施例提供的执行语音信号编码/解码方法的电子设备的硬件结构示意图,如图7所示,该设备包括:
一个或多个处理器710以及存储器720,图7中以一个处理器710为例。
执行语音信号编码/解码方法的设备还可以包括:输入装置730和输出装置740。
处理器710、存储器720、输入装置730和输出装置740可以通过总线或者其他方式连接,图7中以通过总线连接为例。
存储器720作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如本申请实施例中的语音信号编码/解码方法对应的程序指令/模块。处理器710通过运行存储在存储器720中的非易失性软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现上述方法实施例语音信号编码/解码方法。
存储器720可以包括存储程序区和存储数据区,其中,存储程序区可存储操作***、至少一个功能所需要的应用程序;存储数据区可存储根据语音信号编码/解码方法装置的使用所创建的数据等。此外,存储器720可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器720可选包括相对于处理器710远程设置的存储器,这些远程存储器可以通过网络连接至语音信号编码/解码方法装置。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置730可接收输入的数字或字符信息,以及产生与语音信号编码/解码方法装置的用户设置以及功能控制有关的信号。输出装置740可包括显示屏等显示设备。
所述一个或者多个模块存储在所述存储器720中,当被所述一个或者多个处理器710执行时,执行上述任意方法实施例中的语音信号编码/解码方法。
上述产品可执行本申请实施例所提供的方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本申请实施例所提供的方法。
本申请实施例的电子设备以多种形式存在,包括但不限于:
(1)移动通信设备:这类设备的特点是具备移动通信功能,并且以提供话音、数据通信为主要目标。这类终端包括:智能音箱、故事机、智能手机(例如iPhone)、多媒体手机、功能性手机,以及低端手机等。
(2)超移动个人计算机设备:这类设备属于个人计算机的范畴,有计算和处理功能,一般也具备移动上网特性。这类终端包括:PDA、MID和UMPC设备等,例如iPad。
(3)便携式娱乐设备:这类设备可以显示和播放多媒体内容。该类设备包括:音频、视频播放器(例如iPod),掌上游戏机,电子书,以及智能玩具和便携式车载导航设备。
(4)服务器:提供计算服务的设备,服务器的构成包括处理器、硬盘、内存、***总线等,服务器和通用的计算机架构类似,但是由于需要提供高可靠的服务,因此在处理能力、稳定性、可靠性、安全性、可扩展性、可管理性等方面要求较高。
(5)其他具有数据交互功能的电子装置。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。