基于FPGA嵌入式系统的多路音频软编码机制的制作方法

文档序号:12724112阅读:283来源:国知局
基于FPGA嵌入式系统的多路音频软编码机制的制作方法与工艺

本发明涉及广播电视与多媒体技术领域,特别是涉及一种基于FPGA嵌入式系统的多路音频软编码机制。



背景技术:

在广电与多媒体领域,人们对音频质量的要求正在不断地提高,从单声道到立体声,又在向多声道发展,最广泛采用的多声道环绕声配置是ITU-R建议的5.1声道配置。而且同一视频可以存在多个配音,比如多种语言。随着工业技术的不断提升,多媒体系统支持的视频节目数也在不断增加,与视频对应的音频的数目也会成比例增长。增加音频编码芯片的数量无疑会增加编码系统的采购成本,各种音频编码芯片对编码格式以及控制方式都有特殊的要求,这加大了设计的复杂程度延长了设计周期。



技术实现要素:

本发明的发明目的在于提供一种基于FPGA嵌入式系统的多路音频软编码机制,采用本发明提供的技术方案能够并行地接收与处理多路的原始数字音频数据,对各通道PCM音频帧产生与视频同步的PTS值,并将此对应关系保持到编码后的PES帧和PTS值,保证音视频同步。

为了达到上述发明目的,本发明一方面提供一种多路音频软编码方法,包括以下步骤:

将每个输入通道的原始音频数据由串行格式转为并行格式,并提取所述原始音频数据的有效PCM数据,利用乘法器对所述PCM数据进行音量放大操作,根据音频编码算法调整所述PCM数据的PCM数据位宽,将所述PCM数据编码成ES帧,采用DDR对所述PCM数据完成编码前PCM帧和编码后ES帧的交互,多个ES帧组成一个PES帧,将与视频同步的PTS值写入与之对应的PES帧头部,将PES帧分解为多个个TS包并匀速输出。

本发明另一方面还提供一种多路音频软编码装置,包括PCM数据提取模块、PCM音频放大模块、PCM数据缓冲器和DDR写控制模块;所述PCM数据提取模块将原始数字音频输入格式由串行转换为并行格式,并提取出所述原始数字音频的有效PCM数据作为音频编码的原始输入数据;所述PCM音频放大模块,内含有符号乘法器,用于放大所述PCM数据,并根据音频编码算法要求控制所述PCM数据的位宽;所述PCM数据缓冲器,内含有PCM数据缓存区,用于缓存所述PCM数据,缓存大小为系统总线写burst长度,当缓存满burst长度的PCM数据后,由所述DDR写控制模块控制将PCM数据缓存区的PCM数据发送到系统总线;所述DDR写控制模块,用于将传入系统总线的PCM数据通过DDR控制器写入FPGA片外的DDR内;DDR内分配有PCM帧交互区,用于将PCM数据以PCM帧的形式存放。

本发明还提供一种利用FPGA嵌入式系统进行编码和输出编码数据的方法,包括以下步骤:嵌入式CPU读取权利要求3中所述PCM帧交互区的PCM帧进行音频编码成ES帧;CPU将音频编码后的ES帧写入DDR分配的编码ES帧交互区,并通知FPGA内部的发送模块读取所述ES帧;发送模块通过系统总线读出ES帧,并将N个ES帧组成一个PES帧,将与视频同步的PTS值写入与之对应的PES帧头部,将PES帧分解为M个TS包,并将TS包匀速输出。

本发明还提供一种与视频显示实时同步的PTS值的产生方法,采用本地PTS计数逼近的方法产生与视频实时同步的PTS值,包括以下步骤:

实时提取视频PCR;本地计数器PTS_counter在本地时钟下进行计数,计数初始值为首次提取的视频PCR值;每当视频PCR更新,比较PTS_counter值与视频PCR值之间的差值;设置一个差值门限,PTS_counter与视频PCR差值大于差值门限,则调整PTS_counter值;PTS_counter与视频PCR差值连续超过差值门限值预设次数之后,则将PTS_counter值置为视频PCR值。将PTS_counter值作为与视频同步的PTS值。

