熵编码:算术编码

article/2025/9/30 10:29:30

算术编码不是简单的将每个信源符号映射成一个码字,而是对整个输入序列分配一个码字,所以平均意义上可以为每个信源符号分配长度小于1的码字。

算术编码操作简单,下面以一个实例讲解算术编码的原理:

设信源有a,b,c,d四种符号,概率分别为0.2,0.2,0.4,0.2,输入序列"abccd"。

符号abcd
概率0.20.20.40.2
初始区间[0,0.2)[0.2,0.4)[0.4,0.8)[0.8,1)
  1. 第一个被压缩的符号为“a”,其初始间隔为[0, 0.2);

  2. 第二个被压缩的符号为“b”,由于前面的符号“a”的取值区间被限制在[0, 0.2)范围内,所以“b”的取值范围应在前一符号间隔[0, 0.2)的[0.2, 0.4)子区间内, 所以“b”的实际编码区间在[0.04, 0.08)之间。

  3. 第三个被压缩的符号为“c”,其编码取值范围应在[0.04, 0.08)区间的[0.4, 0.8)的子区间内,所以“c”的实际编码区间在[0.056, 0.072)之间。

  4. 第四个被压缩的符号为“c”,其编码取值范围应在[0.056, 0.072)区间的[0.4, 0.8)的子区间内,所以“c”的实际编码区间在[0.0624, 0.0688)之间。

  5. 第五个被压缩的符号为“d”,其编码取值范围应在[0.0624, 0.0688)区间的[0.8, 1)的子区间内,所以“c”的实际编码区间在[0.06752, 0.0688)之间。

  6. 至此,数据序列“abccd”已被描述为一个实数区间[0.06752, 0.0688),或者说在此区间内的任一实数值都唯一对应该数据序列。这样,就可以用该区间内的任意实数表示整个符号序列,如0.0688就可以用来表示整个符号序列。

整个过程如下图所示:

解码过程如下:

译码判决译码区间译码符号
0.0688在[0,0.2)内[0,0.2)a
0.0688在[0,0.2)的第4个1/10区间内[0.04,0.08)b
0.0688在[0.04,0.08)的第7个1/10区间内[0.056,0.072)c
0.0688在[0.056,0.072)的第7个1/10区间内[0.0624,0.0688)c
0.0688在[0.0624,0.0688)的第10个1/10区间内[0.06752,0.0688)d

上面的例子假定编码器和解码器都知道消息的长度,所以解码过程不会无限进行下去。

算术编码存在以下几个问题:

  • 实际的计算机精度不可能无限长,所以会出现溢出。这个问题可以通过比例缩放实现。

  • 编码产生的码字是[0,1)间的一个实数,解码端必须收到实数的所有位后才能进行解码。

  • 算术编码对错误敏感,如果有一位错误则整个消息都错误。

感兴趣的请关注微信公众号Video Coding

 


http://chatgpt.dhexx.cn/article/Sb6n43Ak.shtml

相关文章

GitLab-CI基础使用总结

思路梳理 下图是GitLab-ci的实现结构图: (实际结构会有出入,画成这样只是便于理解) GitLab:是一个基于 Git 的代码托管平台,提供了代码仓库管理、问题跟踪、CI/CD 等功能。它可以用于团队协作开发、版本控制、代码审查等场景。GitLab-runne…

Git --- Git Gui

目录 1. 创建和删除分支(了解即可) 2. Git Gui 3. 什么是ssh key 4. git/gitee生成密钥并通过 第一步:本地电脑配置 第二步:远程gitee仓库配置 第三步:修改你本地的ssh remote url. 不用https协议,改用git 协议 第四步&#x…

git与gerrit基础概念

序 本文记录了 git 与 gerrit 学习所得 重点关注于当前所用到的实际操作部分,其余理论部分以及更复杂用法留待将来用到时继续补充 1 Git 与 Gerrit Git 是当前全世界流行的分布式版本控制工具,但是只适用于纯文本文件,包括markdown、网页、…

Git入门|Git的基本用法(一)

1. Git的安装 首先在安装之前确认一下系统有没有安装Git。在Terminal中输入: git --version若确认系统没有安装git,可通过以下指南安装: Getting Started - Installing Git 2. 创建本地Git库 每次进行新项目时,都需要创建一个…

Gitlab-CI入门配置

Gitlab-CI使用及.gitlab-ci.yml配置 Gitlab-CI/CD 持续集成测试篇 Gitlab-CI/CD使用场景在这里插入代码片 首先,公司使用Gitlab作为工作仓库进行代码发布及版本控制,Gitlab内置了CI/CD的工具,这些工具可以用于代码提交的同时完成镜像构建、…

Gitlab CI/CD:入门指南

