gpt4 book ai didi

matlab - MATLAB 中的霍夫曼编码 - 传输字典/树

转载 作者:太空宇宙 更新时间:2023-11-03 20:05:41 24 4
gpt4 key购买 nike

我正在使用 MATLAB 压缩任意向量,它为霍夫曼编码提供工厂方法:huffmandict、huffmanenco、huffmandeco。

huffmandict 函数生成一个查找表,将我们要编码的信号中的每个符号映射到编码和解码信号所需的相应码字。

当您知道输入向量时,生成字典就很简单了。但是假设我正在压缩以从 Alice 发送给 Bob - 我不能假设 Bob 也知道字典 - 所以 Alice 需要将字典连同霍夫曼代码一起发送!

在 MATLAB 中有没有一种方法可以生成字典的比特流表示形式,并将其添加到我们的霍夫曼代码之前,以允许在另一端对其进行解码?

我的想法是,如果 N 是编码字典的长度,那么生成的代码看起来像这样:

(N encoded as 8 bits)(huffman dict encoded in N bits)(huffman code)

MATLAB 为编码提供了非常强大的工厂方法,但随后甚至懒得通过大量额外工作使其真正可用于数字传输,这似乎很奇怪。

我理解在理论上,通常会构建哈夫曼树 - 有没有办法在 MATLAB 中生成它,然后将这种树转换回字典?

最佳答案

我知道 JPEG 和 gzip 中使用了两种高效的代码表达方法,但据我了解,它们要求字典是规范的,这意味着右侧的每个分支(从 1 开始)都必须更长。所以你必须将代码转换为规范形式,因为有 2^n(n 是代码字的数量)设计。Canonical 具有相同的预期长度。然后你可以用分支的长度来表达每个符号,限制在一个合理的数字,比如 2^4(意味着每个符号有 4 位)。好的,让我们来看看要发送的向量的代码:

for i = 1:size(dict,1)
L(i) = numel(dict{i,2})
end

在接收方你必须做更多的事情(我假设你的代码字标签中有一些固定的顺序):

k = 0;
for l = 1:16
k = k * 2;
for j = find(L==l)
d{j,1} = j;
d{j,2} = de2bi(k, 'left-msb', l);
k = k + 1;
end
end

要转换为规范形式,您只需将树转换为矢量格式并返回。

关于matlab - MATLAB 中的霍夫曼编码 - 传输字典/树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48138567/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com