本发明还提供一种产生与PES帧对应的PTS值的方法,在编码系统时钟下,第i(1~n)通道的PCM帧的第一个有效数据出现的时刻,锁存计数器PTS_counter值作为与此PCM帧对应、且与视频实时同步的PTS值;PCM帧编码产生ES帧,ES帧对应的PTS值与此ES帧编码输入的PCM帧的PTS值相同;多个ES帧组成一个PES帧,将PES帧内的第一个ES帧对应的PTS值作为PES帧的PTS值并写入PES帧头。

由上可见,应用本发明实施例的技术方案,有如下有益效果:

(1)FPGA器件具有丰富的逻辑资源,可实现多路音频编码,其路数远大于普通音频编码芯片的音频编码路数,节省了音频编码芯片的采购成本。进一步地,FPGA芯片可以完成编码后音视频流的处理,因此对于多媒体系统搭建具有极小的成本。FPGA器件具有比普通编码芯片更多的外设接口,提供充分的调试手段;

(2)基于FPGA嵌入式芯片的现场可编程特点,可以灵活的设置音频编码通道数,音频编码算法,减少设计复杂度,缩短设计周期;

(3)基于FPGA高速处理能力,可以并行的接收多路原始音频数据,在各路音频帧的起始产生与视频同步的PTS值,在编码的过程中保持PTS与音频帧的对应关系,具有较好的音视频同步指标。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对本发明实施例或现有技术描述中所需要使用的附图作简单地介绍。显而易见地,下面描述中的附图仅仅是本发明的一部分实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为依照本发明的基于FPGA嵌入式系统进行多路音频软编码的实现方法的系统框图;

图2为依照本发明的原始音频PCM帧与对应的PTS值分别在DDR和寄存器存放的存放结构示意框图;

图3为依照本发明的PTS产生模块结构图。

图4为依照本发明的第i通道的编码后ES帧与对应的PTS值分别在DDR和寄存器存放结构示意框图;

图5为依照本发明的在编码过程中音频帧与PTS值对应关系示意图;

图6为依照本发明的PTS产生模块采用的一种本地PTS计数逼近的实施例流程图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

在对多路音频解码过程中,增加音频编码芯片的数量无疑会增加编码系统的采购成本,各种音频编码芯片对编码格式以及控制方式都有特殊的要求,这加大了设计的复杂程度,延长了设计周期。

为了解决上述技术问题,本实施例公开了一种基于FPGA嵌入式系统的多路音频软编码机制,本实施例提供的技术方案采用嵌入式FPGA芯片作为实现平台,能灵活的设置音频编码路数与编码算法,同时保证音视频同步。

具体实现方法如下:

先采用图1中所示的原始音频接收模块101对原始音频数据进行初处理,其实现步骤如下:

1、将原始音频数据由串行格式转为并行格式,并提取有效PCM数据。

2、有符号乘法模块放大音频幅度值,放大因子可设。

3、根据算法需要调整原始PCM数据位宽。由于PCM数据是以二进制补码的形式存在,增加位宽采取在低位补零的方式,减小位宽采取截取低位的方式。

4、将处理后的PCM数据放入FPGA片内存储器缓存,缓存采用乒乓的读写方式,乒乓缓存深度为系统总线burst长度。

由上述原始音频接收模块101处理得到的PCM数据,传递给嵌入式处理器系统进行音频编码,PCM数据交互则在FPGA片外DDR进行。

请参见图2,在片外DDR内设有PCM帧交互区,该PCM帧交互区根据通道数目n划分为n个区间,称之为通道区间。每个通道区间分为大小相等的两个子区间:乒区203和乓区204。乒区和乓区各存储一个PCM帧。

请参见图1,写DDR控制模块102用于将通道1到通道n的接收模块101内缓存的PCM音频数据通过系统总线写入DDR内PCM帧交互区.

