执行低复杂性频谱估计技术来产生舒适噪声的方法和系统的制作方法

文档序号:7520103阅读:289来源:国知局
专利名称:执行低复杂性频谱估计技术来产生舒适噪声的方法和系统的制作方法
技术领域
本发明一般地涉及信号频谱估计,尤其涉及一种以较低复杂性来估计信号频谱并且产生舒适噪声的方法和系统。
背景技术
数字用户线(DSL、数字用户回路、xDSL)包含了一种能在常规铜制电话线上高速传送数字数据的技术。这种技术包括那些为在最终用户与电话公司之间的铜制电话线上提供高速数据通信而设计的数字电信协议。
在将两个常规调制解调器经由电话系统(例如公用交换电话网(PSTN))相连的时候,可以将所述通信视为等同于语音通话。这样做具有不需要电话公司(telco)进行投资的优点,但缺点则是可用于所述通信地带宽与语音通话可用的带宽相同,通常最多只有64kb/s(DS0)。如果电话公司将所述信号作为数字而不是模拟信号来进行处理,那么,进入单个家庭或办公室的双绞铜线通常能以高于64kb/s的速率来进行有效传送。
目前存在关于这种基础方案的多种实施方式,这些实施方式在所使用的通信协议方面存在差别,并且提供了不同的服务等级。其中通信吞吐量可以是从大约128kb/s到8Mb/s以上的任何速率,此外,所述通信可以是对称的,也可以是不对称的(也就是说,可用带宽在上游和下游方向可以相同,也可以是不同)。而设备价格和服务费用也会明显变化。
在多种不同类型的现代电信设备中,其中一个很重要的部件是语音处理子系统,这个子系统可以执行如下功能,例如代码转换、双音调频(DTMF)处理、回波消除等等。需要这类语音处理的设备实例包括从扬声器电话到全球数字移动电话系统(GSM)基站乃至宽带集成接入设备的所有一切设备。语音处理子系统可以基于数字信号处理(DSP),其特征是以软件方式执行一组算法。这些算法和DSP编程方面的专家可以借助汇编码的形式来为这些算法手写代码。并且希望得到一种简单的方法,用于在所需要的组合中组合所需要的算法,然后通过一个简单的外部接口对接到语音处理子系统。
经由数字用户线的语音传送(VoDSL)涉及对铜钱基础架构产生杠杆作用(leveraging),以便提供优质的语音服务并支持经由现有线路到达客户的多种数据应用。VoDSL是在结合了启用语音业务的平台自适应的情况下实现DSL平台的。它向数据竞争性的地方交换运营商(CLEC)提供了一种提高收益的方法,并且为现任的地方交换运营商(ILEC)提供了针对电缆调制解调器的应答,此外还为长途交换运营商(IXC)提供了一种能够访问本地语音环路的方法。因此,任何运营商类型都可以借助VoDSL来增加可用服务的价值。
通常,VoDSL包括一个语音网关、一个集成的接入设备(IAD)以及其他组件。语音网关可以提供语音分组,所述语音分组经过拆包并且转换成一种用于递送到语音交换机或其他相似设备的格式。语音网关允许从一个数据网络来对业务量进行访问,并且允许将业务量转发到PSTN,以便提供服务和进行交换。IAD可以充当DSL调制解调器并执行其他功能。所述IAD也可以充当DSL网络服务与客户语音数据设备之间的一个接口。另外,IAD还可以提供DSL网络服务与客户网络设备之间的接口。此外还可以使用IAD来连接那些启用语音和数据的设备。
VoDSL也可以经由网际协议来进行传送。在这里可以把VoIP定义成经由网际协议的语音传送,其中包括任何一种能在IP网络上实现语音电话的技术。而某些涉及VoIP的难题则包括以一种可靠的方式来向用户提供语音、传真或视频分组。而这种处理是可以通过从信源提取语音或数据来实现的,其中数字化所述语音和数据,并且由于因特网的受限带宽而对所述语音和数据进行压缩,此外还通过所述网络来发送语音和数据。然后可以反转这个处理,以便能够通过语音来进行通信。VoIP使得包括公司以及其他实体在内的用户能够经由IP网络而不是PSTN来发出电话呼叫。
与VoDSL、VoIP以及其他语音应用相关联的因素包括可用于提高带宽和吞吐量的静音抑制。静音抑制消除了分组化电话通话静音部分(例如在无人说话的时候)的必要性。为了对语音与数据信息同传的比特率进行优化,语音信号检测器将会检测语音信号的静音部分。与传送语音信号的静音部分所不同,在这里是将数据(例如静音插入描述符)插入分组流,以便恢复那些否则将会分配给语音业务量的带宽。在减少有效比特率的同时,删除那些通常伴随着语音数据“静音”部分的背景噪声,而这将会对个人接收和听取绝对静音的话音数据产生不希望有的影响,此外,删除背景噪声还会带来传送通-断而不是持续连接的感觉。
在与静音抑制相结合的情况下,可以执行舒适噪声生成来重建或构造并替换语音以及其他语音信号的静音部分。与常规的舒适噪声生成器相关联的一个缺点是它们需要更为强化的MIPS(百万条指令每秒)以及更大的存储容量,并且有可能降低效率和有效语音传送。
现有的国际电信联盟(ITU)建议G系列中的G729AB使用了一种用于产生高斯噪声的更为简单的方法,这种方法的缺点是带有周期性。其他生成器则需要更为强化的MIPS,这些生成器通常不适合实时系统,或者就是复杂性没有得到保证。
在包含合成话音和其他语音信号的应用中,可以实施一种高斯白噪声生成器。其中一种实施高斯生成器的方法包括在一个均匀分布的随机生成器上使用中心极限定理。然而,这种方法的缺点是带有周期性,尤其是在处理生成等幅话音、噪声信号的长期生成或是其它应用的时候。其它生成器则需要更为强化的MIPS,这些生成通常并不适合实时系统,或者就是复杂性没有得到保证。
通常,由于过多的等待时间将会降低电话通话质量,因此在电信设备上存在着非常紧密的等待时间需要。这样一来,通常必须在很小的语音数据块上执行那些在远程通信中使用的信号处理算法。举例来说,在VoDSL客户端设备(CPE)中,数字信号处理器作用于8kHz的4个取样数据块。
在经由数据网络传送语音的系统中,语音压缩的一个高级特征是自适应的静音压缩和重建。这种特征的一个方面在于使用一个意图对噪声进行频谱整形的滤波器来对高斯白噪声进行滤波,从而使其更紧密地接近‘真实’背景噪声,由此产生仿真的背景噪声信号,其中为了节省带宽而没有传送背景噪声。
然而,滤波系数未必包含正确的增益,因此合成信号与真实背景噪声并不具有相同的功率。同样,为滤波器提供的激励通常具有某些增益,这些增益将会导致所述输出具有不同于真实背景噪声的增益。此外,仿真信号的有效生成在每次只能产生4个取样,因此很难(并且相对昂贵,假设每秒将这个函数调用大约2000次)测量信号强度并且由此补偿增益。
因此,在VoDSL和VoIP领域需要一种用于传送语音信号的更为有效的方法和系统。

