背景技术
在传统的会议系统或任何免提系统中,一个或多个麦克风捕获位置A的声波,并且把所述声波变换为第一音频信号。第一音频信号被发送到位置B,在位置B处,电视机或放大器和扬声器通过把在位置A产生的第一音频信号转换为声波来再现原始的声波。
图1图示了在免提通信系统中典型的回声问题。来自远端(位置A)的数字音频信号1101由数模转换器(DAC)1301转换到模拟域,在扬声器放大器1302中被放大并且进一步被扬声器1303转换为声信号。直接信号1304和由墙/天花板等1305反射的反射信号1306都不希望被麦克风1308拾取。麦克风还拾取所想要的(例如谈话人员的)近端信号1307。麦克风信号在麦克风放大器1309中被放大,并且在模数转换器1310中被数字化,模数转换器1310输出未消回声的麦克风信号1202。如果未消回声的麦克风信号被发送到远端,那么在远端站点的参与者可能会听到他们自己的回声,并且如果在远端存在类似的系统,那么甚至可能出现吼鸣/反馈。
为了解决这种问题,已经建议向数字麦克风信号路径增加听觉回声消除器1203。这种消除器使用数字扬声器信号1101作为信号基准1201,并且对所有扬声器至麦克风路径1304/1306进行估计,并且从未消回声的麦克风信号1202中减去这些估计,产生已消回声的麦克风信号1204,其作为信号1102而被发送到远端。
目前广泛使用两种主要方法来用于听觉回声消除器(canceller):全带消除器和子带消除器。这两种消除器通常使用自适应FIR(有限脉冲响应)滤波器来用于回声路径估计,然而分别在全带域和子带域中应用。
在产品中所使用的听觉回声消除器一般包括未在此文档的图中示出的几个另外的子块:双向通话算法字块、非线性处理单元字块、缓和(comfort)的噪声产生字块等。为简单明了起见,省略了这些子块,这是因为认为详细公开这些块对实现本发明的原理来说并不是必要的。这些块可以发生变化,并且在论文、专利和文献中也有详细地记录。对于本领域的技术人员来说,集成这些块是简单明了的。
图2示出了基本的全带听觉回声消除器。
来自远端2101的数字信号被作为信号2102传递到扬声器,并且还被用为扬声器基准信号2103。
通过自适应FIR滤波器2104过滤扬声器基准信号2103。此自适应滤波器将房间的脉冲响应会聚到一起,并且对其进行跟踪。自适应FIR滤波器2104必须适应于初始会聚和房间中的任何声音变化(门的打开,人的移动等)。为此,可以使用许多不同的自适应算法,从廉价的(低处理能力的)LMS(最小均方),到诸如APA(仿射投影算法)和RLS(递归最小二乘方)等更高级且要求更多资源的算法。然而,所有这些算法共同使用FIR滤波器更新回路2108来进行自适应。
自适应FIR滤波器输出反转的回声估计2105,所述回声估计2105被添加到未消回声的麦克风信号2106,从而计算已消回声的麦克风信号2107。
其它方法使用子带处理。图3图示了此方法。
来自远端3101的数字信号被作为信号3102传递到扬声器。还使用分析滤波器3301将其划分为所选择数目的子带。使用另一(但是是同样的)分析滤波器3302来把未消回声的麦克风信号3106划分为子带。
对于每个子带来说,扬声器分析滤波器输出子带基准信号3203,其通过子带FIR滤波器3204而被过滤,从而计算反转的子带回声估计3205。麦克风分析滤波器输出子带未消回声的信号3206,其被添加到反转的回声估计,从而输出子带已消回声的麦克风信号3207。已消回声的麦克风信号用于FIR滤波器的自适应,其被示为子带FIR滤波器更新回路3208。
通过合成滤波器3303,来自所有子带的已消回声的麦克风信号还被一起会聚到全带已消回声的麦克风信号3107。
全带和子带回声消除器对从输出数字采样(2102/3102)到输入数字采样(2106/3106)的响应进行估计。此响应受到信号所通过的任何软件或硬件的影响,所述软件和硬件包括但不局限于采样率转换器、混频器、D/A转换器、扬声器、声耦合器、麦克风和A/D转换器。在设计中,输入信号2106/3106中的采样率固有地等于在输出信号2102/3102中的采样率。对于最佳性能来说,可控制的部分的响应(包括延迟)应当保持恒定。
在良好设计的系统中,通过对D/A和A/D转换器使用相同的时钟源来确保同样的采样率,而通过适当的硬件和软件设计来维持恒定的(或至少可预测的)延迟。
然而,在一些设计中,对A/D和D/A转换器使用不同的时钟源。例如发生在下面的情形中,在个人计算机(PC)中,A/D转换器和D/A转换器可能位于不同的卡上,分别在每个卡上本地地产生转换时钟。典型而广泛使用的情形是,当由网络照相机对音频进行捕获(A/D转换)的同时,由PC内置的声卡对音频进行播放(D/A转换)。
在A/D转换器和D/A转换器之间的任何速率差异可能导致几个问题:
1.频移:在从2102/3102信号到2106/3106信号的信号之间可能存在频移。线性回声消除器并未被设计用于这种漂移,并且从而使得最大可获得的瞬间性能受到损害。
2.时间漂移:在扬声器信号2102/3102和麦克风信号2106/3106中的相同采样之间的时间可能缓慢地改变,这要求回声消除器不断地重新自适应。回声消除器值只可以在扬声器信号2102/3102具有足够高的功率时才重新自适应。因此,尽管时间延迟慢慢地改变,不过在沉默期(低2102/3102功率)之后的作为响应的有效时间漂移可能足够大而产生相当大的残余回声。
3.采样过量/不足:由于为A/D转换器产生的采样与D/A转换器的消耗不相等,所以在系统中的一个或多个地方可能采样过剩或不足。
在A/D转换速率和D/A转换速率之间可能存在两种类型的漂移。这两种类型可以同时存在。
由于时钟源(晶体,振荡器等)与其标称值的偏差,会发生漂移。晶体具有改变的性能级。对于晶体而言,可以指定的一些参数是频率、稳定度、准确度(百万分之几或ppm),以及在以上参数中由于温度变化所导致的变化极限。通常,没有两个晶体是完全相同的。它们将以略微不同的频率振动,并且它们的其它特性也同样不同。这意味着如果A/D和D/A转换器由根据不同晶体导出的时钟信号驱动,那么即使当所述晶体以相同的标称频率运行,并且用于A/D和D/A的除法器相匹配时,在这些转换器运行的速率上仍然存在轻微的差异。在这种情况下,A/D随时间推移产生的采样数与由D/A在相同时段内消耗的采样数并不匹配。在其中,由A/D所产生的采样数与D/A消耗的采样数相比较的时段越长,则由A/D和D/A所处理的采样数中的差异越大。
由于不相容的采样率也可能出现漂移。当捕获/播放设备不支持音频流的采样率时,借助操作系统插入软件采样率转换器。然而,此采样率转换器可能只有有限的分辨率,从而标称采样频率将改变。该差异随时间推移是恒定的,但是可能相当大。常常遇到的典型值是0.625%,即百万分之6250。
图4图示了在PC中的播放和捕获系统(分别是4100和4200)的典型设置。应当注意,精确的设置随着所选择的API和音频播放/捕获设备驱动器而发生改变。常常,为了使系统工作,使用双重缓冲或类似方法。这在图中并未示出。如从软件应用的角度来看,附图只是用来解释播放和捕获系统的主要属性。
在播放系统4100中,DAC(数模转换器)4101由DACCLK 4102来计时,即DAC 4101按照由DACCLK 4102给出的速率来消耗采样。DACCLK 4102通常由高出很多的晶振频率来导出。DAC 4101一次消耗一个来自DAC FIFO 4103的采样。DAC FIFO可以用硬件或软件来实现。当DAC FIFO 4103为空时,它消耗来自播放SRC(采样率转换器)4104的Nplayout个采样,播放SRC 4104又从播放环形缓冲器4112中消耗了必要数目的采样,所述播放环形缓冲器4112是播放FIFO 4110的一部分。Nplayout可以低至一,但是多个(采样组)也是常见的(已经观察到Nplayout=128)。利用与从播放FIFO消耗的采样相同数目的采样来更新播放读取指针4113。软件应用的任务是用来根据播放写入指针4111确保在播放FIFO中填入了正确数目的采样。
类似地,在捕获系统4200中,ADC 4201由ADCCLK 4202计时,即以ADCCLK 4202的速率来生成采样。ADCCLK 4202通常由更高的晶振频率来导出,但是如先前所描述,其不必与ADCCLK相同。ADC一次向ADC FIFO 4203递送一个采样。ADC FIFO可以用硬件或软件来实现。当ADC FIFO被充满,它向捕获SRC(采样率转换器)4204递送Ncapture个采样,捕获SRC4204又向捕获环形缓冲器4212递送所计算数目的采样,所述捕获环形缓冲器4212是捕获FIFO 4210的一部分。Ncapture可以低至一,但是更高的数目也是常见的。利用与被递送到捕获FIFO的采样相同数目的采样来更新捕获读取指针4213。软件应用的任务是用于读取捕获读取指针4211,以确保从捕获FIFO中消耗了正确数目的采样。
软件应用4400分别向/从播放和捕获FIFO发送和接收采样。
对于向文件或其它非计时的(unclocked)源读取/写入音频数据的应用来说,向/从播放/捕获FIFO生产/消耗正确数目的采样通常是简单的。即便对于从/向另一计时的源/汇点(sink)获取/递送音频数据的单工应用来说,通过插入或移除一个或多个采样来对向/从播放/捕获FIFO递送/消耗的采样数进行校正通常也是相当简明的。可以在听觉未劣化的情况下执行这种插入或移除,并且这种技术是公知的。因为这种技术要插入或移除采样,所以会存在时间延迟的变化,但是对于大部分应用而言这是可接受的。
然而,对于其中在由软件应用程序递送的采样和消耗的采样之间的精确关系是关键的应用来说,必须寻找另一解决方案。以上是对于回声消除的情况而言的。但是应当指出的是,还存在具有此要求的其它应用,例如测量应用等。
具体实施方式
在下文中,将通过描述优选实施例并且参照附图来讨论本发明。然而,本领域技术人员会认识到独立权利要求所定义的本发明范围内的其它应用和改型。
本发明某些方面的基本思想是提供一种用于诸如PC之类的计算单元的时钟漂移补偿器,从而对模拟-数字(A/D)和数字-模拟(D/A)转换器中的采样频率的差异进行补偿,例如,在被连接到计算单元或在计算单元中所包括的音频I/O设备中的采样频率中的差异。
如上所述,图4图示了在PC中的播放系统4100和捕获系统4200的典型设置。在图5中,依照本发明的某些原理,利用时钟漂移补偿器5300来扩展图4中的设置。时钟漂移补偿器5300被配置来补偿播放和捕获信号中不同的采样频率。时钟漂移补偿器5300包括公共高频率(HF)时钟5301、播放时间设备或播放时间估计器5311、播放时间校正器5312、捕获时间设备或捕获时间估计器5321、和捕获时间校正器5322。漂移补偿器5300被配置用来把数据写入到播放缓冲器5110中,所述播放缓冲器5110可以是队列缓冲器,尤其是诸如循环缓冲器或环形缓冲器之类的FIFO缓冲器,并且从捕获缓冲器5210中读取数据,所述捕获缓冲器5210也可以是队列缓冲器,尤其是诸如循环缓冲器或环形缓冲器之类的FIFO缓冲器。此外,漂移补偿器5300被配置为向软件应用5400发送数据和从软件应用5400接收数据。尽管为简单起见,对元件5400使用术语“软件应用”,不过应当理解,此元件实际上可以包括硬件和软件。元件5400在本说明书也被认为是计算单元,例如可以是音频回声消除单元。时钟漂移补偿单元5300向软件应用5400提供来自公共HF时钟5301的高频率时钟信号,使得软件应用与公共HF时钟5301同步。
在本文中,相对于由捕获单元捕获的模拟信号和由播放单元输出的模拟信号的特性而言,应将公共时钟的频率理解为是高的。例如可以使用在大约1MHz到1GHz范围内的时钟频率。
时钟漂移补偿器5300从播放FIFO 5110读取指针和公共HF时钟5301请求位置信息,以及从捕获FIFO 5210写入指针和公共HF时钟5301请求位置信息。时钟漂移补偿器5300使用位置和时钟信息来计算在公共HF时钟5301和播放采样数或播放读取指针之间的第一关系,以及同样计算在公共HF时钟5301和捕获采样数或捕获写入指针之间的第二关系。根据这些计算的关系,对于公共时钟域中的每个采样,可以在捕获FIFO中找到对应采样,从而以公共时钟采样频率为软件应用5400创建输入信号。同样,对于播放域中的每个采样,在来自软件应用的采样中查找对应采样,从而确保正确数目的采样被发送到播放FIFO。
在下文中,更详细地举例描述了时钟漂移补偿器。如果环形缓冲器被用作缓冲器(队列缓冲器,FIFO缓冲器),那么指针将回返(wrap)。当在下文中提及指针时,指的是未回返的指针。未回返的指针是简明的,并且应当为本领域技术人员所公知。
播放时间设备或播放时间估计器5311读取多个数据集,其中,每个数据集是公共高频率时钟5301和播放读取指针5113的采样/读出。根据该多个数据集,估计在播放读取指针和高频率时钟之间的关系。播放读取指针5111被用于表示DAC转换时钟5102。对于DAC时间域中的每个采样时间,可以计算应用5400的相应时间(由应用基准时钟测量的,公共HF时钟5301)。从而,可以由播放时间校正块5312通过使用最近的应用域采样和子采样延迟滤波器来计算在播放(DAC)域中每个采样的正确采样值。最后,此采样被写入到播放环形缓冲器5112中。应当注意,在相比于应用(公共)时钟5301,DAC转换时钟漂移的情况下,基于时间校正器5312的输出产生的采样数与由所述时间校正器5312消耗的采样数稍微(marginally)不同,即,它将作为采样率转换器来工作。
同样,捕获时间设备或捕获时间估计器5321读取多个数据集,其中每个集是公共高频率时钟5301和捕获写入指针5213的采样/读出。根据多个数据集,对在捕获写入指针和高频率时钟之间的关系进行估计。捕获写入指针被用于表示ADC转换时钟5202。对于应用5400的时间域中的每个采样时间(由应用基准时钟测量的,公共HF时钟5301),可以计算ADC相应的时间。从而可以通过使用最接近的ADC域采样和已知的内插法,由捕获时间校正块来计算应用的正确采样值。应当注意,在相比于ADC时钟5202,应用(公共)时钟5301漂移的情况下,基于捕获时间校正器5321的输出产生的采样数与在捕获时间校正器5321的输入处消耗的采样数稍微不同,即,它将作为采样率转换器工作。
仅对于在ADC和DAC之间的补偿来说,可以依照两种方式简化如图5所示的漂移补偿器5300。
依照本发明一个示例性实施例,应用(application)与DACCLK5102同步。在这种情况下,播放读取指针5113充当公共时钟,并且捕获时间设备和时钟校正器使用此时钟作为公共时钟5301,如图6中所图示。由于播放系统5100和软件应用5400是同步的,所以播放时间设备和时间校正器可以依照简化的甚至平常的方式进行操作,但是它们仍符合本发明的原理。在此特定的实施例中,可以对第一关系进行设置而不是计算,而对第二关系进行计算。
依照本发明的第二示例性实施例,应用与ADCCLK 5202同步。在此实施例中,捕获写入指针5213充当公共时钟,并且播放时间估计器5311和播放时钟校正器5312使用此时钟作为公共时钟5301。由于ADC和应用是同步的,所以捕获时间设备和时间校正器可以依照简化的甚至平常的方式来进行操作,但是它们仍符合本发明的原理。在此特定的实施例中,可以对第二关系进行设置而不是计算,而对第一关系进行计算。
然而多数情况下,同步到一个信任的时钟源是有益的。第一,公共时钟应当具有高分辨力(如后面所解释,播放或捕获指针不必是高分辨力的)。第二,软件应用5400应当使用尽可能与现实世界时钟同步的时钟。当通信系统与另一系统通信时,或当测量系统指的是现实世界时间的量度时,后一点是重要的。
因此依照本发明一个实施例,稳定且信任的时钟源(不是DACCLK或ADCCLK)被选择为公共HF时钟5301。此公共时钟还充当软件应用5400的基准时钟。例如,公共HF时钟5301可以是PC的系统时钟。在此实施例中,第一和第二关系两者都要进行计算。
图7和8依照本发明一个实施例示出了时钟漂移补偿器的操作概述的流程图表示(在下面论述中将参考图5)。图7和8中的每个块表示在下面论述中进一步定义的过程。
操作在步骤600处开始,其中软件应用5400开始和启动分别向播放/捕获系统5100/5200发送5402数据和从播放/捕获系统5100/5200请求5401数据。依照一个本发明示例性实施例,5400是音频回声消除器(AEC),用来经由通信网络从远端(未示出)接收数字音频信号并且经由播放系统5100在扬声器上播放。来自近端的声音被捕获系统5200捕获和数字化。如在背景技术部分中所描述的,AEC计算无回声音频信号,并且经由通信网络把它发送回到远端(未示出)。
存在使上述补偿方案复杂化的一些因素。
当播放/捕获时间估计器5311/5321读取数据集(步骤601)时,无法同时完全获取公共HF时钟5301和播放/捕获FIFO指针5113/5213。它们中的一个必须始终被首先读取,并且另一个随后被读取。当然,当对数据集中的第一时钟进行读取时,第二时钟继续运行。只要在读取之间的时间是恒定的,这就不会产生任何问题。然而,计算机硬件和应用常常要求各种中断等,其随后可能会在读取之间产生可变的时间。在一些情况下,通过禁用中断,时间估计器5311/5321可以确保在每个集中的两次读取之间的时间差异是可忽略的,或者至少足够小使得可以通过过滤来去除时间不确定性(情况1a)。然而,一些应用没有禁用中断的权力,导致在读取之间存在显著的时间差异。
由于一些应用没有禁用中断的权力,依照本发明的某些方面的方法和设备依照确定的准则检查每个数据集,并且去除不符合所述准则的数据集。如在步骤602中所图示,对于每个数据集来说,检查读出的HF时钟5301是否是可接受的。这可以通过如下步骤来进行,首先读取公共HF时钟5301,然后读取FIFO指针5113/5213,接着读取另一个读取公共HF时钟5301。现在,每个数据集包含三个数据点(三元组)而不是两个。通过分析多个数据集,可以计算在两个公共HF时钟5301读出之间的时间分布。如果在数据集(三元组)中的两次公共HF时钟5301读出之间的时间是异常的(依照分布而言过长),那么假定已经出现了一些不平常的情况(例如中断),这使数据集是不确定的。这种不确定的数据集必须被取消资格(步骤605),只留下具有低不确定性的数据集来用于进一步计算(步骤603)。
如上所述,另一问题是可能在相当大的步骤范围内更新FIFO指针。换句话说,FIFO缓冲器5110/5210可能并不总是一次写入/读取一个采样,而是定期地读取/写入大量数据,例如一次128个采样或一次16个采样。因此,连续地读出播放/捕获指针5113/5213可能给出相同的结果,或者两次连续的读取也可能相差很大的值。这借助图9中的例子来图示。在此例子中,读取的数据集可能是:(0;0)、(1;0)、(2;0)、(3;0)、(4;0)、(5;2)、(6;2)、(7;2)、(8;2)、(9;4)、(10;4)等。这用作实际转换时钟的量化,并且如果没有正确处理则可能会产生问题。可以直接看出,此量化引入了量化噪声,但是与“常规”量化噪声不同,这种噪声不能被假定为白/随机过程;它是非常规则的并且与时钟相关。所述噪声作为三角形信号类型而出现,这可能会带来混叠(alias)问题,并且当在采样时也会有类似问题(由于CPU复杂性,所以数据集不应当被频繁读取)。
依照本发明的某些方面,此问题可以通过当指针更新时读取FIFO指针5113/5213来解决。由于更新之间的间隔期间CPU可以是空闲的,这节省了宝贵的CPU资源。典型情况下,软件应用5400必须刚好在预计的指针更新之前确保/请求运行时间(例如使用时间中断)。可以通过在初始阶段中分析FIFO的更新过程来查找预计的更新时间。例如,如果FIFO一般以128个采样的块来更新,并且转换时钟5102/5202具有48kHz的频率,那么漂移补偿器5300可以在更新之后在其恢复读取新的数据集之前,停止读取FIFO指针(5113和/或5213)达大约N*128/48000秒(其中N是任何正整数,其根据在CPU复杂性和准确度之间的折中来选择)。刚好在预计的更新之前,漂移补偿器5300读取三元组,直到指针在两次连续的公共HF时钟读取之间更新。在实践中,这通过如下的步骤来实现,即,读取公共HF时钟5301,然后读取FIFO指针5113/5213、HF时钟、FIFO指针等,直到指针已经被更新,例如,C-1、P-1、C-2、P-2、C-3、P-3、C-4等,其中,C-标示时钟的读取并且P标示指针的读取。如果FIFO指针5113/5213从P-1更新到P-2,那么正被登记的公共HF时钟5301是C-2,或者是C-1、C-2和C-3的某个平均值(或加权)。正被登记的指针一般是P-1和P-2的平均值(但是其它变量也是适用的)。为了符合先前的准则,在C-1和C-3之间的时间必须不能高得异常,否则可能会丢弃数据集(步骤605)。从CPU负载的观点来看,最好在读取指针时测试指针的转变。然而,为了减少时间的不确定性,即,(在这种情况下)确保从C-1到C-3的时间尽可能低,以给定的时间来记录序列(直到预计的指针转变+余量),并且然后确定该转变可能是有益的。
为了确保进一步的计算不会受到不正确或不确定的数据集的影响,需要解决又一问题。由于个人计算机的缺陷,会遇到奇怪的和非预期的FIFO指针行为;非预期的更新步骤,指针回退等。这种行为可能由试图补偿漂移、排队问题(无序执行请求)等的声卡驱动程序引起。因此如步骤604中所图示,对于在步骤602未丢弃的每个数据集来说,执行另一检查。如上所述,随时间推移来分析数据,并且还随着正常指针增加来保持统计数值。如果按照异常值来更新指针,则将该数据集丢弃(步骤605)。例如,如果在一段时间内利用128个采样来接连更新指针,与128个采样显著偏离的更新则被认为是不确定的数据集,由此被丢弃。然而,由于采样率转换器5104/5204,一个采样的偏差(即以127或129个采样进行的更新)必须被认为是有效的更新。
随时间推移,多对C和P数据在步骤602和步骤604中被批准,然后被登记(步骤606)。此数据必须利用对所有不合格对取消资格的算法来处理,这意味着不必须是均匀采样。此外,从对的噪声集合(来自情况1a的噪声)中,必须以适当的准确度来估计在(由C标示的)公共HF时钟5301和(由P标示的)指针5113/5213之间的关系。因此依照本发明一个实施例,根据统计模型计算在公共时钟和捕获指针之间,以及在公共时钟和播放指针之间的关系。在下文中,引入一些适当的线性回归方法。然而,在本发明的范围内可以使用其它统计模型。
可以借助下式计算一个采样的实际时钟(由公共HF时钟5301测量):
Cfiltered=α*Psample+β [1]
因子α是在公共HF时钟5301和指针5113/5213之间的比率关系,并且具有标称HF时钟频率值除以指针更新速率加上/减去用于定义时钟漂移常数的较小值的值。因子β只是个偏移,从而剔除其中C和P并未同时以零开始的正常情况。
因此,在步骤607,计算因子α和β。依照本发明一个示例性实施例,最小均方算法被用为过滤算法:
SP=∑Pi [2]
SC=∑Ci [3]
SPP=∑Pi 2 [4]
SPC=∑Pi*Ci [5]
M=计算中的数据集的数目,
i表示要计算总和的数据集中的集合
α=(M*SPC-SP*SC)/(M*SPP-SP 2) [6]
β=(SC*SPP-SP*SC)/(M*SPP-SP 2) [7]
Cfiltered的准确性随着数据对数量(M)的增大而得到改善。然而随时间推移,漂移偏移可能会改变,使在Psample和Cfiltered之间的线性关系无效(α改变)。因此,在计算中的第一数据集和最后数据集之间的时间的选择必须在准确度(要求长时间)和跟踪变化的漂移因子的能力(要求线性关系是良好近似的,因此时间受到限制)之间做折中。可以使用更高阶的模型,从而简化这种折中,但是在实践中,漂移因子足够缓慢地改变,从而使用线性/一阶模型来进行适当的折中。
需要对变化的漂移因子进行跟踪意味着当得到新的数据集时必须从计算中省去最老的时钟/指针数据集,即,上述求和要按滑动窗口来计算。不必直接为每个新的数据对计算总和。为了节省CPU周期,对新的和最老的数据集进行更新就是足够的:
SP,m=SP,m-1+Pm-Pm-M [8]
SC,m=SC,m-1+Cm-Cm-M [9]
SPP,m=SPP,m-1+Pm 2-Pm-M 2 [10]
SPC,m=SPC,m-1+Pm*Cm-Pm-M*Cm-M [11]
M=计算中的数据集的数目,
m表示最近对的下标
α=(M*SPC,m-SP,m*SC,m)/(M*SPP,m-SP,m 2)[12]
β=(SC,m*SPP,m-SP,m*SC,m)/(M*SPP,m-SP,m 2)[13]
尽管上面的方程式在理论上是正确的,不过由于有限的精度/舍入所累积的误差可能会导致问题。因此依照本发明的另一示例性实施例,把损耗因子(δ)添加到计算中:
SP,m=δ*SP,m-1+Pm-δM*Pm-M [14]
SC,m=δ*SC,m-1+Cm-δM*Cm-M [15]
SPP,m=δ*SPP,m-1+Pm 2-δM*Pm-M 2 [16]
SPC,m=δ*SPC,m-1+Pm*Cm-δM*Pm-M*Cm-M [17]
SM=∑δi,i=0..(M-1) [18]
α=(SM*SPC,m-SP,m*SC,m)/(SM*SPP,m-SP,m 2) [19]
β=(SC,m*SPP,m-SP,m*SC,m)/(SM*SPP,m-SP,m 2) [20]
SM是恒定的从而只需要被计算一次。
损耗因子δ一般被选择为略小于单位一。此因子会减小较老数据的影响(这不是有意的/必要的,但是也不会产生任何问题),并且还会引入舍入误差的遗忘因子。
增加损耗因子δ可以实现进一步的简化。通过把M选择为无穷大,δM接近于0,因此可以省略在滑动求和[14]-[17]中的减法,并且出于求和的目的,不必把任何数据存储在延迟线中。缺点是需要在适当的过滤和用于跟踪变化的漂移因子的能力之间做更加困难的折中。所有数据对都将“永存”,但是由于较老的数据对(通过适当地选择损耗因子δ)在计算上可能具有可忽略的权重,所以在多数情况下是可以跟踪漂移因子的。
在步骤701,可以根据估计的α、β和方程式[1],Cfiltered=α*Psample+β,来计算任何采样/指针的正确时间Cfiltered(相对于公共时钟5301)。
播放时间校正器5312和捕获时间校正器5321的任务是在已知在不同域之间的时间偏移/斜率的情况下,根据在另一时间域中的已知的采样来计算一个时间域中的正确采样值。在下文中,我们依照本发明一个实施例描述了如何可以把捕获域采样转换为公共域(commondomain)采样。然而,从公共域到播放域的转换是类似的。
根据所计算的时钟关系(步骤701),对于公共域中的每个采样而言,捕获采样时间校正器5321在捕获域中查找对应采样。术语“对应采样”将被解释为,对公共域中的每个采样时间在捕获域中为该时间找到的采样值,要么通过直接复制采样值(如果在该时间存在采样),要么通过使用一些内插技术在计算在该时间的采样值。因此对于公共域中的每个采样而言,捕获采样时间校正器5321查找捕获域中的采样(下标j),该采样在时间上最接近于在所述公共域中的采样(步骤702)。如果在域之间的偏移(时间偏差)是整数,那么采样j可以被复制并且被直接使用(步骤706)。然而,偏移(时间偏差)通常不是整数。因此,计算小数值τ,在下文中,被称为剩余因子τ(步骤703)。剩余因子τ是在减去整数偏移/偏差值之后的剩余,并且其定义了子采样延迟,并且应当近似在-0.5和0.5之间。应当注意,由于采样频率的漂移,所以可能出现稍微在[-0.5,0.5]范围之外的值。
可以使用具有恒定时间延迟的全通滤波器,从而利用子采样延迟来执行信号的延迟。具有偏移的正弦脉冲具有这些属性。然而,根据定义,正弦脉冲在长度上是无穷大的,并且在实际的实现方式中,必须应用窗口。必须对窗口的特性和长度进行选择,使得确保频率响应(幅度和延迟)在所有感兴趣的频率中具有足够的准确度。例如,如果回声消除器以16kHz的采样率工作,则通常存在高达7kHz的音频信号。在这种情况下,频率响应的幅度和延迟直到7kHz必须是平的,而幅度和相位在7kHz以上可以偏离理想的响应,这是因为在此频带上不存在任何信号。为此所发现的具有良好特性的一个窗口类型是布兰克曼窗口(Blackman window)。
从而,计算长度L+1的子采样时间延迟滤波器(hτ):
hτ=sinc((-L/2..L/2)-τ)*window(length L+1) [21]
当选择L=48、布兰克曼窗口、16kHz的采样频率和高达7kHz的感兴趣频率时,此滤波器的时间延迟误差小于0.005采样,并且幅度误差小于0.005dB;这种小误差不会导致回声消除器性能的显著劣化。
最后在步骤705,公共时钟域中的采样y(换句话说在j±τ的采样值)被计算为时间延迟滤波器(hτ)和来自捕获域的一系列采样的卷积:
y=hτx[j-L/2..j+L/2] [22]
这里x是来自捕获时间域的采样的时间序列。在计算中所使用的采样向量以由j定义的在时间上最接近的采样为中心,而其余子采样延迟由全通滤波器hτ来定义。
在漂移的情况下,剩余因子τ对每个采样来说都会改变,由此对每个采样来说,新的滤波器hτ是必要的。为每个采样计算新的滤波器,计算量可能是太大。尽管适当地选择数据集和适当的过滤是安全的,不过在时间延迟上始终存在一些残留噪声。因此,在没有显著降级的情况下,可以定义(例如均匀分布的)离散的延迟集和相应的预先计算的滤波器集。在处理期间,选择与实际延迟相比较具有最小误差的预先计算的滤波器。这种效果与τ的量化相同。应当注意,由于子采样延迟可能会超过[-0.5,0.5]的范围,所以还应当存在用于处理这些“超出”延迟的一些预先计算的滤波器。
这种时间校正算法对连续的公共时钟域采样充当从捕获域到公共域的重新采样器。如果在频率中存在任何漂移,则所估计的时间会相应地漂移,由此如预期的一样,从捕获域到公共时钟域,采样率(和采样数)会略微发生变化。应当指出,依照本发明一个实施例使用全通滤波器作为采样率转换算法中的滤波器存在某些理论上的“顾忌”,例如正弦宽度应理想地适合于采样转换率。然而,出于实际目的,这些理论方面是可忽略的,这是由于转换率始终非常接近于单位一。
在播放端上执行如上所述的相同类型的校正。从而,软件应用(例如在计算单元中实现的回声消除器算法)在所有发送和接收的信号上观察到相同的采样频率(时基)。因此,不要求修改例如标准的回声消除算法来使其以异步的ADC和DAC转换速率在系统上工作。
在PC中,在音频捕获或播放中常常存在失灵信号(glitch)。由于完全丢失音频数据帧或丢失单个采样可能会导致大量失灵信号。其原因可能是CPU过载或类似情况。定义用于检测和调整这种失灵信号的方法在本发明的范围之外。然而,使用所描述的方法,在小数采样准确(和最终失灵信号)的情况下可以进行时序计算,从而简化了这种检测和校正。
依照本发明的方法和漂移补偿器具有几个优点。以高准确度有效地检测了时序上的任何漂移或其它差异,使例如回声消除器或其它计算单元之类的软件应用5400正常工作。由于高准确度,可以容易地检测并补偿像失灵信号的其它缺点。
由于不存在复位算法,所以按照所述算法自动地检测和补偿任何情况变化。不存在逐步增大的误差或偏移;通过播放和捕获系统和软件层,从应用5400输出(例如,回声消除器扬声器信号2102/3102)到应用输入(例如,回声消除器麦克风输入2106/3106)的路径始终是不变的。
整个系统被计时/同步到信任和公知的时钟源,并且不依赖于任何ADC或DAC子系统的提供商。
时钟漂移补偿器5300是完全独立的模块,这意味着在不需要调整这些应用的情况下,它可被用于标准的应用。例如,在没有进一步改变的情况下,可以在存在所论述的漂移问题的PC中使用为具有同步ADC和DAC的嵌入式产品所开发的回声消除器。
依照本发明的时钟漂移补偿器5300适用于需要在DAC和ADC之间的已知/固定关系的任何类型的应用。
时钟漂移补偿器可以用于电信会议系统中的听觉回声消除,所述系统诸如电话会议系统或视频会议系统。
特别,时钟漂移补偿器可以被合并到诸如电话会议终端或视频会议终端之类的电信会议终端中,用于在电信会议系统中实现听觉回声消除,其中这种电信会议终端经由通信网络互相通信。
这种电信会议终端可以进一步包括计算单元,诸如用于执行操作系统和软件应用的常规个人计算机;D/A转换器,其被配置为从在时钟漂移补偿器中包括的播放单元所包括的播放FIFO缓冲器中读取数字数据;音频放大器,其被配置为放大由D/A转换器所提供的模拟信号;音频扬声器,其被连接到音频放大器、麦克风、连接到所述麦克风的麦克风放大器的输出;A/D转换器,其被配置成把所述麦克风放大器输出信号转换为数字形式,并且把所述数字信号提供到由在所述时钟漂移补偿器中包括的捕获单元所包括的捕获FIFO缓冲器。计算单元可操作地连接到诸如局域网和/或因特网之类的通信网络,从而经由网络实现电信会议系统。电信会议终端可以另外包括照相机、显示器和用于实现视频会议的进一步的结构和功能部件。