2026a

# huffmanenco


用哈夫曼编码对符号序列进行编码

函数库: TyCommunication

# 语法

code = huffmanenco(sig, dict)

# 说明

code = huffmanenco(sig, dict) 使用由输入代码字典 dict 描述的哈夫曼代码对输入信号 sig 进行编码。sig 可以具有向量、单元数组或字母数字单元数组的形式。如果 sig 是单元格数组,它必须是行或列。dict 是 N 乘 2 单元数组,其中 N 是要编码的不同可能符号的数量。dict 的第一列表示不同的符号,第二列表示对应的码字。每个码字都表示为一个行向量,dict 中的任何码字都不能是 dict 中任何其他码字的前缀。您可以使用 huffmandict 函数生成 dict。

# 示例

Huffman 编码与解码
using TyCommunication
using TyMath
symbols = [1, 2, 3, 4, 5, 6]
p = [0.5, 0.125, 0.125, 0.125, 0.0625, 0.0625]
dict = huffmandict(symbols, p)[2]
inputSig = randsrc(100, 1, [symbols p]', 1234)
code = huffmanenco(inputSig, dict)
sig = huffmandeco(code, dict)
any(isequal.(inputSig, sig))
binarySig = de2bi(inputSig)
seqLen = length(binarySig)
binaryComp = de2bi(code)
encodedLen = length(binaryComp)
code = 1×227 Matrix{Int64}:
 0  1  0  0  0  1  1  0  1  1  0  0  0  1  1  0  1  0  1  0  1  0  …  1  0  0  1  0  1  0  0  1  0  0  1  0  0  1  1  0  0  1  1  1   

sig = 100-element Vector{Union{Integer, AbstractVector}}:
 1
 2
 1
 4
 4
 1
 1
 ⋮
 1
 2
 2
 4
 1
 3

encodedLen = 227

# 输入参数

sig - 输入信号
向量 | 单元格数组 | 字母数字单元格数组

压缩的输入信号,指定为向量、单元格数组或字母数字单元格数组。sig 可以是向量、单元格数组或字母数字单元格数组的形式。如果 sig 是单元数组,则它必须是 1 乘 S 或 S 乘 1 单元数组,其中 S 是符号数。

dict - 哈夫曼代码字典
N×2 单元数组

哈夫曼代码字典,指定为 N 乘 2 单元数组。N 是要编码的函数的不同可能符号的数量。dict 的第一列表示不同的符号,第二列表示相应的码字。每个码字都表示为数字行向量,dict 中的任何码字都不能是 dict 中任何其他码字的前缀。您可以使用 huffmandict 函数生成dict。

# 输出参数

code - 编码信号
adjoint(::Vector{Int64}) with eltype Int64

输入哈夫曼代码字典的编码信号,作为 adjoint(::Vector{Int64}) with eltype Int64 返回。

# 另请参阅

huffmandict | huffmandeco