发明内容
本发明的各个方面克服了上文提到的问题并且实现了附加的优点。其中一个于发明方面提供了通过执行复杂性很低的频谱估计技术来产生舒适噪声的方法和系统。本发明的一个方面涉及一种估计信号频谱并且产生舒适噪声(CN)的方式,与现有方法相比,所述方式的复杂性得到了降低。本发明的另一个方面涉及从自适应处理中分离出滤波器参数编码,以便以静音插入描述符的形式来进行传送。在那些MIPS和存储器都很昂贵的系统中,本发明使用了这样一种方法,所述方法利用了信号频谱在一个扩展时段实质保持恒定这一事实,并且本发明适合随时间变化的频谱。这样做有一个好处,那就是所产生的舒适噪声是输入噪声的更为逼真再现,并且所产生的舒适噪声是均匀分布的。为了进行传送而实施的滤波器参数编码分离提供了增强的灵活性,同时这种分离还会在不同系统之间产生更大的互通性。而另一个益处则是更有效地使用了MIPS和存储器。
此外,现有ITU建议G系列中的G729AB使用了一种不同的舒适噪声生成(CNG)方法,所述方法需要很高级别的MIPS和存储器。并且存在多种用于CNG的不同实施方式。例如,本发明的这个发明方面具有以下一个或多个超越上述方法的优点产生更加令人满意的有色舒适噪声(与白色相反);使用复杂性更低的算法,所述算法减少了对于作为实时系统重要部件的MIPS和存储器的需要;以及在不依赖于自适应处理的情况下实施滤波器参数编码(成为反射系数),由此提供了只在必要时才使用MIPS的更大灵活性,从而允许将滤波器参数编码成某些其他编码形式,而基础算法则仍然保持不变(唯一改变的是编码算法)。
根据本发明的一个示范性实施例,一种用于执行频谱估计以便产生舒适噪声的方法包括以下步骤接收一个输入噪声信号;在一个时段上使用一种算法来近似输入噪声信号的频谱;对不存在话音信号进行检测;以及在检测到话音信号不存在的时候基于近似步骤来产生舒适噪声;其中在这个时段上,输入噪声信号的频谱实质是恒定的。
根据本发明的这个示范性实施例的其他方面,所述方法还包括所述近似步骤还包含了使用反向预测器而使输入噪声适合于预测信号的频谱步骤;通过执行一个内部检查来确定输入噪声信号处于大约为固有噪声电平的6dB的范围以内的步骤,其中阻止接近噪声尖峰和话音分段中的至少一个;其中所述算法是一个最小均方算法;其中所述算法是一个带有遗忘因子(leaky)的最小均方算法;其中所述算法是一个归一化的最小均方算法;其中所述算法是一个线性预测编码算法;通过执行一个最小均方误差以及至少一个最小均方系数的可变精度计算而使所述算法实质独立于噪声电平变化的步骤;其中所产生的舒适噪声实质上是均匀分布的;通过归一化所述算法而使近似步骤实质独立于信号幅度变化的步骤;从近似步骤中分离出编码成至少一个反射系数的滤波器系数,以便发送至少一个静音插入描述符的步骤;其中增强了系统之间的互通性;其中有效使用了MIPS和存储器;所述近似步骤还包括由一个合成滤波器来对输入噪声信号进行滤波的步骤,其中如下定义所述合成滤波器
其中M代表多个分支;w代表一个预测器系数;H是变量z的函数;其中合成滤波器是一个10阶合成滤波器;其中所述近似估计步骤还包括如下步骤检测话音数据之间的噪声;自适应所述噪声;以及在话音休止的时候,基于所述自适应步骤来创建静音插入描述符;其中如下所示,静音插入描述符是通过将至少一个直接形式系数转换成至少一个反射系数而产生的
Bn(z)=z-mAmz-1)
其中如下所示,通过将至少一个反射系数转换成直接形式系数而对静音插入描述符进行解码
A0(z)=B0(z)=1
Am(z)=Am-1(z)+z-1Bm-1(z)kmm=1,2,…M-1
Bm(z)=z-mAm(z-1) m=1,2,…,M-1
并且其中所述近似估计步骤还包括以下步骤检测话音数据之间的噪声;自适应所述噪声;以及在话音休止的时候,基于输入噪声信号的平均频谱来产生增强的噪声。
根据本发明的另一个示范性实施例,一种用于执行频谱估计来产生舒适噪声的系统包括一个用于接收输入噪声信号的接收机;一个在某个时段上使用算法来对输入噪声信号频谱进行近似的编码器;一个用于检测是否不存在话音信号的检测器;以及一个舒适噪声生成器,在检测到不存在话音信号的时候,所述生成器基于频谱的近似来产生舒适噪声;其中在这个时段上,输入噪声信号的频谱实质上是恒定的。
根据本发明这个实施例的一个示范性方面,所述编码器还使用一个反向预测器而使输入噪声适合于预测信号频谱;执行一个内部检查以便确定输入噪声信号处于大约为固有噪声电平的6dB的范围以内;其中避免接近噪声尖峰和话音分段中的至少一个;其中所述算法是一个最小均方算法;其中所述算法是一个带有遗忘因子(leaky)的最小均方算法;其中所述算法是一个归一化的最小均方算法;其中所述算法是一个线性预测编码算法;其中执行了最小均方误差以及至少一个最小均方系数的可变精度计算,以使所述算法实质上独立于噪声电平变化;其中所产生的舒适噪声实质上是均匀分布的;归一化所述算法,以使频谱的近似步骤实质上独立于信号幅度变化;其中从频谱的近似步骤中分离出编码成至少一个反射系数的滤波器系数,以便发送至少一个静音插入描述符;其中系统之间的互通性得到了增强;其中MIPS和存储器得到了有效使用;所述近似步骤还包括一个用于对输入噪声信号进行滤波的合成滤波器,其中所述合成滤波器是如下定义的
其中M代表多个分支;w代表一个预测器系数;H是变量z的函数;其中合成滤波器是一个10阶合成滤波器;其中所述编码器还包括一个用于检测话音数据之间噪声的检测器;一个自适应所述噪声的适配器;以及静音插入描述符生成器,用于在话音休止的时候,基于所述自适应步骤来创建静音插入描述符;其中如下所示,静音插入描述符是通过将至少一个直接形式系数转换成至少一个反射系数而产生的
Bn(z)=z-mAm(z-1)
其中如下所示,通过将至少一个反射系数转换成直接形式系数而对静音插入描述符进行解码
A0(z)=B0(z)=1
Am(z)=Am-1(z)+z-1Bm-1(z)kmm=1,2,…M-1
Bm(z)=z-mAm(z-1) m=1,2,…,M-1
并且其中所述编码器还包括一个用于检测话音数据之间的噪声的检测器;一个自适应所述噪声的适配器;以及一个噪声生成器,在话音休止的时候,所述噪声生成器基于输入噪声信号的平均频谱来产生增强的噪声。
在此引入并构成说明书一部分的附图描述了本发明的不同实施例,并且这些附图以及说明书解释了本发明的原理。
缩略语列表
● AAL-ATM适配层
● ADSI-模拟显示服务接口
● ADSL-非对称数字用户线
● AGC--自动增益控制
● ASIC-专用集成电路
● ATM-异步传送模式
● BUN-宽带统一框架
● CBR-恒定比特率
● CIDCW-呼叫等待时的主叫用户标识符
● CLEC-竞争性的地方交换运营商
● CN-舒适噪声
● CNG-舒适噪声生成
● CO-中心局
● CO/DLC-中心局/数字回路载波
● CPCS-公共部分汇聚子层
● CPE-客户端设备
● CRC-循环冗余码校验
● CS-ACELP-共轭结构的代数码激励线性预测
● DLCI-数据链接连接标识
● DSL-数字用户线
● DSL PHY-数字用户线的物理层设备
● DSLAM-数字用户线的接入复用器
● DSP-数字信号处理
● DSVD-数字语音数据同传
● DTM-双音调制
● DTMF-双音(或多个)频率调制
● ECSR-具有单个反射器的回声消除器
● EEPROM-电可擦可编程序只读存储器
● EPD-早期分组丢弃
● GSM-全球数字移动电话系统
● IAD-集成接入设备
● IADs-多个集成接入设备
● IETF-因特网工程任务组
● ILEC-现任本地交换运营商
● IMA-ATM反向多路复用
● IP-网际协议
● ISOS-SiliconTM上的集成软件
● ISP-因特网服务提供商
● ITU-国际电信联盟
● IXC-长途交换运营商
● L-长度
● LMS-最小均方
● MIPS-每秒百万条指令
● NAT-网络地址转换
● NLMS-归一化最小均方
● NRT-非实时
● OAM-操作和管理
● OSI-开放式系统互连
● PBX-专用小交换机
● PC-个人计算机
● TCP/IP-在网际协议之上的传输控制协议
● PDU-协议数据单元
● PPD-部分分组丢失
● PPPoA-通过ATM的点到点协议
● PPPoE-通过以太网络的点对点通信协议
● PPTP-点对点的隧穿协议
● PSTN-公共交换电话网
● RMS-均方根
● RT-实时
● RTP-实时传送协议
● SDRAM-同步动态随机存取存储器
● SDSL-对称数字用户线
● SF-扩缩因数
● SID-静音插入描述符
● SNMP-简单网络管理协议
● SOHO-小型办公/在家办公
● SSCS-特定业务会聚子层
● SVC-交换虚电路
● UNI-用户网络接口
● USB-通用串行总线
● V-伏特
● VAGC-具有自动增益控制的语音活动检测
● VBR-可变比特率
● VoDSL-数字用户线上的语音传送
● VPI/VCI-虚路径标识符/虚信道标识符
● WAN-广域网


