技术领域
[0001] 本发明涉及媒体信息处理传输技术,特别涉及一种数据实时传输方法。
相关背景技术
[0002] 音频处理技术和传感器技术的迅速发展使多路化、高清化成为音频应用发展的一种趋势。语音数据量的激增不仅给处理平台的计算能力带来了严峻挑战,同时也给语音处理架构中芯片间数据的高速传输造成了极大困难。因此,在语音处理架构中解决芯片间语音数据的实时传输问题至关重要。现有方法缺乏针对语音数据和异构处理器结构特点的考虑,难以满足语音处理架构中音频的实时传输和处理需求。而且现有系统大多偏重于功能的实现,硬件资源的开销较大。
具体实施方式
[0017] 下文与图示本发明原理的附图一起提供对本发明一个或者多个实施例的详细描述。结合这样的实施例描述本发明,但是本发明不限于任何实施例。本发明的范围仅由权利要求书限定,并且本发明涵盖诸多替代、修改和等同物。在下文描述中阐述诸多具体细节以便提供对本发明的透彻理解。出于示例的目的而提供这些细节,并且无这些具体细节中的一些或者所有细节也可以根据权利要求书实现本发明。
[0018] 本发明的一方面提供了一种数据实时传输方法。图1是根据本发明实施例的数据实时传输方法流程图。
[0019] 本发明提出了一种基于高速PCI的数据实时传输方法。该方法通过在协处理器上采用语音频段数据重构方法并使用包头信息较短的流媒体写操作,简化语音传输格式,同时提高了高速PCI上语音数据包的传输效率;在核心处理器上通过预定义目标方数据存储单元和采用简洁的应答机制,节约了核心处理器在传输过程中的时间开销。减化了实现过程的复杂度。并且在存储过程中,采用音频缓冲队列取代资源占用率较高的RAM,因此系统对协处理器内存资源占用较少,无需外部存储器,降低了软硬件设计的难度。
[0020] 本发明的异构语音处理架构对处理任务进行了划分。其中,协处理器用于语音数据的采集、格式转换、预处理、数据传输和逻辑控制等任务;核心处理器用于音频的处理、分析和编码等核心工作。在存储方面,协处理器采用以段为单位完成数据采集和预处理的方法,其片上存储资源可以满足需求,避免了增加片外存储器;而核心处理器在计算过程中需要存取大量语音数据和中间处理结果,片内存储远无法满足要求,因此为其设计了专门的片外存储区片外存储器。
[0021] 针对语音数据在结构上的规范性特点以及处理上的统一性要求,本发明为协处理器与核心处理器上的收发缓冲队列各自分配多个音频缓冲队列,以实现语音数据频段的快速分离,并为两处理器上分类数据的高效整合提供了条件。首先,在分离过程中同时完成音频格式转换;其次,在预定义核心处理器目标方数据存储地址后,对分离后的语音频段进行打包传输,减少核心处理器计算数据存储地址上的时间开销。
[0022] 本发明对高速PCI的传输机制进行了定制和优化。在高速PCI操作选择上,由于系统中需要由协处理器读取核心处理器处理后的语音数据,因此选择了常规的读操作。在写操作中选择流媒体写操作。为简化高速PCI传输过程实现的复杂度,选用简洁的应答操作用于异构处理器间的传输控制。
[0023] 发送方的请求是一次操作的开始,用户控制发送方的请求端口组建请求数据包,数据包经过高速PCI链路发送到目标方请求端口进行解析,目标方用户控制目标响应端口组建响应数据包,数据包经过高速PCI链路发送回发送方响应端口解析。例如,在用户A发送高速PCI请求给用户B时,用户B响应用户A的高速PCI请求时,本发明的具体步骤如下:
[0024] (1)用户程序A控制发送方的请求端口信号,输入请求数据包信息,如包类型等;
[0025] (2)程序A根据用户输入信息封装为高速PCI数据包并发送到高速PCI链路;
[0026] (3)程序B收到请求数据包,解析后通过目标方请求端口通知用户程序B;
[0027] (4)用户程序B根据请求,控制目标方响应端口组建响应数据包,输入响应数据;
[0028] (5)程序B封装响应数据为PCI响应数据包并发送到高速PCI链路;
[0029] (6)程序A收到响应数据包,解析后通过发送方响应端口通知用户程序A,用户程序A接收并处理响应数据包。
[0030] 当核心处理器处理完一段语音数据后,将处理后的语音数据转移到核心处理器片外存储区的输出缓冲队列,在协处理器设计多个接收缓冲队列与之对应。当核心处理器处理完接收到的语音数据后,通过向协处理器发送应答操作通知协处理器取回处理好的语音数据,最后由协处理器通过读操作请求读回处理后的语音数据。
[0031] 本发明以协处理器作为传输链路处理器,核心处理器作为语音数据处理核心,分别设计协处理器和核心处理器高速PCI程序,其中,协处理器程序包括发送方请求和发送方响应;核心处理器程序包括目标方请求和目标方响应。为了实现高速PCI的实时传输,本发明在协处理器首先对采集到的语音数据进行发送前的重新组建。具体组建过程如下,协处理器采集打包格式的语音数据,为语音频段设置各自音频缓冲队列,用于分离并暂存语音频段。在分离过程的同时完成音频格式转换工作。当一个完整音频段的频段数据都写入各自音频缓冲队列后,分别读取各音频缓冲队列,以段为单位将频段写入发送缓冲队列。至此,高速PCI发送缓冲队列中已经存入以平面格式音频段为单位的语音数据,等待发送。
[0032] 在传输过程中,为每个流媒体写操作数据包设置特定地址和数据长度,语音数据以段为单位进行循环发送。采用由协处理器发送读操作请求方式读取核心处理器处理后的语音数据,核心处理器仅需对读操作请求进行读取响应即可,减小核心处理器在传输过程中的时间与资源开销,使得核心处理器可以专注于音频处理工作。其传输过程包括,为每个读操作数据包设置特定地址和长度,语音数据按段循环发送。将频段数据划分为多个读操作数据包,包存储地址可以由段基地址、频段偏移量和段偏移量计算获得。
[0033] 预定义核心处理器数据存储单元包括写操作和读操作的存储地址计算。以写操作为例进行说明。协处理器发送的每个写操作数据包中携带的数据将按顺序写入核心处理器的音频缓冲队列中的连续存储空间。因此,设置缓冲队列中数据按音频段排列;每个写操作数据包中数据只能包含一个频段,数据存储地址依次连续递增;在核心处理器音频缓冲队列中数据按音频段存储,每段数据中同一频段连续存储,组成各频段矩阵,便于核心处理器完成音频处理。
[0034] 本发明在传输语音数据过程中仅使用写操作、读操作和应答这3种操作,其中应答操作仅用来发送中断信号。具体实现过程如下:
[0035] (1)在语音数据由协处理器写入核心处理器过程中,协处理器作为发送方,将模数转换后的数字音频通过写操作写入核心处理器对应的片外存储区,音频在写片外存储区时,核心处理器禁止对该存储区进行操作。当协处理器写完一段数据之后,发送一个应答操作,通知核心处理器可以对该段数据进行处理,保证协处理器与核心处理器之间的同步。为了保证核心处理器上处理的连续性,在核心处理器上设置了8段缓冲队列,可以循环对数据段进行处理。
[0036] (2)在语音数据由核心处理器写入协处理器的过程中,每当核心处理器处理完一段音频之后,发送应答操作通知协处理器可以进行数据读取。协处理器接收到该同步信号之后,作为发送方,将核心处理器处理后的语音数据通过读操作读入协处理器的缓冲队列中。在实际运行过程中,为保证数模转换后音频的连续性,必须维持协处理器缓冲队列不空,同时要兼顾数据采集的码率。为了防止出现同步问题,设定在核心处理器处理完两段数据后向协处理器发送应答,使其进行读操作。在读的过程中,协处理器只需维护自己的缓冲队列即可。在设计状态机实现读写功能时,以读优先的方式进行操作,设置当缓冲队列中的数据小于预设字节数时,进行读操作,否则,进行写操作。在读数据的过程中,不能进行写操作,但此时麦克风的模拟音频信号却仍然在实时输入,为了保证读数据的时间内采集用的缓冲队列不溢出需要计算缓冲队列的最大值。
[0037] 具体控制过程如下:
[0038] (1)由于音频是以段为单位进行采集并传输到缓冲队列的,因此,为保证段数据结构的完整性,当缓冲队列中数据不少于一段且此时没有读请求时,可发送数据,即完成一次流媒体写操作。
[0039] (2)在协处理器向核心处理器发送数据时,当完成一段数据的传输且此时没有读请求时,即可通过发送应答操作通知核心处理器处理接收到的当前段数据;在协处理器从核心处理器读取数据过程中,当核心处理器处理完两段语音数据时发送应答操作通知协处理器读取第一段数据。
[0040] (3)以协处理器接收缓冲队列中数据量和核心处理器发送给协处理器的应答操作为触发条件,当缓冲队列中有多于一段的剩余空间即可组建读操作完成一段数据的读取。
[0041] 在传输过程中,为提高编码效率以及总线的利用率,本发明还计算当前总线支持的最大传输码率,自适应地调整协处理器的输出码率。传输速率计算公式如下:
[0042]
[0043] 式中:RTT为往返时间;RTO为重传间隔;Pls为丢包率;Psize为发送的数据包的大小。上述所需参数依靠由目标方周期性向发送方发送的目标方响应数据包。其中包含了间隔抖动、已接收报告数、累计丢包数等重要参数。协处理器根据这些参数计算检测当前总线状况,并根据检测结果进行码率的自适应调整。
[0044] 本发明对语音数据传输过程细化为启动和防止拥塞两个阶段。
[0045] (1)启动阶段。通过量化值QV的动态改变来实现码率的调整。QV值越大,码率越小,音频的质量越差,设置QVmax和QVmin为量化值最大值和最小值。首先初始化QV=QVmax,然后根据数据包反馈的丢包率Pls进行操作选择。当Pls=0时,使用公式QV=max(QV-2×(1-QV′)-β,QVmin)进行QV的调整,其中QV′为QV的均值,β为参数),如果连续5个响应数据包中有3个丢包率非0或者QV减小到QVmin,则进入防止拥塞阶段。
[0046] (2)防止拥塞阶段。当码率与带宽达到适应后,进入到防止拥塞阶段,进行码率的自适应调整。
[0047] 首先,根据获取的传输速率br可计算得到起始音频量化值start:start(br)=a×bbr+c
[0048] 式中:a、b、c为常系数。
[0049] 再根据start和量化阈值Th对QV的值进行调整,当startQV+量化阈值Th时,提高量化值,QV取start和QVmax中较小值。当QV-Th≤start≤QV+Th时,不改变编码量化值。
[0050] 其中,量化阈值Th是调整QV的阈值。设置量化阈值Th的计算公式为:量化阈值Th=1/4×(1+QV(QV+θ))式中:θ为参数。
[0051] 由于本发明方法协处理器在读写过程中都是作为传输数据包的发送方,而核心处理器作为响应端只需接收和发送简洁的应答信号,其目标方请求与目标方响应端口实现相对简单。因此,传输过程设计的难度集中在协处理器的发送方的请求与发送方响应两个端口。其中,发送方的请求模块做为一次操作的开始,负责组建请求数据包;发送方响应模块负责接收读操作的响应数据包。
[0052] 发送方请求模块包含以下4部分:控制单元、数据包生成单元、请求生成单元和缓冲队列。其中,控制单元是整个发送方的请求模块的核心控制部分,用于检测是否发送数据、控制何时发送数据以及组建数据包信息,控制单元监控缓冲队列状态,控制数据包生成单元完成数据包发送;数据包生成单元负责具体的数据组建工作,产生数据包包头信息,并将包头信息传递到请求生成单元,监控请求生成单元状态并向控制单元反馈;请求生成单元负责与程序的发送方的请求端口协同将组建好的数据包信息传递给程序,完整的数据包包括包头信息和数据信息,请求生成单元的包头信息来自数据包生成单元,数据信息可以直接取自缓冲队列或接收数据包生成单元传递的数据;缓冲队列是发送数据缓冲队列。
[0053] 语音数据依次通过缓冲队列和请求生成单元,最终由请求生成单元传递到程序的发送方的请求端口并通过链路发出。控制单元是协处理器所有高速PCI请求的发起者,也是协处理器控制高速PCI通路数据收发的核心,使用控制单元模块请求操作状态机完成高速PCI通路控制工作。状态机包含以下状态:初始化、就绪、流媒体写入、应答、读取和发送状态。初始化状态是状态机的初始状态,当高速PCI硬件初始化成功后进入就绪状态,否则继续等待;就绪状态表示高速PCI链路正常,当发送请求来临并且程序就绪时,进入对应发送请求状态,若高速PCI链路异常,则进入初始化状态;读取、应答和流媒体写入状态分别是发送读操作、应答操作和写操作状态,每种操作分别组建各自的有效操作信息,当程序状态就绪时进入发送状态,否则等待,若PCI链路出现异常或者中断,则进入就绪状态;发送状态为PCI请求操作发送状态,控制单元模块将组建好的数据信号传递给数据包生成单元模块,命令数据包生成单元模块开始组建数据包的包头信息,并发送高速PCI数据包,当数据包生成单元完成数据接收则进入就绪状态,否则继续等待,若出现链路异常或者中断,则进入就绪状态。
[0054] 发送方响应模块负责接收并解析核心处理器发送的读操作响应操作数据包数据,包括响应处理单元和缓冲队列两部分,响应处理单元负责接收及解析数据包,缓冲队列是接收数据缓冲队列。响应处理单元接收解析数据工作由响应处理单元模块操作解析状态机控制完成。响应处理单元状态机只包括3个状态:初始化、就绪和接收状态。初始化状态是初始状态,表示当前高速PCI硬件链路连接仍未建立成功,当高速PCI链路建立成功后进入就绪状态,否则等待;就绪状态表示当前响应处理单元模块处于空闲状态,可以接收响应操作,当响应操作到来时,进入接收状态,当高速PCI链路断开时,进入初始化状态;接收状态表示当前正在接收程序发送方响应端口数据信息,同时完成向缓冲队列写入操作,当数据接收完成时,进入就绪状态,当高速PCI链路端口时,进入初始化状态,否则继续接收数据,处于接收状态。
[0055] 在上述语音数据传输过程中,为进一步在传输语音过程中隐蔽式地携带待隐藏信息,本发明进一步利用编解码后的前后两段能量值的比值的特点,采用适用于芯片间传输的方法,由核心处理器在语音数据中隐藏传输其它待隐藏信息。该方法的预处理步骤包括:
[0056] 步骤1.1选择合适的初始值x0,生成一个随机序列G={g(1),g(2),g(3),…},g(i)∈{0,1};其中g(xn)在0.5≤xn≤1时为1;在0≤xn≤0.5时为0,并且有xn+1=axn(1-xn),0≤a≤4是分支参数。
[0057] 步骤1.2将待隐藏数据S与步骤1.1中生成的随机序列进行运算,变为m位的待隐藏数据S':s'(i)=s(i)⊕g(i);
[0058] 在数据嵌入音频的过程中,包括如下步骤:
[0059] 步骤2.1.将包含N个样本的普通语音R={R(j),0
[0060] 式中,r(k)表示第k段语音;L表示每段样本数,并且满足m≤L。
[0061] 步骤2.2.计算每一段语音的能量值,然后选择能量较大的语音段嵌入待隐藏数据,可以在一定程度上增强算法鲁棒性和透明性。
[0062]
[0063] 设T为能量阈值,当E(k)≥T时,则该段语音符合要求,可以嵌入待隐藏数据,反之,当E(k)
[0064] 步骤2.3.分别计算满足上述要求的各段语音前L/2个样本的能量和后L/2个样本的能量
[0065]
[0066]
[0067] 步骤2.4.确定初始嵌入深度常数d,计算前L/2个样本的放大增益d1,若s'(i)=1且E1/E2
[0068] 步骤2.5计算后L/2个样本的放大增益d2,若s'(i)=1且E1/E2
[0069] 步骤2.6利用两个放大增益值d1、d2将待隐藏数据s'(i)嵌入到明文语音段r中,即:
[0070] 当0≤j
[0071] 当L/2≤j
[0072] 从上述具有隐藏信息的语音数据提取待隐藏数据的过程包括:
[0073] 步骤3.1把接收到的语音数据分为K段,每段长度仍然为L,
[0074] r'(k)=r'(k×L+j),0
[0075] 步骤3.2计算每段能量值,当E(k)≥T时,继续进行下一步
[0076]
[0077] 步骤3.3计算每段前L/2个样本和后L/2个样本的能量值
[0078]
[0079]
[0080] 步骤3.4判断得到待隐藏数据s″(i):
[0081] 若E1'>E2'则s″(i)=1,
[0082] 若E2'>E1'则s″(i)=0;
[0083] 步骤3.5根据随机序列的初始值x0和待隐藏数据的长度,对s″(i)进行解调得到原始待隐藏数据s(i)。
[0084] 综上所述,本发明提出了一种数据实时传输方法,节约了芯片间的大量语音数据的传输开销,减少了内存资源占用,降低了软硬件设计的难度。
[0085] 显然,本领域的技术人员应该理解,上述的本发明的各模块或各步骤可以用通用的计算系统来实现,它们可以集中在单个的计算系统上,或者分布在多个计算系统所组成的网络上,可选地,它们可以用计算系统可执行的程序代码来实现,从而,可以将它们存储在存储系统中由计算系统来执行。这样,本发明不限制于任何特定的硬件和软件结合。
[0086] 应当理解的是,本发明的上述具体实施方式仅仅用于示例性说明或解释本发明的原理,而不构成对本发明的限制。因此,在不偏离本发明的精神和范围的情况下所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。此外,本发明所附权利要求旨在涵盖落入所附权利要求范围和边界、或者这种范围和边界的等同形式内的全部变化和修改例。