基于Huffman编码的GPS定位数据无损压缩算法
目录
一、引言
二、霍夫曼编码
三、经典Huffman编码
四、适应性Huffman编码
五、GPS定位数据压缩
提示:文末附定位数据压缩工具和源码
一、引言
车载监控系统中,车载终端需要获取GPS信号(经度、纬 度、速度、方向等)实时上传至监控中心,监控中心按通信协议将收到的定位信息进行本地存储,便于实时监控以及历史轨迹回放。在对车队进行监控管理过程中,多辆车同时向监控中心传输GPS文件,在数据量大的情况下,对数据进行有效地压缩,降低信息冗余,降低通信费用,减少对传输信道的占用是在数据传输过程中需要解决的关键问题。
本文针对GPS数据格式的特点,在数据预处理的基础上,提出了采用Huffman编码的方法对GPS定位数据进行压缩。该算法与目前现有的GPS定位数据压缩算法比较,程序量小,压缩比大,且易于实现。对解决车载GPS系统中数据量大而存储器资源有限的问题,以及数据传输的瓶颈问题具有重要的实际意义。
二、霍夫曼编码
霍夫曼在1952年提出了霍夫曼编码,又称Huffman编码。这种编码因为最接近压缩比上限的编码方法,被称作最优编码。Huffman编码是无损压缩的编码,压缩后的文件重新解码后与源文件数据保持一致,这也是Huffman编码优于其他编码中最突出的地方。根据编码方式的不同,可分为经典(静态)Huffman编码和适应性(动态)Huffman编码。
三、经典Huffman编码
经典的Huffman编码通过构造一棵用来编码和解码的Huffman树来对待处理数据进行编码。构造huffman树的首要前提是是获得每个字符的频率。然后根据字符出现的频率,构造Huffman树。首先可以将字符的频率作为节点的值。然后将所有结点排列成队列,从中选出值最小的两个结点,然后构造出一个父亲结点,使得父亲结点的值是两个孩子结点的值之和,然后将两个孩子结点出队,再将父亲结点入队,进入下一轮循环。原理图如下图所示。
![]()
由上图所示,我们获得6个字符的频次,并将它们构造成结点队列。从队列中频次最小的两个结点挑选出来,构造成一棵树。将这颗树的父亲结点入队,再从中挑选出频次最小的两个结点,依次递归,直到队列中只剩下一个根节点为止。这个时候我们就获得了Huffman编解码树。
获得Huffman编码树之后,我们便可以对每个字符进行重新编码,对于每个到达叶子结点所经过的路径中,如果它是一棵左子树,那么它的编码为0,如果它是一棵右子树,那么它的编码为1。我们假设编码前字符用三位二进制表示,编码后字符新的编码方式如下表所示。
字符
频次
编码前
编码后
A
3
001
001
B
1
010
00000
C
5
011
01
D
6
100
1
E
2
101
0001
F
1
110
00001
由上表可知,编码前该数据的比特数为(3+1+5+6+2+1)*3=54位。编码后该数据的比特位数为3*3+1*5+5*2+6*1+2*4+1*5=43位。压缩率为79.6%。随着数据量的增大,频次的逐渐提高,压缩率将进一步提升。
但在实际生成文件过程中,由于也要将Huffman编码表保存在文件的头部,增加了文件的信息冗余,实际的压缩率要比计算出的压缩率要大一些。
四、适应性Huffman编码
由于文件头部信息等冗余信息的存在,Huffman编码的压缩仍存在可提升空间。因此减少文件头部携带的信息,可以提高编码率。要减少文件头部的信息,就需要找到一种方式,使得编码和解码按照同样的机制运行,可以获得完全相同的Huffman树,不受文件编码的影响。
查阅论文发现,Jeffery在1987年提出了一种自适应的Huffman编码方法,可以使得编码器和解码器在传输时构造代码,动态的收集和更新字符的概率,动态的更新Huffman树。这样的好处是不需要文件头部的信息,编码器和解码器文件编解码过程中实时生成Huffman树。具体原理如下。
首先我们对待处理的数据的字符列表的权值赋值为1,构造一棵初始的Huffman树;从文件中获得第一个字符,将字符根据当前的Huffman编码写入到文件中,通过将对应字符的权值加1,更新Huffman树。 自适应Huffman编码的原理图如下图所示。
由上图所示,左边第一颗Huffman树是初始构造的Huffman树,所有的叶子结点权值为1;此时A的编码为00000;当从文件中获得一个新的字符时,Huffman树的权值发生更新,获得中间的二叉树,这颗二叉树已经不满足兄弟性质,因为A的叶子结点和B的叶子结点在重新排序过程中将不相邻,因此需要将该二叉树重新调整为一棵新的二叉树,即右边新得到的Huffman树,此时A的编码变为1。
自适应Huffman编码相比于经典的Huffman编码不需要文件头部统计各个字符的词频,只需要依据自适应策略不断的动态调整Huffman树,可以减少文件头部的信息冗余。但如果在压缩过程中或文件保存过程中出现损坏,得到的文件将无法还原为原来的数据。
五、GPS定位数据压缩
1、CSV格式的定位数据如下图

