【发布时间】:2018-06-16 17:45:00
【问题描述】:
我正在使用 MATLAB 压缩任意向量,它为 Huffman Coding 提供工厂方法: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 中生成它,然后将这种树转换回字典?
【问题讨论】:
-
不是最有效的方法,但很容易将字典保存为文件,然后将其读回内存。例如:
save('dict.mat','dict','-v6'); f = fopen('dict.mat','rb'); data = uint8(fread(f)); fclose(f);然后将data发送给接收者。在接收端写回文件并加载:f = fopen('dict.mat','wb'); fwrite(data); load('dict.mat'); fclose(f); -
jsonencode/jsondecode怎么样?
标签: matlab tree compression encode huffman-code