在这里可以结合附图而对以下关于本发明的详细描述进行研究,从而更全面地理解本发明,其中
图1是对根据本发明第一方面的一个实施例的编码器实例进行描述的流程图。
图2是对根据本发明第一方面的一个实施例的另一个编码器实例进行描述的流程图。
图3a是根据本发明第二方面的一个实施例来实现多个生成器的系统的一个实例。
图3b是对根据本发明第二方面的一个实施例的话音合成滤波器实例进行描述的框图。
图4a是对根据本发明第三方面的一个实施例的解码器实例进行描述的流程图。
图4b是根据本发明第三方面的一个实施例来实现解码器处理的系统的实例。
图4c是根据本发明第三方面的一个实施例来实现产生背景噪声的系统的实例。
图5是对根据本发明第四方面的一个实施例的滤波器实例进行描述的框图。
图6是对根据本发明第四方面的一个实施例的滤波器实例进行描述的框图。
图7描述的是根据本发明第四方面的一个实施例来进行精密调谐自动增益控制的处理的实例的框图。
图8描述的是根据本发明实施例而在编码端使用了CNG的系统的实例。
图9描述的是根据本发明一个实施例而在没有发送SID的时候在编码端使用了CNG的系统的实例。
图10描述的是根据本发明一个实施例而在解码端使用了CNG的系统的实例。
图11描述的是根据本发明实施例而在解码端使用了CNG的系统的实例。
图12描述的是根据本发明实施例的CNG_adapt函数的流程图。
图13描述的是根据本发明实施例的CNG_generate函数的流程图。
图13描述的是根据本发明实施例的CNG_generate函数的流程图。
图14描述的是根据本发明实施例的CNG_decode函数的流程图。
图15是可以结合本发明的发明方面的软件结构的示意图。
图16是可以结合本发明的发明方面的软件结构的示意图。
图17是可以结合本发明的发明方面的硬件结构的示意图。
图18是可以结合本发明的发明方面的硬件结构的示意图。
图19是可以结合本发明的发明方面的软件结构的示意图。
具体实施例方式
下文中的描述意图通过提供多个特定实施例以及包含VoDSL与VoIP的应用细节来描述关于本发明的全面理解。然而应该理解,本发明并不局限于这些仅仅作为示范的特定实施例和细节。此外还应该理解,根据已知的系统和方法,具有本领域普通技能的任何人都可以意识到将本发明用于预期目的,并从依赖于特定设计和其他需要的多个替换实施例中受益。
根据本发明的一个实施例,可以提供一种用于产生舒适噪声的低复杂性的频谱估计技术。此外可以实施一个舒适噪声生成器来压缩和重建语音信号的静音部分。CNG可以与语音活动检测器、回声消除器或其他相似设备一起工作,以便压缩静音或产生舒适噪声。此外,本发明提供了一种通过估计信号频谱来产生舒适噪声的简化技术。
本发明的一个方面包括估计信号频谱并且以低于现有方法的复杂性来产生舒适噪声(CN)。本发明的另一个方面可以包括从自适应处理中分离出滤波器参数编码,以便以静音插入描述符的形式来进行传送。
在那些每秒百万条指令(MIPS)以及存储器都很昂贵的系统中,本发明的方法使用了信号频谱在一个扩展预定时段实质保持恒定这一事实,其中在这个预定时段,所述方法适于所述频谱。由此可以产生作为输入噪声更逼真再现的舒适噪声。此外,所生成的舒适噪声可能会更为均匀。
根据本发明的另一个实施例,用于传输的滤波器参数编码分离可以提供增强的灵活性。例如,在不同的系统之间可以识别到更大的互通性。此外,MIPS和存储器可以得到更为有效的使用。
本发明可以产生一个令人更为满意的有色舒适噪声(例如与白噪声相反)。本发明可以包含一种不太复杂的算法并且免除了作为实时系统重要部件的MIPS和存储器。滤波器参数编码(例如将其编码成反射系数)可以在不依赖于自适应处理的情况下得到实现,由此提供了只在必要时使用MIPS的更大灵活性。在另一个实例中,如果要把滤波器编码成某些其他的编码类型,那么基础算法可以仍然保持恒定或是基本不变。因此在这个实例中,唯一改变的就是编码算法。
图1描述的是根据本发明一个实施例的编码器的流程图。这种操作模式可以在声码器(或相似设备)不具有相关或内嵌的静音压缩能力的时候使用。如图1所示,为了改进系统压缩,CNG可以适应那些在话音数据部分之间感知的背景噪声,并且在话音并未活动的时候创建那些代表所感知的噪声特性的静音插入描述符(SID)。
在步骤110,对包括语音和静音/背景数据在内的输入数据进行接收。在步骤112,对“近端”话音活动进行判定,其中所述“近端”话音活动即为处于语音/话音数据前端或开端的话音或语音数据部分。如果得出一个肯定应答,则在步骤114中进行G7xx编码。此外,在步骤116中,将码字数据发送到信道(向解码器传送的),并且可以返回系统状态,以便在步骤110中接收输入数据。如果得出一个否定应答,则在步骤118中进行舒适噪声生成器的自适应。然后在步骤120,滤波器参数编码会将SID发送到信道(向解码器传送的),并且可以返回系统状态,以便在步骤110中接收输入数据。简单的说,图1描述了这样一种方式,其中可以将输入数据分为话音或静音,由此将语音码字或SID分别发送到那些将要传送到解码器的信道。如图15所示并且如下所述,图1的系统可以用在DSP芯片区域1540中。
图2描述的是根据本发明另一个实施例而在没有发送SID时的替换编码器的流程图。如图15所示并且如下所述,可以在DSP芯片区域1540中实施图2的系统。当近端话音并未活动的时候,CNG适应噪声并且产生可以由一个声码器来进行编码的噪声。这种模式可以在残留回声与噪声组合令人感到厌烦的时候使用。CNG可以基于所述输入的平均频谱来产生那些在感觉上有所增强的噪声。
在步骤210,可以对输入数据进行接收。在步骤212,判定近端话音是否活动。如果近端话音没有活动,那么如步骤214所示,可以自适应并产生舒适噪声。并且可以在步骤216中执行G7xx编码。此外,在步骤210,可以发送码字数据并将其转发给输入数据。
例如,根据本发明的一个实施例,通过使用最小均方(LMS)函数,可以实施舒适噪声生成算法,以便近似估计输入噪声频谱。但是也可以实施其他函数,例如归一化最小均方(NLMS)或线性预测编码(LPC)。所述自适应可以使用如下事实,即反向预测器会使输入白噪声适合于所需要的预测信号频谱。然后,只要不存在话音,就可以使用这种自适应来产生噪声。由于噪声频谱在一个时段上保持近似恒定,因此本发明的方法可以在不使用更复杂的信号处理的情况下产生很有利的结果。下文将对个别模块进行更为详细的描述。为了防止自适应于噪声尖峰信号或是话音分段,可以执行一个内部检查,以便确定所述输入处于大小为6dB(或其他预定值)的固有噪声电平的范围以内。
根据经验,可以确定一个10阶合成滤波器,以便在MIPS与性能之间提供一个有利的均衡。根据本发明,也可以实施其他滤波器。例如,为了确保所述自适应的增强的稳定性,可以使用名为带有遗忘因子的LMS(Leaky LMS)的LMS算法的一个变量。根据本发明,也可以使用其他变量。为使所述算法独立于一定范围(例如-30dBm到-100dBm)以内的噪声电平变化,可以实施一种关于LMS误差和LMS系数的可变精度计算。另外还可以归一化所述带有遗忘因子的LMS,以使所述自适应独立于信号幅度变化。在以下等式中,括号中的数值表示时间,粗体变量则表示阵列(例如,vec(n)指的是阵列“vec”在时间n的值)。
参数
M分支数目
μ自适应步长大小
a正值
n在时间n上的误差
数据
u(n)M×1型分支输入矢量
w(0)如果已知,则是适当值,否则为0
d(n)在时间n上的预期响应
e(n)在时间n上的误差
计算
n=0,1,2,……
e(n)=d(n)-w(n)Tu(n)
(1-μa)非常接近1,但是小于1
由于LMS自适应实质上是一个预测处理,因此可以存在以下关系
如果xk,……,xk-M是输入取样序列,那么
W(n)=预测器系数w0,……,wm
u(n)=xk-1,……,xk-M
d(n)=xk
合成滤波器则如下定义
上面的合成滤波器H(z)可以对白噪声进行过滤。
通过滤波器以及计算得到的滤波器输出增益,可以对一个固定噪声序列进行过滤,从而可以计算近似增益。这个近似增益与所需要的增益(固有噪声电平)相除就给出了产生所述输出时所要使用的比率。
通过将直接形式转换成网格系数(例如反射系数),可以产生SID。
Bn(z)=z-mAm(z-1)
在解码函数中,可以使用一个逆运算来将反射系数转换成直接形式的系数
A0(z)=B0(z)=1
Am(z)=Am-1(z)+z-1Bm-1(z)km m=1,2,…M-1
Bm(z)=z-mAm(z-1) m=1,2,…,M-1
所述近似增益计算也可以在解码函数中执行。该方法与自适应中的方法相同(或相似)。
为了确保所述输出处于电话/话音频带(150Hz~3400Hz)以内,可以借助以下的带通滤波器来对合成滤波器的输出进行过滤。
根据本发明的另一个实施例,可以为实时话音合成应用实施一个简单的高斯白噪声生成器。在话音合成和其他应用中,可以实施一个高斯白噪声生成器。本发明提供了一种方法和系统,所述方法和系统使用两个或更多均匀分布(或实质均匀分布)的生成器来为不同话音应用提升其周期的不规则性。本发明还提供了一种方法和系统,用于在不具有关于定点和其他系统的最低计算复杂性的情况下产生具有很长周期的高斯随机噪声。
在合成话音的时候,可以实施一个高斯随机噪声生成器。为了简单起见,这类序列是从一个伪随机序列生成器中接收的,然后是从中心极限定理中产生的。例如,作为经常发生的情况,在对伪随机生成器周期加以限制,尤其是在合成稳定频谱信号的时候,这种噪声生成形式可能导致产生由周期性引起的可以听到的人工产物。本发明提供了一种用于在不损害应用简单性的情况下克服这个缺陷的方法和系统。
为了产生一个几乎是非周期性的信号,在这里可以实施不同的两个或更多随机数生成器,例如,随机数生成器具有一个与2的乘方相等的周期(P=2k)。
图3a是根据本发明的用于实施多个生成器的系统的一个实例。随机数生成器可以包括16比特生成器,举例来说,其中周期每隔65536次就可以重复。在这种情况下,输入数目可以等于6,但是也可以将其设定为其他值。随机数生成器320可以包括与一个平均值计算组件340相耦合的输入321、322和323,并且可以包括与平均值计算组件340相耦合的输入324,325,326。随机数生成器330可以包括与平均值计算组件342相耦合的输入334、335、336。平均值计算组件340可以输出那些输入321、322、323、331、332、333的一个平均值Avg1。平均值计算组件342可以输出那些输入324、325、326、334、335、336的一个平均值Avg2。
作为实例,以下生成器具有一个大小为216的周期并且可以根据本发明而得到实施。
生成器1(例如随机数生成器320)
a=seed1×31821+13849
seed1=a的符号扩展的低16比特
rand1=seed1
生成器2(例如随机数生成器322)
b=seed2×31421+13849
seed2=b的符号扩展的低16位
rand2=seed2
如下文中更详细描述的那样,按照中心极限定理,可以为总计2*N个取样(来自各个生成器的N个取样)计算平均值,以便给出高斯噪声输出的一个单独的值。