2、对定位数据预处理,缩减字符数量

3、精简后的字符串如下图,压缩率为40%左右

4、构建自适应Haffman树进行二次压缩
通过构建自适应Haffman树进行二次压缩,压缩率可达15%左右。
5、压缩结果演示
a)将源csv文件复制到该目录下
b)运行脚本文件start.bat
c)输入1并回车,执行压缩操作,生成compress.txt压缩文件

6、解压缩结果演示
a)删除源csv文件
b)运行脚本文件start.bat
c)输入2并回车,执行解压缩操作,生成decompress.csv解压缩文件

相关文章:
基于Huffman编码的GPS定位数据无损压缩算法
目录 一、引言 二、霍夫曼编码 三、经典Huffman编码 四、适应性Huffman编码 五、GPS定位数据压缩 提示:文末附定位数据压缩工具和源码 一、引言 车载监控系统中,车载终端需要获取GPS信号(经度、纬 度、速度、方向等)实时上传…...
php:完整部署Grid++Report到php项目,并实现模板打印
一、下载Grid++Report软件 路径:开发者安装包下载 - 锐浪报表工具 二、 安装软件 1、对下载的压缩包运行内部的exe文件 2、选择语言 3、 完成安装引导 下一步即可 4、接收许可协议 点击“我接受” 5、选择安装路径 “浏览”选择安装路径,点击"安装" 6、完成…...
C标签和 EL表达式的在前端界面的应用
目录 前言 常用的c标签有: for循环 1 表示 普通的for循环的 2 常在集合中使用 表示 选择关系 1 简单的表示如果 2 表示如果。。否则。。 EL表达式 格式 : ${属性名/对象/ 集合} 前言 本篇博客介绍 c标签和el表达式的使用 使用C标签 要引入 …...
Linux絮絮叨(四) 系统目录结构
Linux 系统的目录结构(Filesystem Hierarchy Standard, FHS)定义了 Linux 系统中文件系统的标准布局,以下是一些常见目录的功能: 根目录 / 描述:所有文件和目录的起始点,Linux 文件系统的根。内容…...
Java基于SpringBoot的网上订餐系统,附源码
博主介绍:✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&…...
《Java核心技术I》死锁
死锁 账户1:200元账户2: 300元线程1:从账号1转300到账户2线程2:从账户2转400到账户1 如上,线程1和线程2显然都被阻塞,两个账户的余额都不足以转账,两个线程都无法执行下去。 有可能会因为每一个线程要等…...
【Windows11系统局域网共享文件数据】
【Windows11系统局域网共享文件数据】 1. 引言1. 规划网络2. 获取必要的硬件3. 设置网络4. 配置网络设备5. 测试网络连接6. 安全性和维护7. 扩展和优化 2. 准备工作2.1: 启用网络发现和文件共享2.2: 设置共享文件夹 3. 访问共享文件夹4. 小贴士5. 总结 1. 引言 随着家庭和小型办…...
MCU、ARM体系结构,单片机基础,单片机操作
计算机基础 计算机的组成 输入设备、输出设备、存储器、运算器、控制器 输入设备:将其他信号转换为计算机可以识别的信号(电信号)。输出设备:将电信号(0、1)转为人或其他设备能理解的…...
在办公室环境中用HMD替代传统显示器的优势
VR头戴式显示器(HMD)是进入虚拟现实环境的一把钥匙,拥有HMD的您将能够在虚拟现实世界中尽情探索未知领域,正如如今的互联网一样,虚拟现实环境能够为您提供现实中无法实现的或不可能实现的事。随着技术的不断进步&#…...
ssm 多数据源 注解版本
application.xml 配置如下 <!-- 使用 DruidDataSource 数据源 --><bean id"primaryDataSource" class"com.alibaba.druid.pool.DruidDataSource" init-method"init" destroy-method"close"></bean> <!-- 使用 数…...
selenium常见接口函数使用
博客主页:花果山~程序猿-CSDN博客 文章分栏:测试_花果山~程序猿的博客-CSDN博客 关注我一起学习,一起进步,一起探索编程的无限可能吧!让我们一起努力,一起成长! 目录 1. 查找 查找方式 css_s…...
STM32F103单片机使用STM32CubeMX新建IAR工程步骤
打开STM32CubeMX软件,选择File 选择新建工程 在打开的窗口输入单片机型号 在右下角选择单片机型号,然后点右上角 start project,开始新建工程。 接下来设置调试接口,在左边System Core中选择 SYS,然后在右右边debu…...
刷题重开:找出字符串中第一个匹配项的下标——解题思路记录
问题描述: 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。 示例 1: 输入&…...
product/admin/list?page=0size=10field=jancodevalue=4562249292272
文章目录 1、ProductController2、AdminCommonService3、ProductApiService4、ProductCommonService5、ProductSqlService https://api.crossbiog.com/product/admin/list?page0&size10&fieldjancode&value45622492922721、ProductController GetMapping("ad…...
人工智能机器学习无监督学习概念及应用详解
无监督学习:深入解析 引言 在人工智能和机器学习的领域中,无监督学习(Unsupervised Learning)是一种重要的学习范式。与监督学习不同,无监督学习不依赖于标签数据,而是通过模型从无标签的数据中学习数据的…...
APM装机教程(五):测绘无人船
文章目录 前言一、元生惯导RTK使用二、元厚HXF260测深仪使用三、云卓H2pro遥控器四、海康威视摄像头 前言 船体:超维USV-M1000 飞控:pix6c mini 测深仪:元厚HXF160 RTK:元生惯导RTK 遥控器:云卓H12pro 摄像头…...
微信小程序 运行出错 弹出提示框(获取token失败,请重试 或者 请求失败)
原因是:需要登陆微信公众平台在开发管理 中设置 相应的 服务器域名 中的 request合法域名 // index.jsPage({data: {products:[],cardLayout: grid, // 默认卡片布局为网格模式isGrid: true, // 默认为网格布局page: 0, // 当前页码size: 10, // 每页大小hasMore…...
IDEA的service窗口中启动类是灰色且容易消失
大家在学习Spring Cloud的过程中,随着项目的深入,会分出很多个微服务,当我们的服务数量大于等于三个的时候,IDEA会给我们的服务整理起来,类似于这样 但是当我们的微服务数量达到5个以上的时候,再启动服务的时候,服务的启动类就会变成灰色,而且还容易丢失 解决方法 我们按住…...
R中利用ggplot2绘制气泡图
闲来无事,整理了一下自己的绘图笔记,顺便分享到CSDN上。 一、介绍 气泡图(Bubble Plot)是一种常用的数据可视化方法,用于展示三个变量之间的关系。气泡图的特点是通过气泡的大小、颜色和位置来表达数据中的多维信息。…...
CID引流电商
ClickID技术是基于多家媒体平台开发的电商引流服务,通过媒体提供的宏参数,间接解决电商平台订单数据的回传问题,帮助账户收集到极致精准的数据模型,搭建不同媒体往各平台引流的桥梁。简单来说就是通过ClickID数据监测到另外一个平…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

