基于窗口的LSB编解码(共4页).doc
精选优质文档-倾情为你奉上基于窗口的LSB编码方案基本原理及其FPGA的实现1. LSB编解码基本原理ROHC头标压缩机制使用最低有效位LSB (Least Significant Bits)方案来对那些变化较少的分组头标域进行编码;这种编码方案使用尽量少的低比特位来表达原始值。在ROHC中,一般并不发送原始的头标域,而是传输域中较少的k(k>O)个LSB编码比特。当收到这k个比特时,解压方将参照在此之前收到的一个参考值来恢复编码前的原始值。为保证解码准确无误,LSB 编码、解码的取值区间必须保留原始值的信息,并保证在此区间上,原始值是唯一一个与这k个比特相对应的域值。根据这两个条件,该取值区间可以用如下函数表示: (P为整数)公式中的函数具有这样的特性:任意的k个LSB编码比特将在中唯一确定一个值。函数中引入参数P是为了使该取值区间可以针对域值的特点进行适当的平移,从而使编码方法更加有效。如对那些总是增长的域值,P可置为-l,这时取值区间为:。2. LSB压缩、解压缩基本过程应用于ROHC中的一个LSB压缩(解压缩)的过程如下:(1)选取参考值: 压缩方使用最新一个带CRC保护的待压缩值作为压缩参考值; 解压方使用最新一个解压正确并通过CRC验证的值作为解压参考值;(2)当压缩一个值v时,压缩方寻找使v落入编码取值区间中的最小的k值,定义这个过程为函数;(3)当收到m个LSB编码值时,解压方从解码取值区间中挑选这样的值作为解压值:其LSB编码和收到的m个LSB编码相吻合。3. 基于窗口的LSB编码基于窗口的LSB编码(WLSB)是一种支持TCP协议ROHC 编码方案,它利用差值来进行编码。使用TCP拥塞控制来确定哪个分组已经被收到。基于窗口的LSB编码可以获得更大的鲁棒性。由于解压方总是使用收到的最新一个通过CRC校验的值作为参考值,压缩方便可维持一个滑动窗,这个滑动窗包含了候选的值,初始化为空。以下是压缩方对这个滑动窗的操作:(1)发送一个带有CRC保护的v值(压缩或未被压缩)后,压缩方把此值加入滑动窗中。(2)对每个待压缩的v值,压缩方按下式选择LSB编码比特数k:k = max(,)其中和是滑动窗中的最小值和最大值。(3)当压缩方确信某个v值以及比这个v更早的任何值,再也不会被解压方作为解压参考值时,压缩方就把这些值(包括v)从窗中移除。4.WLSB压缩算法的FPGA实现分析WLSB压缩算法可知,该算法的实现主要要用到以下几个函数,其函数名和及其实现的功能如下表所示:函数功能struct c_wlsb *c_create_wlsb()创建WLSB压缩算法的对象void c_destroy_wlsb()销毁所创建的WLSB压缩算法对象void c_add_wlsb()为所创建的对象的变量赋值void f()计算保留原始值信息的编解码取值区间int g()计算使待压缩数据v在上述区间的k的最小取值int c_get_k_wlsb()计算窗基算法时的上述k值void c_ack_sn_wlsb()查找SN所标记的窗入口windowivoid c_ack_time_wlsb()查找time所标记的窗入口windowjvoid c_ack_remove() 删除标记窗入口以及之前的所有窗入口int c_sum_wlsb()计算当前窗口中所有value的总和int c_mean_wlsb()计算当前窗口中所有value的平均值void print_wlsb_stats()打印当前WLSB压缩算法的对象的某些变量的值考虑到FPGA不适宜做乘方运算,实际中,可以用下式来计算k的值:k=max(length(v),length(v)其中为异或运算符,Length 为取二进制编码长度值函数。通过对WLSB压缩和解压缩算法和每个函数的分析,我们知道,可以采用如下的逻辑示意图来实现: 参考值滑动窗模块实现上述c_add_wlsb(),c_ack_sn_wlsb()和c_ack_remove()函数的功能,在该模块中可以定义一个存储空间windown,用于存所有可能的参考值,当解压缩算法采用如下所示的逻辑示意图来实现: 使用FPGA来实现WLSB压缩和解压缩算法时,其各个模块的示意图如下所示: 其中,参考值滑动窗模块用于接收待编码的数据流V和参考值,窗处理模块用于窗的管理,包括计算k值,计算编解码区间,判断V值是否属于编解码区间,是则将计算出输出编码值交给发送模块发送,否则更新重新计算。解压模块根据从发送模块接收到的数据解压出原始的V的值。专心-专注-专业