功能概览 CI/CD工作流 上图是基本的CI/CD工作流,与之对应的,gitlab几乎提供了上述流程节点所需的所有相关功能: 阶段功能 1. Verify 通过持续集成自动构建和测试你的应用程序 使用GitLab代码质量(GitLab Code Quality&#xff09…

GitLab-CI 基础介绍

转载自 kubeclub GitLab-CI 工作原理 将代码托管到 git 仓库在项目的根目录下创建 .gitlab-ci.yml 文件,在文件中包含了构建、测试以及部署等脚本,这些脚本被分组为 stage,共同组成了 pipelineGitLab 检测到 ci.yml 文件,使用 G…

GitLab CI Pipeline

GitLab 不单单只是作为一个代码版本控制的仓库,很多场景下使用 GitLab 作为整合 CI 持续集成就 CD 持续发布的工作平台,那么就是 GitLab 的 CI Pipeline 功能了。 CI Pipeline 试想一下,如果开发人员只需要编写代码,而编译、打包…

CICD之 gitlab和gtilab runner

gitlab官网地址 官网文档地址 https://docs.gitlab.com/runner/install/docker.html 一。gitlab 1。gitlab安装 方式一:rpm包安装(centos)1,下载rpm包清华源软件镜像站https://mirrors.tuna.tsinghua.edu.cn/linux命令wget https://mirror…

gitlab-CI入门

gitlab-CI 代码管理自动化部署及消息推送 (1) 通过在项目根目录下配置**.gitlab-ci.yml**文件,可以控制ci流程的不同阶段,gitlab平台会扫描.gitlab-ci.yml文件,并据此处理ci流程。 (2) ci流程在每次团队成员push/merge后之后触发。每当你pu…

Gerrit介绍

谷歌 Android 开源项目在 Git 的使用上有两个重要的创新,一个是为多版本库协同而引入的 repo,这在之前我们已经详细讨论过。另外一个重要的创新就是 Gerrit —— 代码审核服务器。Gerrit 为 Git 引入的代码审核是强制性的,就是说除非特别的授…

Git--GUI

前言 上一篇文章简单的分享了Git 的 Bash Here的使用,以及一些Git常用的命令等。本篇文章要分享的内容为Git GUI Here 的使用。 一、GUI GIT官方网站为了解决部分用户通过命令行对git工具使用时的怨声载道的现象,因此推出了一个GIT的可视化工具Git Gui …

GitLab CI介绍——入门篇

本文将会对Gitlab CI进行简要介绍,包括Gitlab Runner,Gitlab CI中的相关概念以及.gitlab-ci.yml的常用配置。 那么,GitLab CI 是什么? GitLab CI 是GitLab内置的进行持续集成的工具,只需要在仓库根目录下创建.gitlab-ci.yml 文件,并配置GitLab Runner;每次提交的时候,…

Gerrit

开发、提交、push、入库流程: repo init -u ssh://gerrit帐号[ip:port/platform/manifest -b 分支名 repo sync -c -f --no-tags -j1 git commit git push origin HEAD:refs/for/分支名 有的可能是这样push的: git push ssh://usernameip:port/path…

CICD详解(八)——gitlab安装与配置

今天继续给大家介绍Linux运维相关知识,本文主要内容是gitlab的安装与配置。 一、安装环境准备 首先,我们先来安装一下Gitlab的依赖包,执行命令: yum install curl policycoreutils openssh-server openssh-clients postfix -y然…

CICD详解(九)——gitlab简单使用

今天继续给大家介绍Linux运维相关知识,本文主要内容是Gitlab简单使用。 一、Gitlab关闭自动注册 在企业生产环境中,我们一般由项目负责人负责创建用户并分配权限,一般禁止员工私自注册用户,以防给项目开发工作带来安全性上的风险…

GitLab -- 简单使用CICD功能

前提: 新建GitLab 项目,可参考我另一篇博客 GitLab -- 创建项目_DGH2430284817的博客-CSDN博客 安装配置好Runner,可参考我另一篇博客: GitLab -- 安装和配置Runner_DGH2430284817的博客-CSDN博客 创建.gitlab-ci.yml 文件&…

Git Gui

目录 1.什么是Git Gui 2. 什么是ssh key 3. git/github生成密钥并通过 第一步:本地电脑配置 1.配置用户名和邮箱(如果已经配置,就跳过) 2.检查下自己之前有没有已经生成ssh 3.生成(或删除)秘钥 第二步:远程git…

GitLab CI/CD artifacts 属性的配置与使用

😀最新最全的 GitLab CI/CD 全部关键词解析 请查阅该专栏 GitLab CI/CD 关键词 artifacts用于指定在job 成功或失败 时应附加到作业的文件和目录的列表。 作业完成后,工件将被发送到GitLab,并可在GitLab UI中下载 如 artifacts:paths 路径是相对于项目目录($CI_PROJECT…

CI环境搭建-创建git

添加如下配置: 上图说的需每次启动的即下面这个文件: 默认用户名、密码是admin/admin 创建代码仓库: 选择版本库: 使用方法: 1,创建一个文件夹 选择版本库地址: 也可以通过cmd命令来拉取代码&am…