用于北斗发送通用航空器经纬位置数据的多模型压缩方法技术领域
本发明涉及信息与信号处理领域的一种方法,具体是一种用于北斗设备批
量发送通用航空器经纬位置和高度数据的多模型压缩和解压方法。
背景技术
伴随着国家对航空工业大力支持,国家、民间对通用航空应用的迫切需求,
通用航空市场蓬勃发展。然而对于通用航空器的用户和管理来说的定位和跟踪
通用航空器是极其重要的,而我国自主研发的北斗系统非常适合进行通用航空
器的定位和跟踪。但第一代民用北斗设备发送信息的间隔较长,且每次送数据
的数量有限,因此使用民用北斗设备发送通用航空器经纬度信息急需相应的压
缩算法,这是实现实时连续跟踪的必要条件。
北斗系统是我国自主研发的定位和通信系统,它不但可以进行定位,同时
其通信功能可以允许用户发送数据。对于普通民用用户来说,每次发送信息的
间隔至少为一分钟,且每次至多发送约两百个字节的数据。使用北斗的数据传
输功能传输通用航空器的经纬度位置信息,可以实现对通用航空器的跟踪和监
控,若用浮点数格式发送经纬度信息,每个浮点数由四个字节构成,一个经度
或纬度或高度信息可由一个浮点数表示,因此一组位置和高度信息由12个字节
构成,民用北斗一次发送的数据量为210字节,因此只能发送约17组数据,航
空器经纬度位置的时间分辨率约为3秒,基本能满足监控的需求。
但是,通用航空器在使用北斗发送经纬位置和高度的同时也会发送文字短
消息与地面通信,通常每次50个汉字(100个字节)左右的短消息基本能满足
用户的需求,若能够在发送经纬度的同时也发送短消息,那么,每次只能发送9
组经纬位置和高度数据,则经纬位置和高度数据的时间分辨率为7秒,这个间
隔对于监控高速飞行的通用航空器来说,是不能满足需求的。文字信息是很难
压缩的,因此只能对经纬位置和高度数据进行压缩,以保证每次发送经纬度位
置和高度的同时仍能够正常发送50个汉字的信息。
经对现有技术的检索发现,专利《用于批量发送通用航空器经纬位置数据
的压缩方法》,申请号/专利号:201210102422.0,该方法使用了预测编码和霍
夫曼编码技术进行压缩,但是在预测编码过程中仅使用单一模型,在某些情况
下压缩效率低,为此,本发明使用基于不同模型的预测编码,以进一步提高压
缩效率。
发明内容
针对上述现有技术存在的问题,本发明的目的在于提供一种用于北斗设备
发送通用航空器经纬位置的多模型压缩和解压方法。本发明是基于多个模型的
预测编码和霍夫曼编码相结合的数据压缩和解压方法,该方法能够用于北斗设
备批量发送通用航空器经纬位置和高度时的数据压缩。
本发明的发明目的是通过以下技术方案实现的,包括如下步骤:
步骤一,根据实际情况确定经纬度和高度数据的精度,并根据确定的精度
要求对数据进行截断处理;
步骤二,基于不同的假设模型对步骤一中经过截断处理的数据分别进行预
测编码;
步骤三,对步骤二中得到的多组预测编码数据分别进行霍夫曼编码;
步骤四,对步骤三中得到的多组霍夫曼编码分别生成压缩数据的数据头和
压缩数据体,并比较每组数据头和数据体所占用的字节数,选择字节数最小的
作为最终的压缩结果;
步骤五,数据的解压缩。
步骤一中的截断操作是一个截尾操作,例如,若要求经纬度精度为小数点
后5位,那么第6位和第6位以后的数据全部舍弃,高度的精度若为米,那么
米级以后的数据全部舍弃。
步骤二中的预测编码是一种编码技术,它基于离散信号间相关性,利用前
面一个或多个信号预测下一个信号,然后对实际值和预测值的差(误差)进行
编码。若信号间的相关性较强,且采取的预测方法得当,那么预测误差会比较
小,就可以用比较少的比特进行编码,进而达到数据压缩的目的。步骤二中的
预测编码采用了不同的假设模型进行预测编码,所采用的假设模型有一阶差分
模型和二阶差分模型。
步骤三中的霍夫曼编码是一种编码技术,它是由Huffman与1952年提出的,
它的基本原理是基于定理“在变长编码中,如果码字长度严格按照出现概率由
大到小的顺序排列,则平均码字长度最小”。
步骤三中的数据头是用于记录压缩编码关键信息的数据块,这些信息包括
霍夫曼编码的码字,初始经纬、高度和其他一些状态信息等,这些是解码时所
必须的。
与现有技术相比,本发明具有以下有益效果:本方法根据通用航空飞行器
的性能特点和其发送的经纬度和高度信息的特点进行压缩,无需人工干预,完
全自动完成,压缩效率高。可以保证在批量传输高时间分辨率的经纬、高度数
据的同时还能够发送文字信息。或者在不发送文字信息时,传送更高时间分辨
率的数据经纬、高度数据,以便实现对航空器的精确的监控。
附图说明
图1为某型号直升机飞行时记录的一组经纬度和高度数据。表中经纬度单
位为度,高度单位为米,数据采样间隔为8秒
图2为描述经纬、高度数据的不同模型组合图
图3对图1中的数据进行步骤一中的截断操作后,再进一阶差分后的结果
图4对图1中的数据进行步骤一中的截断操作后,再进二阶差分后的结果
图5对图4中的数据进行出现频率统计得到的结果
图6为本发明实施例中霍夫曼编码的初始叶子节点
图7为本发明实施例中霍夫曼编码第一次和第二次合并的情况
图8为本发明实施例中得到的霍夫曼树
图9为数据头、数据体和文字信息间的排列关系图。
具体实施方式
下面结合附图对本发明作进一步的详细说明:本实施例在以本发明技术方
案为前提下进行实施,给出了详细的实施方式和具体的操作过程,但本发明的
保护范围不限于下述的实施例。
实施例
步骤一,根据实际情况确定经纬度和高度数据的精度,并根据确定的精度
要求对数据进行截断处理;
设数据为浮点数,精度为小数点后M位,则从小数点后第M+1位(包括M+1
位)全部舍去,截断后对数据放大10M倍后转换成整数。设本例中使用的数据如
图1所示,其中经纬和高度数据分别用jk,wk,hk表示。本实施例中经纬度精
度为小数点后5位,高度精度为米级,那么对于经纬、高度数据中小数点后第6
位(包括第6位)以后的数据可以认为是不需要的或者不准确的,进行舍弃。
截断后将经度、纬度和高度数据扩大105倍后将数据转换为四字节表示的整数,
转换后的经纬和高度数据分别用Jk,Wk,Hk。
步骤二,基于不同的假设模型对步骤一中经过截断处理的数据分别进行预
测编码;
若飞机进行匀速直线运动,使用一阶差分模型描述此时飞机的经纬、高度数
据将会得到比较好压缩性能;若飞机进行匀加速运动,使用二阶差分模型描述
此时飞机的经纬、高度数据将会得到比较好压缩性能。因此,尝试对经纬、高
度数据分别采用不同的模型进行描述,然后再进行压缩,就可以进一步提高压
缩效率。这里只采用一阶差分模型和二阶差分模型两种模型,所以对经纬、高
度数据的模型描述可以有8种组合,如图1所示。依次尝试这8种组合,选取
最佳的模型组合就可以得到最佳的压缩效率。
设步骤一中经过截断处理的经度数据序列、纬度序列和高度序列分别为Jk,
Wk,Hk(k=1,2,3,…,N,其中N为序列长度)。记Jk,Wk,Hk的一阶差分分
别为
Jl′=Ji-Ji-1,
Wl′=Wi-Wi-1,(1)
Hl′=Hi-Hi-1
其中l=1,2,…,N-1,i=2,3,…,N。记Jk,Wk,Hk的二阶差分为
Jm″=Ji′-Ji-1′,
Wm″=Wi′-Wi-1′,(2)
Hm″=Hi′-Hi-1′,
其中m=1,2,…,N-2,i=2,3,…,N-1。
对图1中的数据进行步骤一中的截断操作后,然后经由公式(1)和公式(2)
所得到的一阶差分和二阶差分如图3和图4所示。
步骤三,对步骤二中的多组预测编码数据进行霍夫曼编码
步骤二中的数据共有8组,分别对应图2中的8种组合。分别对这8组数
据进行霍夫曼编码。这里以图2最后一组,即图4中所示的数据为例进行说明。
图2最后一组组合对应序列Jm″,Wm″,Hm″(m=1,2,…,N-2),将其组合成一
个序列dk(k=1,2,…,3N-6),其中
dk=Jk″(k=1,2,…,N-2)
dk=Wk″(k=N-1,N,…,2N-4) (3)
dk=Hk″(k=2N-3,2N-2,…,3N-6)
然后对序列dk(k=1,2,…,3N-6)进行霍夫曼编码。具体方法是:
1.统计序列dk中每个数值出现的频率(即出现的次数)。记dk中共有M个不
同的值,这M个值按其值由小到大的顺序排列得到的序列为Rs(s=1,2,…,M),
Rs是一个二维序列包括数值和对应数值出现的频率,记Rs(1)为数值,Rs(2)
为数值出现的频率。本实施例中对图2中的数据进行处理得到的序列按值由小
到大排列的得到的序列Rs如图6所示。记这M个值按出现频率由小到大排列的
序列为Ds(s=1,2,…,M),Ds也是一个二维序列包括数值和对应数值出现的频
率每个数值和该数值对应的频率,Ds的每一个单元作为一个叶子节点,这些叶
子节点为霍夫曼编码的初始叶子节点,本实施例中霍夫曼编码的初始叶子节点
如图6所示。
2.叶子节点中两个最小频率的节点合并为一个新节点,并将频率相加作为
新节点的频率,并将该节点和其他节点一起新按照出现频率由大到小的顺序进
行排列。合并时频率较高的节点作为右节点,频率较低的节点为左节点。图7
给出了第一次和第二次合并的情况。
3.重复步骤2直到只剩下一个节点,作为根节点。最终获得的霍夫曼树如图
8所示。经过上述步骤后得到一个霍夫曼树,记录叶子节点到根节点的路径,该
路径上的左子树赋值“0”,右子树赋值“1”,按照由低位到高位的顺序排列,
就是叶子节点所对应数值的霍夫曼编码的码字。例如,值-3的码字为0101;值
-2的码字为00;值-1的码字为100;值0的码字为11;值1的码字为101;值
2的码字为011;值3的码字为01001;值6的码字为01000;
最后,根据霍夫曼编码的码字将序列dk转换为霍夫曼编码。对图1所示的8
组数据分别进行霍夫曼编码,于是可以得到8组霍夫曼编码。
步骤四,生成压缩数据的数据头和压缩数据体;
下面以图2中第7组数据所得到的的霍夫曼编码为例,介绍如何生成数据
头。
数据头的前10位二进制位记为h0用于存储一个整数,该整数表示文字信息
的起始位置。
接着h0的是h1,h1的前24个二进制位顺序存储两个12位二进制位标表示
的整数,第一个整数为序列dk中最小值dmin,第二个整数为序列dk中最大值
dmax,在第二个整数后的是(dmax-dmin)个二进制位,记为U,U的第i位记为
Ui。当且仅当a是序列dk中的一个值时,所以,U中1的个数等于
霍夫曼编码码字的个数。
紧接着h1的是霍夫曼编码的码字信息,这一段数据头记为h2。设h1中的U
中的1的个数为Hlen,码字的个数等于Hlen。一个码字信息包括码字长度和码字
两部分,码字长度由N位二进制位表示的正整数表示,其中N为满足2N≥Hlen的
最小整数,码字即为霍夫曼编码得到的码字。码字信息的排列的顺序按照码字
对应的数值由小到大排列。
接着h2的是h3,h3的前3位二进制二进制位分别表示描述经度数据、纬度
数据和高度数据所使用的模型,0为一阶差分模型,1为二阶差分模型。h3的其
他二进制位存储的信息由h3的前3位决定:
若h3前三位为000则h3其他二进制位存顺序存储J1,W1,H1。
若h3前三位为001则h3其他二进制位存顺序存储J1,W1,H1,H1′。
若h3前三位为010则h3其他二进制位存顺序存储J1,W1,H1,W1′。
若h3前三位为011则h3其他二进制位存顺序存储J1,W1,H1,W1′,H1′。
若h3前三位为100则h3其他二进制位存顺序存储J1,W1,H1,J1′。
若h3前三位为101则h3其他二进制位存顺序存储J1,W1,H1,J1′,H1′。
若h3前三位为110则h3其他二进制位存顺序存储J1,W1,H1,J1′,W1′。
若h3前三位为111则h3其他二进制位存顺序存储J1,W1,H1,J1′,W1′,
H1′。
本例中h3前三位为110,h3其他二进制位存顺序存储J1,W1,H1,J1′,W1′
接着h3的是数据体,数据体存储序霍夫曼编码。数据体后是文字消息。数
据头和数据体的排列关系如图9所示。
对步骤四中生成的8组霍夫曼编码分别生成数据头,分别比较每组霍夫曼
编码和其对应的数据头的长度之和,选择最短的作为最终的压缩结果。在本例
中,图2中第7组模型组合所对应的霍夫曼编码和数据头长度之和最小,是最
终压缩结果。
步骤五,数据的解压缩。
从接收的数据读取h0,根据h0的数值读取文字信息,从而完成解码文字信
息。然后解码经纬、高度数据。读取h1中的前两个12位二进制位标表示的整数,
这两个整数分别为最小值dmin,和最大值dmax,h1中的U共有(dmax-dmin)个
二进制位,记U中的二进制位为1的数目为Hlen,则Hlen为霍夫曼码字的个数。
扫描数据头中的h1的U,若发现U第i位为1,则从h2中顺序读取N位二进制位
表示的正整数Ni,其中N为满足2N≥Hlen的最小整数,正整数Ni的数值为该条
码字的长度,读取Ni个二进制位从而得到该条码字。该码字对应的数值为
(dmin+i),重复该步骤直到扫描结束,此时就得到了霍夫曼编码的码字和码字
对应的数值。
读取h3,根据h3的前三位二进制位,分别读取h3其他二进制位,得到J1,W1,
H1或J1′或W1′或H1′的数值。根据h3的前三位二进制位分别得到J1,W1,H1或J1′
或W1′或H1′的数值所候采用的方法是:
若h3前三位为000则h3其他二进制位存顺序存储J1,W1,H1。
若h3前三位为001则h3其他二进制位存顺序存储J1,W1,H1,H1′。
若h3前三位为010则h3其他二进制位存顺序存储J1,W1,H1,W1′。
若h3前三位为011则h3其他二进制位存顺序存储J1,W1,H1,W1′,H1′。
若h3前三位为100则h3其他二进制位存顺序存储J1,W1,H1,J1′。
若h3前三位为101则h3其他二进制位存顺序存储J1,W1,H1,J1′,H1′。
若h3前三位为110则h3其他二进制位存顺序存储J1,W1,H1,J1′,W1′。
若h3前三位为111则h3其他二进制位存顺序存储J1,W1,H1,J1′,W1′,
H1′。
本例中h3前三位为110,h3其他二进制位存顺序存储J1,W1,H1,J1′,W1′。
使用得到的码字对数据体进行解码,即将数据体中的编码序列按照编码码
字对应的数值转换为数值序列,此时得到的数值即为序列dk(k=1,2,…,3N-6),
根据(3)式将dk分别转换为序列J1′或W1′或H1′或Jm″或Wm″或Hm″
(m=1,2,…,N-2)。本例中dk分别转换为序列Jm″,Wm″,H1′。然后根据式(1)
和(2)就可以得到经度数据序列、纬度序列和高度序列jk,wk,hk。(注意:
由于在步骤一中将数据截断后放大了105倍,因此所得jk,wk,hk也要相应缩小
105倍)
本实施例中对图1给出的数据进行压缩,数据头中h0的长度为10位二进制
位(bit),数据头中h1长度为24+9=33个二进制位(bit),h2的长度共计55个
二进制位(bit),h3存储J1,W1,H1,J1′,W1′,其中J1,W1,H1,J1′,W1′,
为四字节整数,共160位(bit)。本实施例中压缩后的数据体长度为216位(bit),
所以加上数据头总共需要474位(bit),约合60个字节(byte)就可以表示图
1中的数据。而北斗一次传输数据可达210个字节,还剩余150个字节,除去需
要传送的50个汉字(约100字节)的文字信息外,还剩余50个字节可供进行校
验或者其它用途。
而若采用四字节浮点数发送图1中的数据则需要360个字节,这远远超出
了北斗一次数据发送的最大限度,无法在发送经纬、高度数据的同时发送文字
信息,更不用说进行校验了。这说明本发明具有良好的压缩效果和并具有较强
的实用性。