引言
在以视频为代表的海量信息的今天,嵌入式视频服务器有着广阔的应用空间。在数字电视、视频点播等应用领域,主要考虑大容量存储等技术参数;在视频监控系统中,嵌入式视频服务器支持网络传输功能,可以看作是一种网络摄像机,它先将输入的模拟视频信号进行数字化采样,经压缩、编码等处理过程,以数字信号的模式传送至网络上,从而实现远程实时监控的目的。
然而,在实际信道上传输数字信号时,由于信道传输特性不理想,尤其在远距离及无线通信系统中,传输引起的信号衰减和信道噪声使得接收端所收到的数字信号不可避免地发生错误。基于实时性的要求,一般选择基于UDP协议进行传输。该协议是一种无连接的传输层协议,相对TCP传输控制协议来讲具有资源消耗小、处理速度快的优点,所以通常传送音频、视频和普通数据时使用UDP较多。然而,UDP是一种不可靠的传输方式,当接收到的信号发生错误时不会自动检测或者重传,这时就需要采用信道编码(即差错控制编码)使接收端能够自动检测并纠正传输错误,以满足系统指标要求。
利用信道编码进行差错控制的系统基本上有3种[1]:前向纠错[2]、检错重发和混合纠错。前向纠错是一种常用的提高数据传输可靠性的方法,基本思想是利用纠错码,在接收端发现错误时,根据接收到的码字和编码规则,自动纠正传输中的错误。由于不请求重发,实时性较好,因此本文采用前向纠错编解码方法进行差错控制。
1 FEC通信系统架构设计
当前嵌入式视频应用领域对芯片的要求主要有:足够强大的运算能力,能够实现大尺寸视频的编解码,具备完善的控制功能,整合程度高、芯片成本低、功耗小、灵活性强和应用开发周期短等。在如此大环境的要求下,美国TI公司的达芬奇(Davinci)技术应运而生。近年来,TI公司陆续推出了一系列基于Davinci技术的数字媒体处理器。其中,TMS320DM6467T[3](简称DM6467T)是一款高度集成的媒体处理器,集成了ARM926EJS内核与C64x+ DSP内核,提供10 MB/100 MB/1000 MB以太网接口。DSP端负责信号处理,包括音视频编解码、Codec Engine、DSP的实时操作系统DSP/BIOS及和ARM通信的模块;ARM端用于算法应用层和I/O驱动,调用DSP侧的算法,实现系统控制功能。充分利用C64x+ DSP内核的VLIW(超长指令集)结构等强大的信号处理能力,可以大大提高代码执行效率,有利于满足系统实时性的开发要求;充分利用DM6467T提供的Codec Engine机制,可以高效便捷地完成ARM和DSP之间的软件通信。视频服务器硬件平台如图1所示。
图1 视频服务器硬件平台
本文基于高性能的数字媒体处理器DM6467T的硬件平台架构,实现前向纠错通信功能,整个过程如图2所示。
图2 视频服务器通信系统架构
视频服务器前端采集音视频信号,这里信号来源可以是有线电视信号或者摄像机采集的现场模拟信号。经过板卡进行A/D转换,再经过H264压缩编码变成音视频流,选择合适的分组打包方式。根据网络环境恶劣状况,设计算法对每组数据进行FEC编码,基于UDP协议发送到接收端。接收端的Windows平台创建Visual Studio工程,基于多线程及环形缓冲区机制,实时接收数据并进行FEC解码,然后根据压缩格式进行解码并存入文件,用VLC播放器或者Elecard等流媒体软件播放。
2 系统软件设计与实现
2.1 FEC算法概述
前向纠错是一种使得信息接收端更改一定数目的错误码的技术。根据某种规则在FEC的编码端给将要发送的数据添加一些冗余数据,然后FEC接收端采用相应的规则诊断并纠正传输时出现的错误。
例如:对于要传输的k个数据分组,根据某种编码方法对其编码,生成n(n>k)个数据分组,将k个数据分组和生成的n-k个冗余数据分组一起发送。网络接收方利用冗余数据,将接收到的数据分组运用相应的译码算法恢复k个数据分组。
比较常用的FEC编码类型大致分为两种:线性码和卷积码。线性码的编码方法相对简单,包括汉明码、BCH码、RS码、RM码、Goppa码等[4],较为常用的为RS码。dmin距离[5]决定码的纠错能力。dmin指任意两个码字对应位进行比较,不同位的数目中最小的那个数值。(n,k)线性码的dmin一定满足不等式dmin≤n-k+1,等号成立时称为最大距离码。RS码在所有的线性码中具有最大的dmin距离,因此RS码具有最强的纠错能力。本文采用RS码进行差错控制。
对于RS(n,k)码,输入信号以k×m比特为一组进行分组,每组有k个符号,每个符号长度为m比特。能纠t个符号错误的RS码的参数如表1所列。
表1 纠错能力为t的RS码参数
RS码的dmin=2t+1,可以纠正的最大错误个数为:t=(n-k)/2。
RS码的符号取自GF(2m)有限域,该域称为伽罗华域(简称GF)。一个码长为n,信息组长度为k的线性分组码,如果其中任一码字,每次向左(或向右)循环移位,所得码字也是该组分组码的码字,则该分组码就是一个能纠正多个随机错误或突发错误的线性分组码。
RS线性分组码的典型应用为RS(255,239)及其截断码RS(204,188),后者即针对188个待校验数据进行编码,添加16个冗余数据,变成204个数据进行传输。纠错能力以牺牲编码效率(Rc=k/n)为代价。k固定时,要提高纠错能力,必然要增加冗余数据个数,那么算法复杂度增加,而且传输带宽要求更高。因此,纠错能力与信道容量要折中考虑。
2.2 FEC编码算法
RS(n,k)的编码原理如图3所示。
图3 RS编码流程
① 取一组数据:视频数据经过压缩及打包后是固定长度(188 字节)的字节数组。根据网络环境恶劣程度设定合适的n、k。例如,当平均误码率不高于4.25%(8 字节)时,采用RS(204,188)编码,编码时在188个数据前补充51个0,求出16个监督码元后将前51个数据丢弃;当平均误码率为4.25%~17.55%时,采用RS(255,189)编码,编码时为188个数据补充一个0,求出66个冗余数据,通过增加冗余度,提高纠错能力。
② 行信息多项式[6]:u(x)=c0+c1x+…+ck-1xk-1,c0,c1,…,ck-1表示k个字节信息在GF(2m)域的元素。在GF理论中,已证明单字节数据在GF(28)域中都有唯一的码字对应,即可表示成αi的形式,α称为GF(28)域的生成元。例如,该域对应的本原多项式为p(x)=x8+x4+x3+x2+1,根据p(x)可得GF(28)域上次数大于7的元素为:
于是,可得GF(28)域上元素如表2所列。
表2 GF(28)域上的256个元素
③ 校验多项式r(x):将行信息多项式u(x)乘以xn-k,目的是将u(x)的最高次幂提到(n-1)次。用u(x)xn-k去模生成多项式g(x),得到校验多项式r(x)。生成多项式:
2.3 FEC解码算法
RS码解码算法的基本思想是判断接收到的带有冗余码的元组是否有错,并根据冗余信息纠错,在纠错范围内恢复k字节的原始数据。设发送的码字为C(x),而接收到的码字为R(x),如果R(x)=C(x),则说明收到的码字正确,否则说明接收的码字出现错误。用公式表示为:R(x)=C(x)+E(x),其中E(x)称为误差多项式。
RS码的纠错解码如图4所示。步骤如下:
① 取一组数据。根据接收码组的长度判断n、k,然后添加若干0元素,构成255个接收数据。
② 判断是否有错。定义伴随多项式为:
1≤i≤2t,计算2t个部分伴随式Si。如果Si≠0,则表示有错误。
图4 RS解码流程
③ 检查是否在纠错范围内。当差错数不大于t时,表示可以纠正;否则,放弃纠错。
④ 求解差错定位多项式。伴随式满足以下关系:
其中yj为第j个错误的值,xj为第j个错误的位置。该式代表了一个非线性方程组,直接求解比较复杂,用BerlekampMassey[7]迭代算法从伴随式得到差错定位多项式δ(x)。δ(x)不能直接指出所收码字中哪一个符号产生了误差,但它是收到码字R(x)的误差位置的函数。
⑤ 用Chien搜索算法[8]计算差错定位多项式的根,其倒数为差错位置数。
⑥ 用Forney算法[9]计算每个差错位置处的差错大小。
⑦ 已知接收码字的差错位置和差错大小,利用V(x)=R(x)+E(x),求出正确的接收码字,成功实现t个错误以内的纠错。
2.4 接收端缓冲区机制的实现
虽然视频数据的传输速率在时间统计上相对恒定,但是瞬时值可能存在较大波动,若不附加任何限制而把接收到的数据直接进行纠错、解码和显示,则会导致图像不流畅或抖动。因此,必须设计某种机制尽量减少和避免这些问题。笔者在接收端的软件设计中创建了数据接收和解码两个线程,并创建了一个共享缓冲区。数据接收线程循环等待,将接收的数据写入环形缓冲区,并更新写指针,解码线程从该缓冲区读取数据,并更新读指针,然后进行FEC解码。由于两个线程可以同时操作缓冲区,二者之间存在直接制约关系,必须协调读写速度,使读指针不超过写指针。同时,结合实际网络状况和编码数据的码率设计环形缓冲区的大小,尽量缩短整个系统的时延并避免缓冲区的溢出问题。对缓冲区的处理过程如图5所示。
图5 接收端缓冲区的处理过程
3 实验结果与分析
本实验前端采集电视卡输出的音视频信号,经过该系统的处理,输出降低误码率的视频,每种测试情况都采用50 000个188数据包。图6的结果表示使用FEC编解码后针对出错的数据包的纠错率统计。
图6 FEC通信系统的实验数据统计
由图6数据可知,出错包间隔相同时:当误码率低于4%时,由于编码效率较高,而且误码率在纠错范围内,正确率很高;当误码接近17%时,虽然仍然在纠错范围内,但是由于冗余数据较多,时间复杂度增加,带宽受限等原因,纠错率稍有降低。每包出错率相同时,错包越频繁,纠错率越低,但还是提高了视频传输的质量。当误码率高于17.55%时,考虑到信道容量及运算速度等原因,将不再纠错。图7左侧表示不同测试条件下未使用FEC校验时的接收端电视节目画面,(a)~(c)测试环境逐渐恶劣;图7右侧表示使用FEC之后的画面。通过对比可见,FEC的纠错效果显著。总之,本系统可以纠正一组188码的33字节以内的错误,有效地降低了误码率。
图7 不同测试环境的实验结果对比图
图7 不同测试环境的实验结果对比图(续)
结语
本文在视频服务器DM6467T的硬件平台上,设计了基于差错控制编码的数据通信系统。根据网络环境恶劣条件,选择不同的RS编码长度,在Windows的VS接收端及时检测并纠正错误,从而实现在远距离通信环境下的自动纠错,提高了视频服务质量。