一种上下行语音驱动处理方法、 装置及系统 【技术领域】
本发明涉及通信领域, 尤其涉及一种上下行语音驱动处理方法、 装置及系统。背景技术 终端如手机等非常重要的一个功能在于语音传输。 在语音传输中保证语音质量非 常重要, 而影响语音质量的关键因素之一是回声。
目前, 终端在进行语音传输时, 一般使用声学回声消除 (AEC) 方法进行回声抑制。 AEC 方法的原理是 : 以扬声器信号与由扬声器信号产生的多路径回声的相关性为基础, 建 立远端信号的语音模型, 利用该语音模型对回声进行估计, 并不断修改滤波器的系数, 使得 回声估计值更加逼近真实的回声, 然后, 将回声估计值从话筒的输入信号中去除, 从而达到 消除回声的目的。
图 1 为终端 TD/GSM 模式下的语音处理流程, 如图 1 所示, 终端中包括语音的上行 处理以及语音的下行处理 ; 其中, AEC 处理模块用于使用 AEC 方法对上行语音数据进行回声
抑制。 AEC 处理模块进行回声抑制时, 是在上行语音驱动处理模块开始接收上行语音数据帧 的时刻, 从同一时刻的下行语音数据帧中进行采样得到下行语音参考数据, 计算回声估计 值, 从而将上行语音驱动处理模块接收到的上行语音数据中的回声消除。
而由于进行下行语音数据的采样时, 在下行语音数据帧启动发送的时刻采集最为 准确, 因此, AEC 处理模块进行下行语音参考数据的采样时, 需要确定上行语音数据帧对应 的下行语音数据帧, 之后, 在下行语音数据帧确定发送的时刻进行下行语音参考数据的采 集, 从而, AEC 算法要稳定实现回声抑制的条件为 : 上行语音数据帧开始传输的时间与该数 据帧对应的下行语音数据帧开始传输的时间之间时间差稳定, 而且需要尽可能的小。如图 1a 所示, 即为上下行语音数据帧启动传输的时间之间的时间差稳定时的关系示例图。
然而, 在实际应用中, 现有的上行语音驱动处理模块以及下行语音驱动处理模块 在对上下行语音数据进行接收或发送处理时, 很容易出现上下行语音数据帧传输时间差不 稳定的问题。导致该问题的因素包括但不限于网络延时、 上下行语音线程不同步等。除上 述因素之外, 网络在某个时间段无下行语音数据发送、 网络误码等也将导致上下行语音数 据帧传输时间差的不稳定。
基于以上描述可知, 现有的上下行语音驱动方法无法确保上下行语音数据帧之间 的传输时间差稳定, 进而使得终端在使用 AEC 方法进行上行语音数据的回声抑制时无法达 到稳定的回声抑制效果。 发明内容 有鉴于此, 本发明要解决的技术问题是, 提供一种上下行语音驱动处理方法、 装置 及系统, 确保上下行语音数据帧之间的传输时间差稳定, 进而使得终端能够使用 AEC 算法 稳定抑制上行语音数据中的回声。
为此, 本发明实施例采用如下技术方案 :
本发明实施例提供一种上下行语音驱动处理方法, 包括 :
下行语音驱动处理步骤 : 确定进行下行语音数据发送时, 检测是否存在下行有效 数据包, 如果不存在, 发送空包 ;
上行语音驱动处理步骤 : 接收上行语音数据, 判断上行接收队列中各个数据包是 否均已满, 如果是, 将接收到的上行语音数据添加到接收队列的最后一个数据包中。
其中, 下行语音驱动处理步骤还包括 :
检测存在下行有效数据包时, 发送所述下行有效数据包。
上行语音驱动处理步骤还包括 :
判断上行接收队列存在空数据包时, 依照接收队列中数据包的顺序, 将接收到的 上行语音数据添加到相应的空数据包中。
下行语音驱动处理步骤中, 所述确定之前, 进一步包括 :
接收下行语音数据并缓存, 当接收到的下行语音数据达到 n 帧时, 确定开始进行 所述下行语音数据的发送, 所述 n 为大于 1 的整数。
本发明实施例还提供一种上下行语音驱动处理系统, 包括 : 下行语音驱动处理装 置以及上行语音驱动处理装置, 其中,
下行语音驱动处理装置包括 :
检测单元, 用于确定进行下行语音数据发送时, 检测是否存在下行有效数据包 ;
发送单元, 用于当检测单元检测结果为不存在下行有效数据包时, 发送空包 ;
上行语音驱动处理装置包括 :
判断单元, 用于接收上行语音数据, 判断上行接收队列中各个数据包是否均已 满;
存储单元, 用于判断单元判断上行接收队列中各个数据包均已满时, 将接收到的 上行语音数据添加到接收队列的最后一个数据包中。
所述下行语音驱动处理装置中的所述发送单元还用于 :
当检测单元检测结果为存在下行有效数据包时, 发送所述下行有效数据包。
所述下行语音驱动处理装置还包括 :
接收单元, 用于接收下行语音数据并缓存, 当接收到的下行语音数据达到 n 帧时, 确定开始进行所述下行语音数据的发送, n 为大于 1 的整数。
所述上行语音驱动处理装置中的所述存储单元还用于 : 判断单元判断上行接收队 列存在空数据包时, 依照接收队列中数据包的顺序, 将接收到的上行语音数据添加到相应 的空数据包中。
本发明实施例还提供一种下行语音驱动处理方法, 包括 :
确定进行下行语音数据发送时, 检测是否存在下行有效数据包, 如果不存在, 发送 空包。
还包括 : 检测存在下行有效数据包时, 发送所述下行有效数据包。
所述确定之前还包括 :
接收下行语音数据并缓存, 当接收到的下行语音数据达到 n 帧时, 确定开始进行 所述下行语音数据的发送, n 为大于 1 的整数。
本发明实施例同时提供一种下行语音驱动处理装置, 包括 :检测单元, 用于确定进行下行语音数据发送时, 检测是否存在下行有效数据包 ;
发送单元, 用于当检测单元检测结果为不存在下行有效数据包时, 发送空包。
其中, 所述发送单元还用于 : 当检测单元检测结果为存在下行有效数据包时, 发送 下行有效数据包。
还包括 : 接收单元, 用于接收下行语音数据并缓存, 当接收到的下行语音数据达到 n 帧时, 控制检测单元开始进行所述下行语音数据的发送, n 为大于 1 的整数。
本发明实施例还同时提供一种上行语音驱动处理方法, 包括 :
接收上行语音数据, 判断上行接收队列中各个数据包是否均已满, 如果是, 将接收 到的上行语音数据添加到接收队列的最后一个数据包中。
还包括 : 判断上行接收队列存在空数据包时, 依照接收队列中数据包的顺序, 将接 收到的上行语音数据添加到相应的空数据包中。
本发明实施例还提供一种上行语音驱动处理装置, 包括 :
判断单元, 用于接收上行语音数据, 判断上行接收队列中各个数据包是否均已 满;
存储单元, 用于判断单元判断上行接收队列中各个数据包均已满时, 将接收到的 上行语音数据添加到接收队列的最后一个数据包中。 存储单元还用于 : 判断单元判断上行接收队列存在空数据包时, 依照接收队列中 数据包的顺序, 将接收到的上行语音数据依次添加到相应的空数据包中。
对于上述技术方案的技术效果分析如下 :
本发明实施例的上下行语音数据驱动处理方法中, 当下行无有效数据包时, 发送 空包, 使得下行语音驱动处理模块持续稳定的发送下行语音数据 ; 上行接收队列的各个数 据包均已满时, 在最后一个数据包中不断更新存储接收到的新上行语音数据, 使得 AEC 处 理模块采集到的下行语音参考数据与上行语音数据相对应 ; 从而确保上下行语音数据帧之 间的传输时间差稳定, 进而使得终端能够使用 AEC 算法稳定抑制上行语音数据中的回声。
附图说明 图 1 为现有技术终端上下行语音数据处理示意图 ;
图 1a 为上下行语音数据帧启动传输的时间之间的时间差稳定时的关系示例图 ;
图 2 为本发明实施例下行语音驱动处理方法流程示意图 ;
图 2a 为本发明实施例下行语音数据帧启动传输的时间发生漂移时的采样时间差 关系示例图 ;
图 3 为本发明实施例上行语音驱动处理方法流程示意图 ;
图 4 为本发明实施例上下行语音驱动处理系统结构示意图 ;
图 5 为本发明实施例一种下行语音驱动处理装置结构示意图 ;
图 5a 为本发明实施例另一种下行语音驱动处理装置结构示意图 ;
图 6 为本发明实施例上行语音驱动处理装置结构示意图。
具体实施方式
为了解决现有技术上下行语音数据帧之间的传输时间差不稳定的问题, 保证上下行语音数据稳定同步, 本发明实施例提供一种上下行语音驱动处理方法及装置, 当下行无 有效数据包时, 发送空包 ; 上行接收队列的各个数据包均已满时, 不断将最后一个数据包中 存储的数据更新为接收到的新上行语音数据 ; 从而, 确保上下行语音数据帧之间的传输时 间差稳定, 进而使得终端能够使用 AEC 算法稳定抑制上行语音数据中的回声。
图 2 为本发明实施例下行语音驱动处理方法流程示意图, 该方法可以应用于终端 的下行语音驱动处理模块中, 进行下行语音数据的驱动处理。如图 2 所示, 包括 :
步骤 201 : 确定进行下行语音数据发送时, 检测是否存在下行有效数据包, 如果不 存在, 执行步骤 202 ; 否则, 执行步骤 203。
步骤 202 : 发送空包。所述空包也即为 : 内容全部为 0 的数据包。
在视频电话 (VP, Video Phone) 等业务中, 可能存在通话对方不说话的情况, 这时, 如果使用现有技术的下行语音数据驱动方法, 由于无下行有效数据包, 则将不进行下行语 音数据包的发送。从而导致进行回声抑制时, 无法在采样的时间点采集到稳定时间差的下 行语音参考数据的问题。本步骤中, 通过发送空包, 使得一直存在下行语音数据, 从而保证 了在采样的时间点, 能够采集到稳定时间差的下行语音数据包, 进而使得 AEC 处理模块进 行回声抑制时达到良好的回声抑制效果。 步骤 203 : 发送相应的下行有效数据包。
本步骤中所述相应的是指发送队列中当前需要发送的下行有效数据包。当步骤 201 中判断存在下行有效数据包时, 执行本步骤, 本步骤可参考现有技术中数据包的发送方 法完成, 这里不赘述。
步骤 202 和步骤 203 中将数据包发送给终端的模拟输出设备, 例如听筒、 扬声器等 模拟输出设备。
图 2 所示本发明实施例下行语音驱动处理方法中, 如果检测不存在下行有效数据 包, 则发送空包, 从而保证下行语音驱动处理模块持续发送下行语音数据, 从而, AEC 处理模 块能够从下行语音驱动处理模块中采样到稳定时间差的下行语音参考数据。
进一步的, 在实际应用中, 还可能出现短暂没有数据发送的情况。在现有技术中, 当有下行语音数据时, 即将下行语音数据发送给模拟输出设备 ; 没有下行语音数据时, 不进 行任何操作 ; 这样, 就会出现下行语音驱动处理模块中未接收到下行语音数据, 或者, 接收 到下行语音数据的时间发生漂移的问题, 从而导致 AEC 模块在固定的采样时间点无法采集 到下行语音参考数据, 导致采样时间点的漂移。如图 2a 所示, 下行语音驱动处理模块接收 到前一帧下行语音数据后的第 22ms 才接收到第 2 帧下行语音数据帧, 从而导致第 2 帧下行 语音数据帧发送到模拟输出设备的时间发生了 2ms 的漂移, 从而采集下行语音参考数据的 采集点也发生了 2ms 的漂移, 使得采集到的下行语音参考数据之间的时间差不稳定。为了 解决上述下行语音数据帧发送时间的漂移问题, 在步骤 201 中确定进行下行语音数据发送 之前, 还可以进一步包括如下步骤 :
步骤 201’ : 接收下行语音数据, 判断接收到的下行语音数据是否达到 n 帧, 如果达 到, 确定开始执行所述下行语音数据的发送步骤, 否则, 继续接收下行语音数据, 直到接收 到 n 帧下行语音数据后, 开始执行所述下行语音数据的发送步骤。其中, 所述 n 为大于 1 的 整数。例如, 可以为 3 帧。
通过对于接收到的下行语音数据的缓冲处理, 可以有效解决接收到的下行语音数
据存在时间漂移的问题, 从而进一步使得下行语音数据发送均匀, 保证终端在采样的时间 点采集到稳定时间差的下行语音数据包。例如,
假设当前已经缓存了 3 帧下行语音数据, 而 22ms 后才接收到下一帧下行语音数 据。此时, 对于下行语音数据来说, 已经有 3 帧数据需要发送, 而每一帧发送的时间都为 20ms。
第一个 20ms 时间内, 发送第一帧下行语音数据。
第二个 20ms 时间内, 发送第二帧下行语音数据。当第二帧下行语音数据发送后 2ms, 接收到了新一帧的下行语音数据, 此数据会填满刚刚被发送的那一帧下行语音数据所 对应的缓存空间, 但会受到 “收满 3 帧下行语音数据才启动发送” 的限制而暂存在缓存之 中。下行语音驱动处理模块正常发送第二帧下行语音数据, 做到第二帧下行语音数据的发 送时间与接收到的下行语音数据的时间无关。
从上面的分析中可以看出, 执行步骤 201’ 后, 发送到下行语音驱动处理模块的下 行语音数据的时间不会对下行语音数据的发送产生影响。这样, 即使下一次在 20ms 多一点 时间, 才有下行语音数据发送到下行语音驱动处理模块, 也能保证下行语音驱动处理模块 对于下行语音数据的发送持续进行, 不出现中断。 图 3 为本发明实施例上行语音数据驱动处理方法流程示意图, 如图 3 所示, 包括 :
步骤 301 : 接收上行语音数据, 判断上行接收队列中各数据包是否均已满, 如果 是, 执行步骤 302 ; 否则, 执行步骤 303。
其中, 上行接收队列中的数据包用于存储接收到的上行语音数据。
步骤 302 : 将接收到的上行语音数据添加到接收队列的最后一个数据包中。
其中, 一般预先设置数据包所能存储数据的数据量, 相应的, 接收到的上行语音数 据发送给上行语音数据驱动处理模块时, 将发送相应数据量的上行语音数据。 如果步骤 301 中判断上行接收队列中各个数据包中均已存储满数据, 这时, 将接收到的数据添加到接收 队列的最后一个数据包中, 从而保证最后一个数据包中始终存储有最新的上行语音数据。
步骤 303 : 依照接收队列中数据包的顺序, 将接收到的上行语音数据添加到相应 的空数据包中。
其中, 如果步骤 301 中判断得出接收队列未满, 则将依次将上行语音数据添加到 未存储上行语音数据的数据包中。
图 3 所示的上行语音数据驱动处理方法中, 如果上行接收队列中的数据包均已 满, 则将新接收到的上行语音数据不断添加到接收队列的最后一个数据包中, 也即 : 使得在 接收队列中数据包均已满的情况下, 接收队列的最后一个数据包中始终存储最新的上行语 音数据, 从而解决了现有技术中上行语音驱动处理模块在上行接收队列中数据包已满的情 况下, 不接收新的上行语音数据导致的上下行语音参考不准确的问题。
通过图 2 和图 3 所示的上下行语音数据驱动处理方法, 当下行无有效数据包时, 发送空包, 使得下行语音驱动处理模块持续稳定的发送下行语音数据 ; 上行接收队列的各 个数据包均已满时, 在最后一个数据包中不断更新存储接收到的新上行语音数据, 使得 AEC 处理模块采集到的下行语音参考数据与上行语音数据相互对应, 从而确保上下行语音数据 帧之间的传输时间差稳定, 进而使得终端能够使用 AEC 算法稳定抑制上行语音数据中的回 声。
图 4 为本发明实施例一种上下行语音驱动处理系统, 可以设置于终端中。包括下 行语音驱动处理装置 410 和上行语音驱动处理装置 420 ; 所述下行语音驱动处理装置 410 可以设置于终端的下行语音驱动处理模块中 ; 所述上行语音驱动处理装置 420 可以设置于 终端的上行语音驱动处理模块中。
下行语音驱动处理装置 410, 用于确定进行下行语音数据发送时, 检测是否存在下 行有效数据包, 如果不存在, 发送空包。
上行语音驱动处理装置 420, 用于接收上行语音数据, 判断上行接收队列中各个数 据包是否均已满, 如果是, 将接收到的上行语音数据添加到接收队列的最后一个数据包中。
进一步地, 所述下行语音驱动处理装置 410 还可以用于 : 检测存在下行有效数据 包时, 发送所述下行有效数据包。
进一步地, 所述下行语音驱动处理装置 410 还可以用于 : 确定之前, 接收下行语音 数据并缓存, 当接收到的下行语音数据达到 n 帧时, 确定开始进行所述下行语音数据的发 送, n 为大于 1 的整数。
另外, 所述上行语音驱动处理装置 420 还可以用于 : 判断上行接收队列存在空数 据包时, 依照接收队列中数据包的顺序, 将接收到的上行语音数据添加到相应的空数据包 中。
一般的, 上行语音驱动处理装置 420 还用于将上行接收队列中的数据包依次发送 给 AEC 处理模块进行回声抑制, 这里不再赘述。
所述下行语音驱动处理装置 410 可以通过图 5 所示的结构实现, 包括 :
检测单元 510, 确定进行下行语音数据发送时, 检测是否存在下行有效数据包。
发送单元 520, 用于当检测单元 510 检测结果为不存在下行有效数据包时, 发送空 包。
进一步地, 所述发送单元 520 还用于 : 当检测单元检测结果为存在下行有效数据 包时, 发送下行有效数据包。
优选地, 如图 5a 所示, 该装置还可以进一步包括 : 接收单元 530, 用于接收下行语 音数据并缓存, 当接收到的下行语音数据达到 n 帧时, 控制检测单元 510 开始进行所述下行 语音数据的发送, 所述 n 为大于 1 的整数。
所述上行语音驱动处理装置 420 可以通过图 6 所示的结构实现, 包括 :
判断单元 610, 接收上行语音数据, 判断上行接收队列中各个数据包是否均已满。
存储单元 620, 用于判断单元 610 判断上行接收队列中各个数据包均已满时, 将接 收到的上行语音数据添加到接收队列的最后一个数据包中。
进一步地, 存储单元 620 还可以用于 : 判断单元 610 判断上行接收队列存在空数据 包时, 依照接收队列中数据包的顺序, 将接收到的上行语音数据依次添加到相应的空数据 包中。
一般的, 下行语音驱动处理装置中还包括发送单元, 用于将上行接收队列中的数 据包发送到 AEC 处理模块中进行回声抑制处理, 这里不再赘述。
图 4 ~图 6 所示的上下行语音数据驱动处理系统及装置, 当下行无有效数据包时, 发送空包, 使得下行语音驱动处理模块持续稳定的发送下行语音数据 ; 上行接收队列的各 个数据包均已满时, 在最后一个数据包中不断更新存储接收到的新上行语音数据, 使得 AEC处理模块采集到的下行语音参考数据与上行语音数据相互对应, 从而确保上下行语音数据 帧之间的传输时间差稳定, 进而使得终端能够使用 AEC 算法稳定抑制上行语音数据中的回 声。
本领域普通技术人员可以理解, 实现上述实施例上下行语音驱动处理方法的过程 可以通过程序指令相关的硬件来完成, 所述的程序可以存储于可读取存储介质中, 该程序 在执行时执行上述方法中的对应步骤。所述的存储介质可以如 : ROM/RAM、 磁碟、 光盘等。
以上所述仅是本发明的优选实施方式, 应当指出, 对于本技术领域的普通技术人 员来说, 在不脱离本发明原理的前提下, 还可以做出若干改进和润饰, 这些改进和润饰也应 视为本发明的保护范围。