由于受到无线传输带宽的限制, 无人机对地面目标侦察获得的高分辨率视频图像必须经过有效压缩才能实时传输给地面接收处理系统。现有的视频压缩标准有H.261、H. 262、H . 263 及MPEG-1、MPEG-2、MPEG-4 等。
其中MPEG-4 由于采用基于对象的压缩编码方法, 较之以往各标准的基于帧的压缩编码方法, 其时间和空间冗余更低, 在保持解码质量的同时提高了压缩率。MPEG-4 还具有更好的交互性能及更强的抗误码性能 , 较之以往的压缩标准, 更适合无线信道的传输。
视频压缩算法比较复杂, 加之无人机有效载荷的重量和体积限制, 难以实现对机载视频图像的实时压缩编码,通常只能低分辨率图像实时压缩。本文基于TI 公司最新推出的媒体处理器TMS320DM642 设计并实现了机载图像实时压缩编码与处理系统, 实现了对最高分辨率为D1分辨率机载视频图像的分辨率和压缩比可调的MPEG-4实时压缩处理及恒定码流的输出。
1 设计要求
整个压缩处理系统完成对机载高分辨率摄像机输出的PA L 制式模拟视频信号进行实时采集、压缩与传输。
为了便于地面接收处理系统实时地分析图像, 须将无人机拍摄图像的时间及空间位置等附加信息和压缩图像数据实时地打包。MPEG-4 为不等长压缩编码, 为便于无线传输, 需将MPEG-4 数据包流进行编帧, 形成256 KB/ s的恒定基带码流, 实时传输给无线信道子系统供调制发射。系统还需根据控制命令动态地改变图像的分辨率及压缩比。
2 系统硬件设计
2. 1 TMS320DM642 芯片的特点
DM642 属于TMS320C64x 系列DSPs。Veloci T I 结构使C6000 DSPs 在视频和图像处理中得到广泛应用。
CPU 的VLIW 结构由多个并行运行的执行单元组成, 这些单元在单个周期内可执行多种指令。并行是C6000 获得高性能的关键。C64x 在C6000 的基础上有一些重要的改进。除了有更高的时钟频率外, C64x 从以前的VelociTI 结构扩展到Veloci TI. 2 结构, 包含了许多新的指令,增加了额外的数据通道, 寄存器的数量也增加了一倍。这些扩展使得CPU 可以在一个时钟周期内处理更多的数据, 从而获得更高的运算性能。
DM642 芯片集成了各种片内外设, 使得开发视频和图像领域的应用更为方便。它带有3 个可配置的视频端口, 提供与视频输入、视频输出以及码流输入的无缝接口。
这些视频端口支持许多格式的视频输入/ 输出。利用DM642 开发视频编码器, 其视频输入部分只需要一块视频采集芯片即可, 如AD 公司的A DV7181, 无需外加逻辑控制电路和FIFO 缓存, 使硬件系统更为简单和稳定。
DM642 集成的64 位的无缝外部存储器接口( EMIF) , 能够实现与外部同步和异步存储器或外设的无缝连接。
DM642 的其他外设包括: 10 Mbps/ 100 Mbps 的以太网口( EMAC) 、多通道音频串口(McASP) 、主机接口( HPI) 、多通道缓冲串口( McBSP) 以及PCI 接口等。
2. 2 系统硬件组成
机载图像实时压缩与处理系统以TMS320DM642 高性能通用DSP 芯片为核心, 由视频输入采集模块、图像压缩处理模块、外部存储模块及传输控制接口模块组成。其硬件系统框图如图1 所示。
图1 机载视频图像实时压缩处理系统硬件框图
图像采集模块对输入模拟视频信号进行同步捕获、采集和视频解码。视频解码器输出的数据格式为YUV4: 2:2。视频解码数据通过DMA 通道向DM642 VPORT 通道缓冲单元发送数据, 当采集完一帧数据时产生DMA 中断。图像压缩处理模块根据接收到的控制命令将视频解码数据进行实时压缩数理后缓存到存储模块中。存储模块采用32 MB 64 位的SDRAM, 实现程序和数据的存储。
传输控制接口模块将缓存在SDRAM 中的待传输码流以256 KB/ s 的恒定速率8 位并行传输至输出端口, 并接收地面发送的控制命令。该模块由FIFO 芯片和CPLD 组成, FIFO 半空时向DSP 发送中断信号。
2. 3 系统工作流程
系统由初始化模块、采集模块、压缩模块、打包编帧模块、存储模块和传输模块组成。其工作流程如图2 所示。
图2 机载图像将压缩处理子系统软件工作流程
初始化模块完成对程序从Flash 中导入内存、DSP各端口及解码芯片工作模式的设置及全局数据的申请及初始化, 并启动对视频端口状态的查询。当定时检测到视频端口缓冲区中有数据时, 将端口缓冲区中的原始数据根据接收的控制命令进行指定大小大抽取, 输出YUV4: 2: 0格式的图像数据缓存到外围存储模块中。压缩模块将采集的图像数据进行MPEG-4 压缩。打包、编帧模块将压缩后的MPEG-4 编码数据进行实时打包, 并对打包后的数据进行连续的实时编帧。当数据包缓冲区中无数据时,便在传输帧中插入空数据。编帧完的数据64 位并行缓存到外围SDRAM 中。在FIFO 中断服务程序中, 启动一次DMA 传输, 将缓存在SDRAM 中的帧数据流传输到FIFO 中, 实现256 KB/ s 的恒定速率的数据传输。
需要注意的是原始图像和压缩码流在DSP 中的存储。视频端口、编码程序都要访问原始图像, 例如在某一时刻,编码程序访问当前帧图像, 而视频端口正在输入下一帧图像, 为了避免访问冲突, 原始图像在DSP 中采用三缓冲区进行管理。压缩码流由编码程序写入, 根据FIFO 状态恒定码率输出, 所以采用环式存储管理协调读写的步调。
2. 4 内存分配
DM642 片内只有256 KB 的存储空间, 因此当前帧、参考帧和当前帧的重建帧都必须放至片外存储器, 压缩码流若被主机读取, 也放至片外。其他数据如程序代码、全局变量、VLC码表、各编码模块产生的中间数据等均可放至片内。
由于CPU 访问片外的速度通常要比访问片内慢几十倍, 片外数据的传输通常成为程序运行时的瓶颈, 即使代码效率很高, 流水线也会因为等待数据而被严重阻塞。解决这一问题的有效方法是用EDMA 传送数据。程序是逐个宏块进行编码时, 在编码当前宏块的同时, EDMA 将下一个宏块的数据、用到的参考帧数据由片外传送至片内;当前宏块做完成运动补偿后, EDMA 将重建后的宏块由片内传送至片外。这样CPU 只对片内数据进行操作, 使得流水线可以顺利进行, 而压缩码流按逐个码字有时间间隔地写入, 可由CPU 直接写至片外。
3 基于DM642 的软件优化技术
为了提高代码的执行效率, 必须充分利用C64x CPU的VL IW 和流水线结构对其进行优化, 使程序无冲突地并行执行[ 6] 。MPEG 4 编码程序中包含大量的循环体, 例如计算量化、DCT、半像素插值、运动补偿和构建重建帧等。这些循环体代码并不复杂, 且执行次数频繁, 占据了编码的绝大部分时间, 因此循环体的优化是重点。本文所采取的代码优化为C 语言优化和编写线性汇编两个步骤,主要从消除数据相关性、数据打包和循环体的软件流水3个方面进行优化。
3. 1 针对C语言的优化
C 代码的优化主要依靠开发环境CCS 的编译器完成, 编程者需要合理选择编译选项, 并利用特定的关键字和指令向编译器提供优化信息 。例如关键字rest rict 用来消除数据间的相关性, 编译器从而可以安排语句的并行执行 ; 内联函数_ nasser t 有助于数据的打包处理; 宏指令# pragma MU ST _IT ERAT E 告诉编译器有关循环迭代次数的信息, 编码器会根据这一信息进行软件流水。
3. 2 用线性汇编改写关键代码
线性汇编是TMS320C6000 特有的一种编程语言, 介于高级语言和汇编语言之间。它可以指定指令用到的寄存器和功能单元, 更易于对数据的打包处理。
线性汇编代码的并行处理和软件流水由汇编优化器完成, 编程者需要熟悉C64x DSP 的CPU 结构和指令集, 认真设计代码并充分利用编译器的反馈信息合理修改代码, 才能写出高质量的线性汇编。本设计中程序主框架采用C 语言编写, 其它各关键部分的代码采用线性汇编实现。
4 结果分析
本压缩系统在对标准Foreman 序列、地面人群及道路车辆等视频序列进行压缩测试。对D1 分辨率视频序列能够实现25 帧/ 秒实时的压缩编码, 压缩码率为1. 8 Mb/ s, 解码图像视觉效果良好, 经编帧后输出250KB/ s 恒定基带码流。在图像传输中没有出现数据拥塞和丢失现象。有效满足了高清晰机载图像帧察的目的。
5 结束语
本文以TMS320DM642 芯片为中心, 详细介绍了机载图像实时压缩系统的设计及MPEG 4 实时编码器的优化。系统经测试实现了高分辨率图像的实时压缩和实时编帧传输, 满足了系统设计需求。本文采用MPEG 4Simlpe Profile 算法, 在算法方面还有一定的研究空间。