PCM音频数据写入PCM帧交互区的操作过程具体如下:当通道i(1~n)的接收模块101完成一个系统总线burst长度PCM数据的缓存后,写DDR控制模块向系统总线发起一次写burst操作。先根据通道号i确定PCM帧交互区的通道区间,再确定该通道区间乒乓子区间,将总线burst数据写入乒乓子区间。若已写满其中一个乒乓子区间后,转向写入另一个乒乓子区间。

当PCM帧交互区存在任意通道的一个完整的PCM帧之后,嵌入式系统将此PCM帧转移到其他DDR区间进行音频编码,并释放该PCM帧所在的通道子区间。

根据MPEG协议,PTS是音频数据存储单元的显示时间。为了保证多路节目的音视频同步,需要正确的对每一路音频产生准确的与视频同步的PTS信息,即保证音频PTS与视频PTS具有相同的系统时基。请参见图2,PTS生成模块205,用于产生PTS值,并存入相应的PTS寄存器202。

请参见图3,PTS生成模块由4个子模块,PCR_analysis模块301,PTS_counter模块302,PTS_trans_ctrl模块303,与PCM_counter模块304组成。

由PCR_analysis模块301,PTS_counter模块302组合产生实时的与视频同步的PTS值;PTS_trans_ctrl模块303,与PCM_counter模块304组合将实时的PTS值写入各通道对应的PTS寄存器。

该PTS值与视频显示实时同步的属性是采用本地PTS计数逼近的方法产生,包括以下步骤:实时提取视频PCR;本地计数器PTS_counter在本地时钟下进行计数,计数初始值为首次提取的视频PCR值;每当视频PCR更新,比较PTS_counter值与视频PCR值之间的差值;设置一个差值门限,PTS_counter与视频PCR差值大于差值门限,则调整PTS_counter值;PTS_counter与视频PCR差值连续超过差值门限值预设次数之后,则将PTS_counter值置为视频PCR值,将PTS_counter值作为与视频同步的PTS值。

请参见图6,具体的,包括:

步骤600:PCR_analysis模块301实时提取视频编码器传来的PCR信息,PCR值的PCR_base与PCR_ext值。

步骤601:PTS_counter模块302用于产生实时的PTS值,该PTS值在本地27Mhz时钟的有效沿计数。

PTS_counter模块302模块包含PTS_base与PTS_ext两个计数器,其中PTS_ext对本地27Mhz时钟计数,计数区间0到299.当PTS_ext计数满300个27Mhz时钟周期PTS_base值计数加1。

PTS_base与PTS_ext的计数初始值分别为为第一次从PCR_analysis模块301获取的PCR_base值与PCR_ext。

步骤602:当PCR_analysis模块301获取到新的视频PCR_base时,计算PCR_base与PTS_base差值DIF_PTS即DIF_PTS=PCR_base-PTS_base,将DIF_PTS与预设阀值进行比较。

计数器correct_cnt用于统计DIF_PTS超过预设阀值的次数。

步骤603:若DIF_PTS小于预设阀值,则PTS_counter模块302的PTS_base与PTS_ext不进行校正,将PTS_base作为实时的与视频同步的PTS值输出。并且计数器correct_cnt归零。

步骤604:若DIF_PTS大于预设阀值,判断correct_cnt是否达到预设最大值。

步骤605:若DIF_PTS大于预设阀值,且correct_cnt未达到预设最大值则将PTS_base计数器值置为PTS_base+DIF_PTS/2,并且correct_cnt计数加1。

步骤606:若correct_cnt达到预设最大值,则认为出现异常,调整PTS_base值将不起作用,则将本地PTS_base与PTS_ext计数器置为PCR_base与PCR_ext,并且correct_cnt归零。

通过上述步骤得到的PTS值则具备与视频显示实时同步的属性,此外,需要产生与各个通道PCM帧对应的PTS值,具体步骤如下:

每个通道对应存在一个PCM_counter计数器304。PCM_counter计数器304对图1所述接收模块101接收的PCM数据个数进行计数,计数最大值为PCM帧的长度值。当PCM_counter计数值等于1,代表此时刻为PCM帧第一个PCM数据出现的时刻。每当某通道i对应的PCM_counter=1,则产生请求信号输出给PTS_trans_ctrl模块303,PTS_trans_ctrl模块303接收到通道i的请求信号立即锁存此时的通道i对应的PTS_counter的PTS值,并写入到对应通道的PTS寄存器202。PTS_trans_ctrl模块303具有并行处理能力,即当多个通道的PCM_counter同时发出请求时,将锁存此时PTS_counter的PTS值,并行写入各对应通道的PTS寄存器202。

请参见图2,由于PCM帧交互区每个通道区间分为乒乓两个子区间,两个子区间各存放一个PCM帧。所以对应的PTS寄存器,也是每个通道分配两个寄存器与PCM帧对应。

图6所示是在编码过程中音频帧与PTS值对应关系示意图。具体地,保持音频帧(PCM帧,ES帧,PES帧)与PTS的关系,直到PTS值与PES帧对应。以下是产生PES帧以及其对应的PTS的步骤:

请参见图5,首先产生ES帧以及其对应的PTS,包括:

通道i的音频帧PCM_frame_1帧503经过嵌入式处理器进行音频编码之后,生成ES_frame_1帧504;PTS_1值505对应于PCM_frame_1帧503则同样的PTS_1值505对应于编码之后的ES_frame_1帧504。具体实现如下:

如图2所示DDR内PCM帧交互区201的PCM帧与PTS寄存器202的PTS值具有一一对应关系,即PTS值为PCM帧第一个PCM数据在编码系统时钟下的时间戳。嵌入式系统取出PCM帧交互区201中通道i的PCM帧进行编码后,放入如图4所示的ES帧交互区401。同时将与通道i的PCM帧对的PTS值放入如图4中与该PCM帧编码后ES帧对应的PTS寄存器402中。ES帧交互区和对应的PTS寄存器采用先进先出的读写方式。

通过上述实现方法,编码后PTS值与ES帧的对应关系与编码前PTS值与PCM帧的对应关系保持一致。

产生ES帧以及其对应的PTS后,其次产生PES帧以及其对应的PTS,其过程包括:

FPGA内部PES封装模块完成音频数据ES到PES的格式转换,并将PTS值插入PES帧头内。协议规定PES包可封装任意数量的ES包。请参见图5,第i通道PES帧所示,设一个PES帧封装N个ES帧,则将PES帧封装的第一个ES帧ES_frame_1帧503对应的PTS值PTS_1值505作为第i通道PES帧的PTS值,该PTS值为PES帧的第一个ES帧的显示时间,也是PES的显示时间,将该PTS值插入PES包头中。请参见图6,在PES帧内第2到第N个ES帧对应的PTS值从寄存器丢弃506。

如图6,FPGA内部TS封装模块按照协议要求将PES帧分解后插入TS帧的负载区域中。在输出端将TS匀速输出,因为数字音频采样率固定,所以原始音频输入是匀速输入,即PCM帧率恒定,设PCM帧率为rate_pcm,则按一个PCM帧编码输出一个ES帧,N个ES帧对应一个PES帧,一个PES帧封装成M个TS包计算出TS包率为rate_ts=rate_pcm*M/N。

本实施例提供的基于FPGA嵌入式系统的多路音频软编码机制采用嵌入式FPGA芯片作为实现平台,能灵活的设置音频编码路数与编码算法,同时保证音视频同步。FPGA器件具有丰富的逻辑资源,可实现多路音频编码,其路数远大于普通音频编码芯片的音频编码路数,节省了音频编码芯片的采购成本;进一步地,FPGA芯片可以完成编码后音视频流的处理,因此对于多媒体系统搭建具有极小的成本。FPGA器件具有比普通编码芯片更多的外设接口,提供充分的调试手段;基于FPGA高速处理能力,可以并行的接收多路原始音频数据,在各路音频帧的起始产生与视频同步的PTS值,在编码的过程中保持PTS与音频帧的对应关系,具有较好的音视频同步指标。

以上所述的实施方式,并不构成对该技术方案保护范围的限定。任何在上述实施方式的精神和原则之内所作的修改、等同替换和改进等,均应包含在该技术方案的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1