在各个周期之后,其中一个生成器的取样生成可以提前1(或其他值),以使这个生成器的周期实质上小于其他生成器的周期。现在,这两个生成器的周期是互质的,可以将生成器周期递增到P*(P-1)/(gcd(P,N)*gcd(P-1,N)),其中P是第一生成器周期,P-1是第二生成器周期,gcd(x,y)是x、y这两个数字的最大公约数。本发明的这种方法可以推广到具有不同周期的M个随机生成器。
例如,可以设置随机数生成器330,以便丢弃其中一个取样,由此从所述周期中去除某个预定量(例如一个取样)。结果,随机数生成器330每隔65535次即可重复,而随机数生成器320则每隔65536次才可以重复。Avg1和Avg2可用于计算一个高斯值,所述高斯值产生一个改善的出声背景噪声。所述噪声可以是从生成器(例如330)中丢弃一个取样的产物,由此将周期性所引起的可以听到的人工产物减至最小。举例来说,如果没有按照本发明来实施一个与第一生成器(例如320)具有不同周期的第二生成器(例如330),那么,可以在例如大约1.2秒的时间察觉到一个合成的可以听到的重复。实质上,通过实施本发明,可以消除这种可以听到的重复(或将其减至最小)。
如图3b所示,在这里可以通过形成话音合成滤波器的激励来产生话音。高斯激励信号312可以由话音合成滤波器310进行过滤,以便在滤波器输出314上产生一个由合成话音表示的已滤波信号。
例如,可以对处于8000Hz取样率的后续实例进行比较。在一个实例中,P等于65536,N等于6。生成器周期大约为24小时,单独选取的各个高斯生成器的周期大约是2秒。
根据本发明的另一个实施例,可以在缺少包含频谱信息的SID分组的情况下提供有色舒适噪声的生成(CNG)。
在那些将语音通话的带宽使用率减至最小的语音通信系统中,语音活动检测以及静音压缩或消除可用于减少那些否则将会在通话的非语音分段中需要的带宽。而发送少数或是不发送有关非语音音频的信息则可以节省带宽。此外也可以在一个SID分组中传送这种信息。
当前,在没有传送频谱信息的时候有可能会产生白噪声,由于白噪声通常并未涉及那些已经压缩或是并未传送的非语音背景噪声,因此听到所述白噪声会令人感到不快。由此导致出现了可以察觉的不一致现象。在通话的接收端,可以合成所述静音。如果并未传送那些与非语音背景信号相关联的频谱信息,那么,合成的背景信号通常不会与真实背景噪声具有相同的频谱特性。与没有人讲话的时候相比,在某人说话的时候,上述情况有可能在背景噪声中引起令人厌恶的出声差别。本发明提供了一种用于克服上述问题的方法和系统。特别地,本发明提供了一种方法和系统,用于在缺少包含频谱估计的SID分组的情况下产生有色舒适噪声。
某些静音压缩方案能够允许传送描述背景噪声频谱特性的信息。其他技术则只能提供背景噪声功率电平或是不提供任何关于背景噪声的信息。当SID中并未包含频谱信息的时候,解码器不具有那些能够从中产生频谱自适应的背景噪声的信息。当前存在很多系统设计因素,这些因素可以防止将频谱信息包含在SID之中。其中,所述因素可以包括低复杂性和互通性。例如,低复杂性因素可以包括简化发送端设备,它可以防止产生包含频谱信息的SID或者极大限制所述SID的产生。在另一个实例中,互通性因素可以包括若干标准,这些标准可以在那些明确定义SID的地方给出,其中SID既可以包含背景噪声功率,也可以包含关于背景噪声的最少信息,还可以不包含关于背景噪声的信息。
本发明提供了一种方法和系统,用于在缺少包含频谱信息的SID分组的情况下产生反映实际噪声频谱的有色噪声。举例来说,可以通过实施如上所述的用于CNG的低复杂性的频谱估计技术来产生舒适噪声。
本发明提供了一种在解码器端使用话音以及话音与噪声之间的过渡余音的信息内容来产生舒适噪声的方法和系统。通过使用各种对有色噪声频谱进行估计的算法,可以实现这种针对噪声所进行的自适应。根据本发明的一个实施例,可以实施一种自适应算法,所述算法与时间而不是基于算法的数据块相适应,由此防止重复产生那些存在于所适应的数据块中的人工产物。本发明的自适应与所发送的固有噪声电平相关联,并且提供了产生有色舒适噪声的能力。如图4a所示,以下附图以流程图的形式显示了这种思想。
图4a是根据本发明一个实施例的用于解码器处理的流程图的实例。在步骤410,可以对话音/余音内容进行识别。如果存在话音/余音内容,则在步骤412中执行舒适噪声自适应。如果不存在话音/余音内容,则在步骤414中产生舒适噪声。并且可以把来自步骤412和步骤414的信息转发到步骤410的输入端。
图4b描述了根据本发明一个实施例的用于执行解码器处理的系统400的一个实例。图4还描述了一个示范性的检测输入信号424,它是为了进行传送而被处理的,此外还描述了一个接收信号438(二者显示在作为y坐标的时间之上的作为x坐标的信号幅度)。422可以代表电话或是依附于解码器420的其他语音设备,其中编码器对语音和其他信号进行处理并且将其传送到解码器450。这些信号由一个接收电话或其他语音通信设备452接收。在这个实例中,语音信号430和语音信号432是由一个与设备422和/或420相关联的语音活动检测器来进行检测的,与信号440和442一样,这些信号分别被传送到一个接收端(450和/或452)。434可以表示语音信号的余音部分,其中所述余音部分表示的是从语音到静音的过渡。可以实施一个固有噪声电平估计器来检测背景噪声。信号436表示背景噪声。在一个实例中,可以传送一个与背景噪声436相关联的功率量度。例如,背景噪声436可以具有大小为-60dB的功率。信号444可以表示以大小为-60dB的功率所产生的背景噪声。
根据本发明,在解码器端可以借助一种自适应算法并且使用语音信号440中的微小暂停(例如446和448)来产生背景噪声444。换句话说,可以从诸如440这类语音信号的微小暂停或间隙中获悉背景噪声。这个信息可以用来产生图4c的滤波器462。因此,通过仅限于传送语音信号,可以保存那些从编码器420发送到解码器450的信息。本发明提供了一种用于在并未传送背景噪声本身的时候在解码端进行自适应的方法和系统。换句话说,所述传送仅限于语音信号。由此可以不发送那些关于背景噪声的信息,以便节省带宽。根据另一个实施例,可以使用余音434来产生背景噪声。余音434表示的是介于语音与非语音部分之间的过渡时段。因此,余音434可能包含关于背景噪声的信息,并且在444中可以使用所述信息来产生背景噪声。
图4c是根据本发明的用于产生背景噪声的系统的一个实例。白噪声生成器460产生了在创建替换背景的过程中使用的白噪声,以便在接收端将其插入非语音部分,并且所述白噪声生成器可以包括一个随机数生成器,但是也可以实施其它类型的生成器。滤波器462接收白噪声生成器460的输出并且可以代表一个激励滤波器,在一个实例中,所述滤波器可能是固定的。此外,借助一种自适应算法,可以基于与语音信号之中诸如446或448这类微小暂停或是诸如434这类余音部分有关的信息来创建滤波器462。这个信息可用于在非语音信号中精确有效地产生背景噪声。因此,滤波器462可以输出一个噪声序列,所述序列表示的是在语音信号之间的编码器端测得的真实(或近似真实)噪声或噪声特性。
根据本发明的另一个实施例,可以提供一种在实时系统中为定点低延迟算法确定滤波器增益以及自动增益控制的方法和系统。在那些低等待时间具有强制性并且滤波器不是常数而是基于输入信号的变量的系统中,可以实施一种用于确定滤波器增益和自动增益控制(AGC)的方法和系统。本发明提供了一种用于实施低速MIPS的方法和系统,所述方法和系统有益于那些在各个呼叫上产生单独取样(或少数取样)的应用。根据本发明,也可以执行其他应用。
本发明的一个附加方面包括使用一个近似估算来对滤波器增益进行计算。其中可以包括对在频谱方面与所过滤的输入相似的信号进行滤波,然后则对所述信号进行精确调谐。在本发明的这个方面,精确调谐处理可以基于所述算法的低延迟和低MIPS状态中的短期移动均方计算。此外也可以执行其他变化。
在另一个方案中,本发明提供了一种方法和系统,所述方法和系统使用小于强制增益计算的MIPS来控制输出增益,然后基于所述增益来对输出进行扩缩。本发明的方法和系统尤其适合单个取样(或少数取样)输入的情况。
根据本发明的一个实施例,通过过滤已知(或典型的)的输入信号,可以计算出滤波器的近似输出增益。举例来说,可以在一个时间紧迫(time-critical)的例程中完成这种计算,如果滤波器分支保持恒定,则可以在算法开端完成所述计算。通过使用增益(GO),可以为输出(GR)的给定均方根(RMS)值计算扩缩因数(SF)。其中GR的值可以由其他装置加以确定,但也可以是一个恒定的输出电平。
图5和图6描述的是根据本发明实施例的滤波器以及滤波器增益GF的框图的实例。图5显示了一个典型的输入信号512,该信号由滤波器510过滤,以便产生514所示的近似输出增益。图6显示的是一个输入增益GI,该增益由612显示并由一个具有输出增益GO的滤波器增益GF来进行过滤,其中输出增益GO由614显示,滤波器增益GF则是由610显示。根据本发明的一个实施例,以下计算适用于图6的滤波器。
GO=GF×GI
GR=GO×SF
例如,就关于增益的精密调谐而言,当前在滤波过程中可以使用在算法非决定性阶段计算的扩缩因数来控制输出增益。由于所述输出可以是可用的逐个取样,因此,在例如与块长度相等的预定时段中,可以对这种取样数据块的均方值进行计算。当达到预定块长度(L)时,可以对均方值以及输出RMS的平方值进行比较。并且可以使用其他方法来确定输出RMS的值。为了易于发现均值,可以通过计算L的倒数来产生一个简单倍数(simple multiple),也可以使L成为2的倍数或是其他数字。根据所述输出的增益小于GR-D dB还是大于GR+D dB,可以将扩缩因数增加一个很小的预定量Delta(Δ)dB。Δ代表所述改变是快速还是平缓进行的,D表示的是一个可以由用户定义的预定常数。
图7描述的是根据本发明实施例的AGC精密调谐的处理。在步骤710,可以输出一个如s所示的取样。在步骤712,可以执行一个平方和(sum square)计算,其中平方和可以等于平方和+s2,其中s表示取样,平方和表示各个取样的平方的总和。此外,可以将一个计数器提前一个或几个预定值。在步骤714,如果确定所述计数大于L(例如块长度)的预定值,则执行一个均方计算,其中如步骤716所示,所述均方可以等于平方和除以L所得到的值。否则可以在步骤710中输出一个或几个取样。在步骤718,可以确定均方值是否大于GR+D dB。其中常数D表示一个可以由用户定义的预定常数。如果这样的话,在步骤720,可以将SF的值增大Delta dB。如果在步骤722确定均方值小于GR-D dB,那么在步骤724中,可以将SF减少Delta dB。否则也可以在步骤710中接收一个或几个输出取样。在步骤720和/或步骤724的输出端,可以建立一个通向步骤7109的反馈环路。
在将近似增益应用于输出之后,可以应用自动增益控制(AGC)来确保所产生的噪声处于±2dB以内。并且可以将输出增益作为4毫秒时间上的块平均值来进行计算。如果这个平均值大于(小于)6dB的所需的固有噪声电平,则在每隔4毫秒的时间将输出增益减少(增加)3dB。
根据本发明的另一个实施例,CNG模块压缩并重建话音信号的静音部分。为了压缩静音或产生舒适噪声,CNG可以与任何一种活动检测器一起工作,例如具有自动增益控制模块的语音活动检测(VAGC),此外CNG也可以与回声消除器一起工作,例如具有单独反射器(ECSR)模块的回声消除器。此外也可以实施其他应用。下文与图8~14中概括的多种方式都可以使用CNG。
图8描述的是根据本发明一个实施例而在编码端使用了CNG的系统的一个实例。这种操作模式可以在声码器不具有静音压缩能力的时候使用。为了改进系统压缩,如图8所示,在话音并未活动的时候,CNG自适应于话音数据与静音插入描述符(SID)之间的噪声。
如图8所示,在步骤810,编码器接收输入数据的BLOCK_SIZE(块大小)。在步骤812,对近端话音活动加以判定。如果近端话音并未活动,则在步骤818执行NFE_run和CNG_adapt函数。如果需要,在步骤820发送SID分组。如果近端话音活动,则在步骤814中执行G7xx编码,并且在步骤816中把码字发送到信道(传送到解码器),在解码器上,可以使用所述码字来对信号信息进行解码。在步骤820和/或步骤816中执行的输出之后,可以复位系统状态,以便在步骤810中接收新的输入数据。从这点向前,系统将会重新启动并且把输入数据转换成步骤816的话音码字或步骤820的SID分组,其中所述处理将会继续进行,直到话音输入停止为止(例如,呼叫结束)。
图9描述的是根据本发明实施例而在没有发送SID的时候在编码端使用了CNG的系统的一个实例。在步骤910,可以接收输入数据的BLOCK_SIZE。当在步骤912中判定近端话音没有活动的时候,CNG会在步骤914中自适应噪声并且产生由声码器来进行编码的噪声。特别地,在步骤914中可以执行NFE_run、CNG_adapt以及CNG_generate函数。这种模式可以在残留回声以及噪声组合令人感到不快的时候使用。如图9所示,CNG是基于所述输入的平均频谱来产生那些在感觉方面有所增强的噪声的。在步骤912,如果确定近端话音活动,则在步骤916中开始进行G7xx编码,并且在步骤918,把经过编码的码字发送到信道(传送到解码器),从而在解码器上合成话音。在步骤918的输出之后,系统可以复位到步骤910。所述系统预备接收数据取样的新的BLOCK_SIZE数字,并且所述处理将会继续,直到话音输入停止为止(例如呼叫结束)。
图10描述的是根据本发明实施例而在解码端使用了CNG的系统的一个实例。在步骤1010,如果接收到的码字即为步骤1012中确定的SID,那么,CNG会在步骤1014中对该信息进行解码并且在步骤1016中产生舒适噪声。特别地,在步骤1014,可以执行CNG_decode函数,并且在步骤1016,可以执行CNG_generate函数。SID通常包含了所要产生的噪声频谱信息。这种模式可以在编码端使用CNG或是符合IETF(或其他)标准的其他任何舒适噪声生成算法的时候使用。如果需要的话,也可以在中断服务程序(ISR)的过程中使用CNG_generate()。在1012,如果没有接收到SID,则在步骤1018执行G7xx解码。在步骤1020,可以产生输出数据的BLOCK_SIZE并且将其转发到步骤1010。当在步骤1020中输出话音/静音之后,所述系统将会复位,以便接收新的码字或SID,并且所述处理将会继续进行,直到呼叫结束为止(例如码字或SID停止)。
图11描述的是根据本发明实施例而在解码端使用了CNG的系统的另一个实例。在这个实例中,除了固有噪声电平之外,SID不具有任何关于噪声的信息。在声码器的解码处理过程中,CNG自适应于话音数据之间的噪声并且会在接收到SID的时候产生噪声。这种情况使用户能够产生与实际背景噪声更接近的噪声,而不是简单的白噪声。
在步骤1110,对码字进行接收。在步骤1112,可以对SID进行检测。如果没有接收到SID并且因此没有执行检测,则在步骤1116中执行G7xx解码。在步骤1118,执行NFE_run()和CNG_adapt()这两个函数。如果需要的话,在步骤1114,也可以将CNG_generate()用在ISR之中。在步骤1120,可以产生输出数据的BLOCK_SIZE并且将其转发到步骤1110。
现在将会在下文中给出根据本发明某个特定实施例并且涉及示范性常数、结构、原型、存储器使用情况以及文件描述的附加细节。
/* The following constants define the default parameter values */#define CNG_ADAPTSIZE_DEF (40)#define CNG_GENSIZE_DEF (40)/* The following constants define the max.and min.parameter values */#define CNG_MAX_ADAPTSIZE (80)#define CNG_MAX_GENSIZE (80)#define CNG_MIN_ADAPTSIZE (40)#define CNG_MIN_GENSIZE (1)/* The following constant defines the size of the SID */#define CNG_SIDSIZE (11)/* The following constants define the modes of CNG operation */#define CNG_NO_SID (0)#define CNG_REFLC_SID (1)Internal Object Definitiontypedef struct{int stackMemAddr; /* Saving stackMem address */int xm1; /* Band Pass filter history */int xm2; /* Band Pass filter history */int xm3; /* Band Pass filter history */int ym1; /* Band Pass filter history */int ym2; /* Band Pass filter history */int ym3; /* Band Pass filter history */int 1msErr; /* Error for 1ms */int highBuf; /* Buffer for AGC calc. */int lowBuf; /* Buffer for AGC calc. */<!-- SIPO <DP n="26"> --><dp n="d26"/>int highPrevBuf; /* Buffer for AGC calc. */int lowPrevBuf; /* Buffer for AGC calc. */int count; /* Count for AGC */int seed1; /* Seed for Rand Generator 1 */int c13849; /* Constant for Rand */int seed2; /* Seed for Rand Generator 2 */int c31821; /* Constant for Rand */int 1msPredCoef[11];/* Predictor coeffs.*/int curRms; /* Gain factor for output */int c15330; /* AGC constant */int c21835; /* AGC constant */int c14736; /* AGC constant */int flag; /* AGC flag */int noise; /* Noise floor */int randCount;/* Counter for randomizing */int genSize1; /* pGENSIZE-1 */int adaptSize1; /* pADAPTSIZE-1 */int 1msHist[11];/* History for 1ms */int genMem[10]; /* History for synth filter */}_CNG_Internal;Local Parameter Definitiontypedef struct{int pADAPTSIZE; /* Adapt block size */int pGENSIZE; /* Generate block size */}CNO_Params;Object Definitiontypedef struct{longbuffer;; /* Even alignment */_CNG_Internal internal; /* internal object */int*dst_ptr;int*src_ptr;int*sid_ptr;intsidMode;}CNG_Obj;typedef CNG_Obj *CNG_Handle;Function Prototypes may include the followingvoid CNG_init(CNG_Handle cng_ptr,CNG_Params *params_ptr,int *stack_ptr);void CNG_adapt(CNG_Handle cng_ptr,NFE_Handle nfe_ptr);void CNG_decode(CNG_Handle cng_ptr);void CNG_generate(CNG_Handle cng_ptr);
以下是与CNG模块相关联的示范文件的列表和描述。
表1
下列实例代码显示了CNG模块如何自适应和产生话音信号静音部分。在这里使用线性模式的G726来对活动语音进行编码和解码。而VAGC则被用于检测静音。假设静音插入描述符(SID)具有因特网工程任务组(IETF)的草拟SID格式。
#include<comm.h>#include<nfe.h>#iuclude<vagc.h>#include<cng.h>#include<g726.h>#undef USE_C_STACK /* If defined,CNG will use the C stack.*/#define BLOCK_SIZE (40)#define SPEECH (0)#define SID (1)NFE_Obj nfeObj;VAGC_Obj vagcObj;CNG_Obj cngObj;G726_Obj encObj;G726_Obj decObj;GLOBAL_Params globals={<!-- SIPO <DP n="28"> --><dp n="d28"/>4004, /* 0dBm level for input signal */4004}; /* 0dBm level for output signal */NFE_Params nfePara={NFE_MINNOISE_DEF,/* Minimum noise floor in dBm */NFE_MAXNOISE_DEF,/* Maximum noise floor in dBm */BLOCK_SIZE};VAGC_Params vagcPara={VAGC_tSUSTAIN_DEF,/* Number of blocks for Sustain */VAGC_tHCNGOVER_DEF,/* Number of blocks for HCNGover */VAGC_tDECAY_DEF,/* Decay time */VAGC_pMAXGAIN_DEF,/* Maximum gain */VAGC_pINITGAIN_DEF,/* Initial gain */VAGC_pGLI_DEF};/* Input speech gain*/CNG_Params cngPara={BLOCK_SIZE, /* Adapt block size */BLOCK_SIZE};/* Generate block size */#ifndef USE_C_STACKextern int *vpoStack_ptr;/* VP Open stack to be used by CNG */#endifint src[BLOCK_SIZE];int dst[BLOCK_SIZE];int mubuf[BLOCK_SIZE/2];int cBuf[BLOCK_SIZE/2];int sid[CNG_SIDSIZE];/**========main=========*/void main(){NFE_Handle nfe_ptr=&amp;nfeObj;VAGC_Handle vagc_ptr=&amp;vagcObj;CNG_Handle cng_ptr=&amp;cngObj;G726_Handle enc_ptr=&amp;encObj;G726_Handle dec_ptr=&amp;decObj;int buffer[BLOCK_SIZE];int retVal;int codeword;int *stack_ptr;/** Placeholder;Initialize host device driver*/#ifdef USE_C_STACKstack_ptr=NULL;#elsestack_ptr=vpoStack_ptr;#endif/** Initialize VP OPEN modules*/nfe_ptr->src_ptr=src;<!-- SIPO <DP n="29"> --><dp n="d29"/>nfe_ptr->xmit_ptr=NULL;NFE_init(nfe_ptr,&amp;globals,&amp;nfePara,NFE_COLDSTART,stack_ptr);vagc_ptr->dst_ptr=NULL;vagc_ptr->agcMode=VAGC_BYPASSAGC;VAGC_init(vagc_ptr,&amp;globals,&amp;vagcPara,VAGC_COLDSTART,stack_ptr);/* Initialize G726 encoder/decoder5ms block,32kbps rate */G726_init(enc_ptr,G726_ENCODE,stack_ptr,BLOCK_SIZE,4,0);G726_init(dec_ptr,G726_DECODE,stack_ptr,BLOCK_SIZE,4,0);cng_ptr->src_ptr=src;cng_ptr->dst_ptr=dst;cng_ptr->sid_ptr=sid;cng_ptr->sidMode=CNG_REFLG_SID;CNG_init(cng_ptr,&amp;cngPara,stack_ptr);while(1){/** PlaceholderRead BLOCK_SIZE/2 words of mu-law input speech* data into mubuf[]*/mu2linear(BLOCK_SIZE,mubuf,src);NFE_run(nfe_ptr);VAGC_run(vagc_ptr,nfe_ptr);/* Encoder */if(vagc_ptr->portActive){enc_ptr->src_ptr=src;enc_ptr->dst_ptr=cBuf;G726_encode(enc_ptr);codeword=SPEECH;}else{CNG_adapt(cng_ptr,nfe_ptr);codeword=SID;}/* Decoder */if(codeword=SPEECH){dec_ptr->src_ptr=cBuf;dec_ptr->dst_ptr=dst;G726_decode(dec_ptr);}else{/** Placeholdercopy received information to sid buffer.* Set unused reflection coefficients to zero.*/CNG_decode(cng_ptr);CNG_generate(cng_ptr);}/** Placeholderwrite BLOCK_SIZE samples of decoded speech from<!-- SIPO <DP n="30"> --><dp n="d30"/>*dst[] to output file*/}/* Placeholderclose the host device driver */}
以下实例代码显示了CNG模块如何在回声消除应用中压缩或重建话音信号的静音部分。在这里使用G726来对活动语音进行编码和解码。在这个实例中,CNR是与ECSR一起工作的。此外假设SID只具有噪声电平信息。
#include<comm.h>#include<nfe.h>#include<ecsr.h>#include<cng.h>#include<g726.h>#undef USE_C_STACK /* Ifdefined,CNG will use the C stack.*/#define BLOCK_SIZE(40)#define TAIL_LENGTH(256) /* 32ms Tail Length */#define SPEECH (0)#define SID (1)NFE_Obj nfeObj1;NFE_Obj nfeObj2;ECSR_Obj ecObj;CNG_Obj cngObj;G726_Obj encObj;G726_Obj decObj;GLOBAL_Params globals={4004,/* 0dBm level for input signal */4004};/* 0dBm level for output signal */NFE_Params nfePara={NFE_MINNOISE_DEF, /* Minimum noise floor in dBm */NFE_MAXNOISE_DEF, /* Maximum noise floor in dBm */BLOCK_SIZE};ECSR_Params ecsrPara={BLOCK_SIZE, /* Block size for ECSR_run() */TAIL_LENGTH, /* Tail length in samples */0,/* ISR block size for ECSR_run() */0,/* minimum voice power */100}; /* hangover time */CNG_Params cngPara={BLOCK_SIZE, /* Adapt block size */BLOCK_SIZE}; /* Adapt block size */#ifndef USE_C_STACKextern int VPO_STACKMEM;int*vpoStack_ptr=&amp;VPO_STACKMEM;/* VP Open stack used by modules */<!-- SIPO <DP n="31"> --><dp n="d31"/>#endifint src[BLOCK_SIZE];int dst[BLOCK_SIZE];int muBuf[BLOCK_SIZE/2];int cbuf[BLOCK_SIZE/2];int rin[BLOCK_SIZE];int sin[BLOCK_SIZE];int sout[BLOCK_SIZE];int nlpOut[BLOCK_SIZE];int dlyBuf[ECSR_32MS_DLY_BUF_SIZE];/**========main========*/void main(){NFE_Handle nfe1_ptr=&amp;nfeObj1;NFE_Handle nfe2_ptr=&amp;nfeObj2;ECSR_Handle ec_ptr=&amp;ecObj;CNG_Handle cng_ptr=&amp;cngObj;G726_Handle enc_ptr=&amp;encObj;G726_Handle dec_ptr=&amp;decObj;int buffer[BLOCK_SIZE];int retVal;int *stack_ptr;/** PlaceholderInitialize host device driver*/#ifdef USE_C_STACKstack_ptr=NULL;#elsestack_ptr=vpoStack_ptr;#endif/** Initialize VP OPEN modules*/ec_ptr->control=ECSR_ERL|ECSR_NLP;ec_ptr->rin_ptr=rin;ec_ptr->sin_ptr=sin;ec_ptr->soutFull_ptr=sout;ec_ptr->nlpOut_ptr=nlpOut;ec_ptr->dlyBuf_ptr=dlyBuf;ECSR_init(ec_ptr,&amp;globals,&amp;ecsrPara,ECSR_COLDSTART,stack_ptr);/** nfe1 is used for noise estimation on the encoding side*/nfe1_ptr->src_ptr=sout;nfe1_ptr->xmit_ptr=rin;NFE_init(nfe1_ptr,&amp;globals,&amp;nfePara,NFE_COLDSTART,stack_ptr);/** nfe2 is used for noise estimation on the decoding side*/nfe2_ptr->src_ptr=dst;nfe2_ptr->xmit_ptr=NULL;<!-- SIPO <DP n="32"> --><dp n="d32"/>NFE_init(nfe2_ptr,&amp;globals,&amp;nfePara,NFE_COLDSTART,stack_ptr);/* Initialize G726 encoder/decoder5ms block,32kbps rate */enc_ptr->src_ptr=src;enc_ptr->dst_ptr=cbuf;G726_init(enc_ptr,G726_ENCODE,stack_ptr,BLOCK_SIZE,4,0);dec_ptr->src_ptr=cbuf;dec_ptr->dst_ptr=dst;G726_init(dec_ptr,G726_DECODE,stack_ptr,BLOCK_SIZE,4,0);/** As dst buffer is mutually exclusive,we can use the same buffer*/cng_ptr->src_ptr=dst;cng_ptr->dst_ptr=dst;/* SID is not required,set sidMode to CNG_NO_SSIPO <DP n="33"> --><dp n="d33"/>else{CNG_generate(cng_ptr);}/** Placeholderwrite BLOCK_SIZE samples of decoded speech from*dst[]to output file*//* Placeholderbreak when done */}/* Placeholderclose the host device driver */}
本发明的模块函数可以包括CNG_init()、CNG_adapt()、CNG_decode()和CNG_generate(),但是也可以实施其他模块函数。
与CNG_init()模块函数相关联的示范性代码包括
void CNG_init(
CNG_Handle cng_ptr,/* pointer to local CNG object */
CNG_Params *cngParams_ptr,/* pointer to CNG parameters */
int *stack_ptr);/*pointer to stack memory */
这些模块可以具有一个最先调用的初始化函数。在调用CNG的初始化函数CNG_init()之前,首先将会创建两个数据结构。所创建的第一个结构可以包括CNG对象。其中可以为CNG的各个同时应用实施一个对象。CNG_init()对这个对象进行初始化。第二个结构可以包括CNG参数。这个结构是针对个别需要而被初始化的。下面的表2显示了示范性参数及其范围。
CNG_init()可以使用三个(或更多)调用变元。第一个调用变元可以包括一个指向CNG对象结构的指针。第二调用变元包括一个指向CNG参数结构的指针。第三个调用变元包括一个指向堆栈暂存空间的指针*stack_ptr。它指向的是为暂存空间(例如临时变量)分配的存储器的底部(例如最高地址)。
如果*stack_ptr指向NULL,则将现有C堆栈用于暂存空间。如果使用一个独立的暂存空间,那么必须存在足够的空间,以便分配给那些具有最大暂存空间利用率的模块,而对任何ISR使用而言,所述空间还要加上开销,其中如果中断所述模块,则有可能需要所述ISR使用。常数CNG_STACKMEMSIZE代表CNG所需要的暂存空间数量,其中不包括任何关于ISR使用的开销。
表2
Function CNG_adapt()
void CNG_adapt(
CNG_Handle cng_ptr, /* pointer to local CNG object */
NFE_Handle nfe_ptr);/* pointer to NFE object */
图12描述的是根据本发明实施例的用于CNG_adapt函数的流程图。两个调用变元可以包括分别指向CNG对象和NFE对象的指针。表3描述的是在图12的CNG_adapt函数中使用的示范性指针和模式赋值。在调用CNG_adapt()之前,首先要为源指针、SID模式以及SID缓存器指针赋值。源指针是一个指向大小为pADAPTSIZE并在其上进行自适应的源缓存器的指针。在这里将所述指针分配给了cng_ptr->src_ptr。
SID模式值确定CNG_adapt是否计算了SID系数。SID模式是通过cng_ptr->sidMode来指定的。对那些不需要SID计算的应用而言,可以将这种模式设定为CNG_NO_SID,否则将这个值设定为CNG_REFLC_SID。如果使用CNG_REFLC_SID模式,则用户需要为SID缓存器指针cng_ptr->sid_ptr赋值。而SID缓存器的大小则应该是CNG_SIDSIZE。
在初始化CNG对象之后,每隔pADAPTSIZE个取样就可以调用一次CNG_adapt(),以便执行针对静音的自适应。只要检测到语音静止,则调用CNG_adapt()。但在ISR中却不能调用CNG_adapt()。如果将SID模式设定为CNG_REFLC_SID,则CNG_adapt()将会输出固有噪声电平以及SID缓存器中的反射系数。
如果舒适噪声净荷只包括固有噪声电平而不包含其他涉及噪声频谱的信息,那么可以调用CNG_adapt()来适应于语音信号之间的噪声,由此确保所产生的噪声具有较好的质量并且更接近或更能代表实际噪声。为了防止适应于所产生的噪声,如图11所示,在数目为pADAPTSIZE的取样包含解码话音而不包含由CNG产生的噪声的时候,可以调用CNG_adapt()。
图12显示了根据本发明一个实施例来执行CNG_adapt函数的步骤。在步骤1210,确定信号功率减去6dB是否小于或等于噪声功率。如果不是,则在步骤1212中执行LMS自适应。在步骤1214,可以执行滤波器增益归一化和输出增益计算。在步骤1216,确定sidMode(SID模式)是否等于CNG_REFLC_SID。如果等于,则在步骤1218中执行从直接形式到反射系数的转换。而返回1220则表示CNG_adapt函数结束。
表3
与CNG_decode()模块函数相关联的示范性代码是
void CNG_decode(
CNG_Handle cng_ptr);/* pointer to local CNG object */
图13描述的是一个根据本发明实施例的用于CNG_decode函数的流程图。由于它只具有唯一的调用变元,因此可以包括一个指向CNG对象的指针。表3描述了这些指针以及模式赋值。在调用CNG_decode()之前,可以将SID指针cng_ptr->sid_ptr指派给一个大小为CNG_SIDSIZE的缓存器。并且将SID中未曾使用的反射系数设定为零。
CNG_decode()可以对静音插入描述符(SID)进行解码,并对CNG_generate()产生舒适噪声所使用的滤波器参数以及对象变量进行初始化。每隔数目为pADAPTSIZE的取样即可调用一次CNG_decode()。当SID包含噪声频谱特性即全极点滤波器的反射系数的时候,可以使用CNG_decode()。
在SID只包含噪声电平的应用中,不能使用CNG_decode()。如图11所示,可以在解码器中使用CNG_adapt()。在后一种情况下,可以将cng_ptr->sidMode设定为CNG_NO_SID,以便减少MIPS。
图13显示的是根据本发明实施例而用于执行CNG_decode函数的步骤。在步骤1310,可以对SID参数进行解码并且执行从反射系数到直接形式的转换。在步骤1312,可以执行滤波器增益归一化以及输出增益的计算。而返回1314则表示CNG_decode函数的结束。
与CNG_generate()模块函数相关联的示范性代码是
void CNG_generate(
CNG_Handle cng_ptr);/*pointer to local CNG object*/
图14描述的是根据本发明实施例而用于CNG_generate函数的流程图。调用变元可以包含一个指向CNG对象的指针。表3描述了这些指针以及模式赋值。在调用CNG_generate()之前,首先应该将cng_ptr->dst_ptr分配成指向一个大小为pGENSIZE的输出缓存器。
CNG_generate()可以在各个呼叫上产生数目为pGENSIZE的取样。这个函数也可以在ISR中得到调用。这种特性则是通过pGENSIZE(参见CNG_init)规定的。用于产生舒适噪声的信息可以直接从对象中获取,并且可以由CNG_decode()或是CNG_adapt()进行更新。
图14显示了根据本发明实施例而用于执行CNG_generate()函数的示范性处理的步骤。在步骤1410中可以合成噪声。在步骤1412,可以执行带通滤波。在步骤1414中执行的是自动增益控制。返回1416代表CNG_generate函数结束。
对本发明的模块需要而言,功能说明可以包括适应于话音的静音部分、产生舒适噪声以及创建静音插入描述符。对适应于话音的静音部分以及产生舒适噪声而言,重建的舒适或背景噪声应该尽可能多地保存原始信号能量和频谱形状。对创建静音插入描述符而言,可以如在注明日期为2001年10月的关于舒适噪声的实时传送协议(RTP)净荷的IETF草案中描述的那样来创建SID。
性能说明可以包括重建静音(舒适噪声)的质量,并且举例来说,性能说明还可以依照带有附录B的国际电信联盟(ITU)标准G.729/G.729A。
在图15~19中对在缺少SID分组的情况下使用了CNG的上述系统进行了论述。CNG软件被用在解码端上。在编码端,静音作为能级而被压缩并且没有传送频谱信息。而在编码端上并不需要CNG。并且在解码端,CNG算法适应于那些由G7xx解码器在话音分段中产生的话音,并且CNG算法使用该信息而在缺少话音分段的情况下合成静音/背景噪声。
在MagnesiumTM产品中,California,SantaClara的Virata公司扩展了硅片上集成软件(ISOSTM)的优点——即预先集成软件、预先封装系统、可选软件模块以及系统灵活性,所有这些将导致出现针对语音处理市场的快速和低风险研发,由此提供一个函数和接口驱动器包——vCoreTM——以及可以兼容C54的数字信号处理(DSP)芯片,所述芯片可以是例如德州仪器(Texas Instrument)制造的芯片。其目标针对的是电信设备,例如宽带集成接入设备(IAD)、专用小交换机(PBX)、按键系统、无线基站以及IP电话。从理论上讲,这种强大的硬件和软件组合适合那些强化MIPS的语音和电话算法,并且可以包括VoDSL和VoIP的应用。
上述发明概念也可以引入专用集成电路(ASIC)或是芯片组,例如包含了可以在多种应用中使用的Viata公司的MagnesiumTMDSP芯片。图15和16描述了可以引入本发明的硬件/软件架构1500和1600。图15的系统包括协议处理器1510、网络处理器1520、物理接口部分1530以及外部设备部分1540,此外还包含了执行预期功能的软件。如图15所示,可以将舒适噪声生成器的功能1550作为一种语音算法或其他软件来加以实施。
图16的系统包括一个与多种模块和/或应用进行通信的软件接口1624,其中包括一个语音检测和自动增益控制(AGC)模块1610、一个呼叫等待时的呼叫方标识符(CIDCW)模拟显示服务接口(ADSI)模块1612、一个全双工扬声器电话模块614、一个呼叫处理传真音调检测模块1616、一个语音编码器模块1618、一个双音调制(或多)频率(DTMF)检测和删除模块1620以及一个线路回声消除器模块1622。根据本发明,可以提供一个舒适噪声生成器模块1636。另外,客户应用1626、HeliumTM主机接口1628、主机驱动器1630、信道驱动器1632以及电话接口控制1634还可以提供其他功能。此外也可以实施其他应用、模块和功能。
Virata的MagnesiumTM的语音软件vCoreTM是一个已经在世界上数以百计的应用中得到检验的对象和源代码软件库。vCoreTM基于一种开放和灵活的模块化软件架构,它能使系统设计人员以最少的开发和测试劳动强度来提供一种优化和有效的客户解决方案。与vCoreTM相关联的软件模块可用于大范围的应用,其中包含电话功能、网络回声消除器、传真/数据功能、语音编码器以及其他功能。
也可以将电话功能引入所述系统,其中所述电话功能包括DTMF——双音调制(或多个)频率生成和移除;MFD——多频音调检测;UTD——通用呼叫进行音调检测;FMTD——传真和调制解调器的音调检测音调生成器——单、双和已调制;VAGC——具有自动增益控制的语音活动检测。网络回声消除器可以包括ITU G.168-多反射器(直到128毫秒的尾部)以及ITU G.168-单反射器(直到48毫秒的尾部)。传真/数据功能可被引入所述系统,其中包含了呼叫方ID、具有呼叫等待的呼叫方ID、T.38和I.366.2的传真延迟、高层数据链路控制(HDLC)的发送/接收以及全双工扬声器电话。语音编码器可以包括G.726、G.728-低延迟编码器;G.729、G.729A、G.729B、G.729AB、G.729E;G.723.1、G.723.1A;全球数字移动电话系统GSM-EFR、GSM-AMR;G.722.1-音频编码器;以及专有编码器。
现在参考图17~19,基于DSL的语音集成接入设备(IAD)通常需要集成范围很大的复杂技术,其中包括异步传送模式(ATM)、分组、桥接、IP以及路由选择网络;实时、高品质、语音业务量处理;语音编码/解码、回声消除、双音调频(DTMF)以及其他算法;并且还包含了语音控制和公共电话系统互通协议。这些技术强制推行硅片和软件需求,并且需要通过高度集成来实现无缝操作。
举例来说,Virata的AzuriteTM芯片组是针对DSL集成接入设备(IAD)并且集成了语音数据的解码方案。通过集成“基于DSL的语音”系统组件,这些芯片组明显提高了性能,降低了成本,并且加快了进入市场的时间。Virata的AzuriteTM 3000系列芯片组以Vriata的MagnesiumTM DSP、HeliumTM通信处理器以及完整的软件堆栈为特征。无论外部数字用户线是xDSL、非对称数字用户线(ADSL)、对称数字用户线(SDSL)还是其他技术,Virata的PHY的中枢(neutral)Helium通信处理器都可以与任何一种外部数字用户线的物理层设备(DSL PHY)结合使用,由此使得3000系列适合很大范围以内的DSL IAD。Virata的Azurite 4000系列芯片组以Virata的Magnesium DSP、Beryllium通信处理器以及完整的软件堆栈为特征。Virata的Beryllium通信处理器包括一个内嵌式ADSL PHY,由此使得4000系列能够为ADSL IAD实现极高等级的集成。
在一个实施例中,可以将本发明引入那些在DSL中心局(CO)设备中使用的组件。CO设备通常包括具有内嵌式外围设备的高性能处理器以及针对各种CO设备应用的集成通信协议堆栈。例如,对中心局/数字回路载波(CO/DLC)环境中具有发明性的解决方案而言,其中一种可能的应用包括数字用户线接入复用器(DSLAM)的线路卡。举例来说,可以使用Virata的Helium处理器以及ISOS软件来集中7个之多的双缓存(快速和交织路径)ADSL端口或是13个之多的单缓存(只有交织路径)端口,在这两种情况下,假设把双缓存端口面朝上行方向或者将其连接到了DSLAM或小型SLAM应用的底板。Helium的高速UTOPIA2接口可以支持多种不同的DSL PHY设备(例如ADSL、SHDSL(单线高比特率数字用户线或对称高密度数字用户线)及其他设备。并且多个设备可以结合使用,以便支持具有更多端口的线路卡。在这里可以从本地存储器中启动Helium,也可以从中心处理器/存储器中远程启动Helium。
所提供的软件可以支持多种异步传送模式(ATM)功能,例如操作和管理(OAM)、优先级队列、业务量整形(恒定比特率(CBR)、实时(rt)-可变比特率(VBR),非实时(nrt)-VBR),管制(信元标记)以及拥塞管理(早期分组丢弃(EPD)、部分分组丢弃(PPD))。在控制平面上,Helium与Q.2931呼叫处理代理是一起提供的,其中所述呼叫处理代理建立一个交换虚电路(SVC),并且在其内部将指派的ATM标签(虚路径标识符/虚信道标识符(VPI/VCI)分配给物理的T1广域网(WAN)端口)。在管理平面上,Helium是与简单网络管理协议(SNMP)代理一起提供的,所述代理可以由网元管理所使用,以便配置或是监视模块性能,例如对链路故障引起的业务事件中止进行检测,维护和报告循环冗余码误差校验(CRC)的差错计数等等。
在另一个实例中,使用Virata的HeliumTM处理器用来支持ATM与帧中继之间的协议转换。这种自适应可以在DSLAM或ATM交换机中使用,以便经由例如帧中继网络而把数据传送到一个因特网服务提供商(ISP)。来自交换机背板的ATM信元经由UTOPIA-2接口而被Helium接收,并且转换成一个AAL-5 PDU(协议数据单元)。由此产生的PDU封装到一个具有数据链路连接标识符(DLCI)的HDLC报头之中,以便结束针对帧中继所进行的转换。如在协议堆栈图中指示的那样,在其他方向上,所述处理将会倒转。在控制平面上,Helium是与Q.2931呼叫处理代理一起提供的,其中所述代理建立了SVC,并且在SVC内部将指派的ATM标签(VPI/VCI)分配给一个物理的T1 WAN端口。在管理平面上,Helium是与一个SNMP代理一起提供的,所述代理可以由网元管理使用,以便配置或监视模块性能,例如对链路故障所引起的业务事件中止进行检测,维护和报告循环冗余码误差校验(CRC)的差错计数等等。
在另一个实例中,在为ATM边缘交换机或小型SLAM设计ATM反向复用(IMA)线路卡的过程中使用了Virata的Helium处理器。Helium的UTOPIA 1/2接口支持14个之多的分离设备。所述软件支持业务量管理功能,例如优先级队列、业务量整形和管制。举例来说,在拥塞过程中将会延迟或丢弃那些低优先级信元(信元丢失优先级(CLP)=1),以便为语音或视频这类具有高优先级且无法忍受延迟的业务量提供空间。作为选择,也可以调用EPD(早期分组丢弃)来丢弃归属于某个错误分组的全部信元。在控制平面上,Helium是与建立并删除了SVC的用户网络接口(UNI)3.0/4.0的信令堆栈一起提供的。在管理平面上,Helium是与SNMP代理以及Telnet应用一起提供的,所述Telnet应用可以由网元管理使用,以便配置或监视IMA模块的性能。
图17描述了DSL家庭/办公室路由器以及网关硬件的一个实例。如图17所示,IAD 1700包括标准电话塞孔1710,由此经由一个编解码器/SLIC(串行线接口电路)1712而把标准的电话线连接到一个语音DSP。这种操作可以在本地执行,例如家庭办公或小型商务环境中经常使用的专用交换机(PBX)或是在家办公/小型办公(SOHO)的网关,并且所述操作也可以在中心局中远程进行。例如,SLIC 1712可以是一个四端口SLIC,它可以连接到一个语音DSP 1720,如1730所示,所述DSP可以支持舒适噪声生成器功能。语音DSP(例如Magnesium)1720以及ATM这类更高级别的信息处理和分组化处理器位于中心局或PBX/网关。语音DSP 1720可以连接到Helium 1722。Virata的Helium是一个单独的芯片,其中高度集成了ATM交换以及层2/3的处理设备。HeliumTM还包括一个网络处理器,它对连至以太网和通用串行总线(USB)以及其他物理接口的直接连接进行控制。举例来说,Helium 1722可以连接到10BaseT1724、同步动态随机存取存储器(SDRAM)1726、电可擦可编程序只读存储器(EEPROM)1728、DSL PHY 1740以及其他接口。DSLPHY 1740还可以连接到ADSL 1744,所述ADSL则连接到线路驱动器和滤波器1746。在1748那里可以提供一个对接到DSL的接口。另外,在1750还可以提供一个支持大小为+5伏(V)或其他数量的电压的电力供应单元。
语音DSP 1720对语音数据进行编码/压缩,并且如1730所示,舒适噪声生成器功能可以删除所述信号的静音部分,也可以对其进行压缩和编码。当在更高级的处理器上为了IP或DSL传送等目的而对其进行处理之后,可以经由网络来把那些经过压缩的语音数据传送到一个接收器设备,在所述接收器设备中逐层解码所述信息,最终通过解码所述数据分组来提取语音数据。舒适噪声生成器可以处于接收器所在的位置,例如,所述舒适噪声生成器可以处于语音DSP所在的位置,由此可以根据来自信源的数据而对信号静音部分进行解码,如果已经完全删除了静音数据,那么舒适噪声生成器可以重建噪声数据,以便将其插入信号的静音部分。这个重建的噪声数据可以是基于那些从语音数据、历史数据或是所保存的配置文件等等中测得或估计的噪声数据。通过删除静音数据,所述系统节省了带宽。然而希望实现的是通过在静音时段重建和插入舒适噪声数据来避免感觉到信号的接通或切断。
可以使用Virata的G.729-附录B以及G.729A-附录B中的共轭结构的代数码激励线性预测(CS-ACELP)语音编码器算法来实施语音数据的压缩和编码。在Virata的G.729A-附录B中,CS-ACELP语音编码器算法模块执行的是ITU-T G.729A-附录A和附录B的语音编码器标准。G.729A的附录B定义了语音活动检测器和舒适噪声生成器,以便与专为V.70 DSVD(数字数据/语音同传)应用进行优化的G.729和G.729A结合使用。其中使用共轭结构的代数码编码激励线性预测编码函数来把编解码器(编码器/解码器)或线性数据压缩成8Kbps的编码。在Virata的G.729-附录B中,CS-ACELP语音编码器算法模块执行的是ITU-T G.729-附录B中的语音编码器标准。G.729A的附录B定义了一个语音活动检测器以及舒适噪声生成器,以便与专为V.70 DSVD应用进行优化的G.729和G.729A结合使用。其中使用CS-ACELP编码算法来将编解码器或线性数据压缩成8KBps的编码。
作为强化MIPS的G729压缩算法的一种替换方案,在结合上述舒适噪声生成器(CNG)技术的情况下,本发明考虑使用G726标准来进行压缩。举例来说,CNG位于语音DSP的vCoreTM软件模块之中,所述模块可以是例如Virata的Magnesium处理器。在这里将对语音数据进行压缩和编码,并且将会转发分组,以便对其进行更高级别的分组层次化,由此最终沿着通信网络来传送所述分组。一旦到达目的地接收机,则对语音数据进行解码,并且一个CNG将会解码数据并且构造或重建噪声信息,其中噪声信息与这里描述的语音信息是包含在一起的。
图18描述了根据本发明的一个实施例的软件架构。其中可以执行主DSP 1822的应用来处理那些从音频信道经由主机接口层(HST)到达主机处理器的系统级数据流。特别地,主DSP 1822可以支持低开销处理1824以及低等待时间处理1826,此外还可以支持其它类型的处理。FXS驱动器1836(TFXS)对状态转移和用于FXS事件接口的信号防抖进行处理。较低的层包含了用于编解码器1838的设备驱动器、SLIC 1840以及用于音频信道的设备驱动器1834(CNL)。在启动之后,启动载入器1830可以加载DSP图像。其中所述系统提供了最小的开销、最低的CPU利用率、最短的等待时间以及简易集成的组合。
图18描述的是与Virata的Magnesium处理器1820相连的Virata的Helium处理器1810,所述Magnesium处理器1820经由编解码器/SLIC 1852而与电话1850或其他设备相连。Helium处理器1810可以支持语音编程接口1812以及硬件抽象层1814。并且处理器1810也可以支持其他功能。Magnesium处理器1820可以包括共享存储器1828、启动载入器1830、主机接口1832、不同算法(例如舒适噪声生成器1842)1842~1848、不同驱动器(例如1834~1840)以及其他功能。
图19描述的是根据本发明实施例的DSL集成接入设备软件。如图19所示,语音DSP软件可以包括呼叫建立1910、语音处理1912和管理1914。并且还可以提供其他语音软件。如1916所示的本发明的舒适噪声生成器功能可以得到处于1912的语音处理功能支持。语音DSP接口1920在语音DSP软件与通信处理器软件之间提供了一个接口。通信处理器软件可以包括电话信令1922、DSP接口1924、公共服务特定汇聚子层(SSCS)接口1926、急流(JetStream)SSCS 1928、Copperoom SSCS 1930、专有SSCS 1932、路由器1934、网络地址转换(NAT)、点到点的隧道协议(PPTP)1936、网际协议上的传输控制协议(TCP/IP)1938、生成树网桥1940、开放式系统互连(OSI)的第2层1942、请求注解RFC1944、通过ATM的点到点协议(PPPoA)1946、通过以太网的点到点协议(PPPoE)1948、ATM适配层(AAL)-2的公共部分汇聚子层(CPCS)1950、ATM适配层(AAL)-5 1952、信令1954、业务量管理1956、宽带统一框架(BUN)设备驱动器框架1958、ATM驱动器1960和/或其它功能。
数据封装功能可以借助不同方法提供,其中包括1944所示的RFC 1483;PPPoA 1946以及PPPoE 1948。而对封装以及其下的逻辑连接则可以进行一般的处理。举例来说,封装可以附着于生成树网桥1940或IP路由器1934。最终结果可以包括易于在具有常规分组接口的端口与具有封装的端口之间进行路由选择或桥接的能力,也可以包括易于在具有封装的端口之间易于进行路由或桥接的能力。如1944所示的RFC 1483提供了一种经由ATM网络而与末端站相连的简单方法。PPPoA 1946可以使用IP分组的形式来传送用户数据。在一个实例中,可以使用PPPoE 1948的封装并经由以太网和使用RFC1483封装的DSL链路来把PPP业务量从个人计算机(PC)或其它设备最终传送到DSL设备。PPPoE中继代理可以充当一网桥,以便确定本地发起的PPPoE业务量所归属的会话。
AAL-2(例如1950)可用于传送语音业务量。AAL可以包括至少两层。较低的层可以包括一个用于处理尾部添加、填充、CRC检查及其他功能的CPCS。较高的层包括一个用于处理特定服务的任务的SSCS,举例来说,所述任务可以是数据传输保证。AAL-5(例如1952)可以为具有优化吞吐量意图的数据提供有效可靠的传送,并且还可以执行其他功能。
AAL-5 1952是一个用于定义如何将数据分割成信元的ATM适配层,它还执行信元重组。并且可以定义不同的AAL,以便支持各种业务量需求。
信令1954可以提供一种在两点之间动态建立虚电路的装置。生成树网桥1940可以在两个物理上拆散并具有生成树选项的网络之间提供一个透明网桥。所述生成树算法可以对冗余度进行处理并且可以提高牢固性。
BUN设备驱动器框架1958向基于大量分组和信元的硬件设备提供了一个常规接口。在这里可以将BUN称为设备驱动器框架,因为它从依赖于硬件的原语中分离出了依赖于硬件的功能,由此简化了设备驱动器的开发、维护和调试。
ATM驱动器1960在应用软件任务与物理ATM端口之间传递数据,例如,ATM驱动器1960可以执行ATM信元的分割和重组、AAL封装,并且可以对并行数据流进行复用。
虽然以上描述包含了许多细节和特性,但是应该理解,这些细节和特性仅仅是出于说明目的而被包含的,不应将其视为是对本发明的限制。在不脱离本发明实质和范围的情况下,可以对上述实施例进行多种修改。
本发明并不局限于这里描述的特定实施例的范围。实际上,除了这里描述的修改之外,对本领域普通技术人员来说,根据以上描述和附图,本发明的不同修改将是显而易见的。因此,在这里意味着这些修改都落入了以下的附加权利要求范围以内。此外,尽管在这里已经在特定环境的特定实施上下文中用于特定目的的本发明进行了描述,但是本领域技术人员将会了解,本发明的用途并不仅限于此,并且可以在多种环境中有利地实施本发明,以便将其用于多种目的。因此,有鉴于这里公开的本发明的全部精神和实质,应该对以下阐述的权利要求进行分析。
权利要求
1.一种用于执行频谱估计以便生成舒适噪声的方法,所述方法包括以下步骤
接收一个输入噪声信号;
使用一种算法而在一个时段近似输入噪声信号的频谱;
检测是否不存在话音信号;以及
在检测到不存在话音信号的的时候,基于近似步骤来产生舒适噪声;
其中输入噪声信号的频谱实质上在这个时段是恒定的。
2.权利要求1的方法,其中近似步骤还包括以下步骤
使用一个反向预测器而使输入噪声适合于所预测的信号的频谱。
3.权利要求1的方法,还包括以下步骤
执行一个内部检查,以便确定输入噪声信号处于大约为固有噪声电平的6dB范围以内。
4.权利要求3的方法,其中避免接近噪声尖峰以及话音分段中的至少一个。
5.权利要求1的方法,其中所述算法是一种最小均方算法。
6.权利要求1的方法,其中所述算法是一种带有遗忘因子的最小均方算法。
7.权利要求1的方法,其中所述算法是一种归一化的最小均方算法。
8.权利要求1的方法,其中所述算法是一种线性预测编码算法。
9.权利要求1的方法,还包括以下步骤
执行最小均方误差和至少一个最小均方系数的可变精度计算,以使所述算法实质上独立于噪声电平变化。
10.权利要求1的方法,其中所产生的舒适噪声实质上是均匀分布的。
11.权利要求1的方法,还包括以下步骤
归一化所述算法,以使近似步骤实质上独立于信号幅度变化。
12.权利要求1的方法,还包括以下步骤
从近似步骤中分离出编码成至少一个反射系数的滤波器系数,以便传送至少一个静音插入描述符。
13.权利要求12的方法,其中系统之间的互通性得到了增强。
14.权利要求13的方法,其中MIPS和存储器得到了有效使用。
15.权利要求1的方法,其中近似步骤还包括如下步骤
由一个合成滤波器来过滤输入噪声信号。
16.权利要求1的方法,其中如下定义所述合成滤波器
其中M代表多个分支;w代表一个预测器系数;H是变量z的函数。
17.权利要求15的方法,其中所述合成滤波器是一个10阶合成滤波器。
18.权利要求1的方法,其中近似估计步骤还包括如下步骤
检测话音数据之间的噪声;
自适应所述噪声;以及
在话音休止的时候,基于所述自适应步骤来创建静音插入描述符。
19.权利要求18的方法,其中
如下所示,静音插入描述符是通过将至少一个直接形式系数转换成至少一个反射系数而产生的
Bn(z)=z-mAm(z-1)
20.权利要求18的方法,其中
如下所示,通过将至少一个反射系数转换成直接形式系数而对静音插入描述符进行解码
A0(z)=B0(z)=1
Am(z)=Am-1(z)+z-1Bm-1(z)km m=1,2,…M-1
Bm(z)=z-mAm(z-1) m=1,2,…,M-1
21.权利要求1的方法,其中近似步骤还包括以下步骤
检测话音数据之间的噪声;
自适应所述噪声;以及
在话音休止的时候,基于输入噪声信号的平均频谱来产生增强的噪声。
22.一种用于执行频谱估计以便产生舒适噪声的系统,所述系统包括
一个接收机,用于接收输入噪声信号;
一个编码器,用于在某个时段上使用算法来对输入噪声信号频谱进行近似;以及
一个检测器,用于检测是否不存在话音信号;
一个舒适噪声生成器,在检测到不存在话音信号的时候,基于频谱近似来产生舒适噪声;
其中在这个时段上,所述输入噪声信号实质是恒定的。
23.权利要求22的系统,其中编码器还使用一个反向预测器而使输入噪声信号适合于预测信号频谱。
24.权利要求22的系统,其中执行了一个内部检查,以便确定输入噪声信号处于大约为固有噪声电平的6dB范围以内。
25.权利要求24的系统,其中避免接近于噪声尖峰和话音分段中的至少一个。
26.权利要求22的系统,其中所述算法是一种最小均方算法。
27.权利要求22的系统,其中所述算法是一种带有遗忘因子的最小均方算法。
28.权利要求22的系统,其中所述算法是一种归一化的最小均方算法。
29.权利要求22的系统,其中所述算法是一种线性预测编码算法。
30.权利要求22的系统,其中执行了最小均方误差和至少一个最小均方系数的可变精度计算,以使所述算法实质上独立于噪声电平变化。
31.权利要求22的系统,其中所产生的舒适噪声实质上是均匀分布的。
32.权利要求22的方法,归一化所述算法,以使频谱的近似步骤实质上独立于信号幅度变化。
33.权利要求22的系统,其中从频谱的近似步骤中分离出编码成至少一个反射系数的滤波器系数,以便传送至少一个静音插入描述符。
34.权利要求33的系统,其中系统之间的互通性得到了增强。
35.权利要求34的系统,其中MIPS和存储器得到了有效使用。
36.权利要求22的系统,还包括一个合成滤波器,用于过滤输入噪声信号。
37.权利要求22的系统,其中如下定义所述合成滤波器
其中M代表多个分支;w代表一个预测器系数;H是变量z的函数。
38.权利要求36的系统,其中所述合成滤波器是一个10阶合成滤波器。
39.权利要求22的系统,其中所述编码器还包括
一个检测器,用于检测话音数据之间的噪声;
一个适配器,用于自适应所述噪声;以及
静音插入描述符生成器,用于在话音休止的时候基于自适应步骤来创建静音插入描述符。
40.权利要求39的系统,其中如下所示,静音插入描述符是通过将至少一个直接形式系数转换成至少一个反射系数而产生的
Bn(z)=z-mAm(z-1)
41.权利要求39的系统,其中如下所示,通过将至少一个反射系数转换成直接形式系数而对静音插入描述符进行解码
A0(z)=B0(z)=1
Am(z)=Am-1(z)+z-1Bm-1(z)km m=1,2,…M-1
Bm(z)=z-mAm(z-1) m=1,2,…,M-1
42.权利要求22的系统,其中所述编码器还包括
一个检测器,用于检测话音数据之间的噪声;
一个适配器,用于自适应所述噪声;以及
一个噪声生成器,用于在话音休止的时候基于输入噪声信号的平均频谱来产生增强的噪声。
全文摘要
本发明涉及一种用于执行低复杂性的频谱估计技术以便产生舒适噪声的方法和系统。本发明的另一个方面包括从自适应处理中分离出滤波器参数编码,以便以静音插入描述符的形式来进行传送。一种用于执行频谱估计,以便产生舒适噪声的方法包括以下步骤接收一个输入噪声信号;使用一种算法而在一个时段近似输入噪声信号的频谱;检测是否不存在话音信号;以及在检测到不存在语音信号的时候,基于近似步骤来产生舒适噪声;其中输入噪声信号的频谱实质上在这个时段是恒定的。
文档编号H03K5/159GK1539138SQ0281532
公开日2004年10月20日 申请日期2002年6月12日 优先权日2001年6月12日
发明者瓦苏德夫·S·纳雅克, 瓦苏德夫 S 纳雅克 申请人:格鲁斯番维拉塔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1