一、基本概念
离散数列信源熵,全称离散无记忆信源的信息熵(香农熵),是衡量离散随机序列不确定性/信息量大小的核心指标。
在FPGA工程中,我们处理的所有量化数据------8bit灰度图像素序列、ADC采样量化序列、二值化边缘序列,本质都是离散数列信源;熵值直接决定了数据的压缩极限、随机程度与纹理复杂度。
二、数学定义与物理意义
- 核心公式
对于一个离散信源,符号集合为 X=\{x_1,x_2,...,x_N\},每个符号独立出现,对应出现概率为 p(x_i),且满足 \sum_{i=1}^N p(x_i)=1,则该信源的熵为:
H(X) = -\sum_{i=1}^{N} p(x_i) \cdot \log_2 p(x_i)
-
单位:比特/符号(bit/symbol)
-
约定:p(x_i)=0 时,0 \cdot \log_2 0 = 0
- 物理意义
-
熵越大:符号分布越均匀、随机性越强、包含的信息量越大,数据越难压缩
-
熵越小:符号分布越集中、规律性越强、冗余度越高,数据压缩潜力越大
-
极端情况:所有数据都是同一个值(完全确定),熵为0,没有任何信息量
- 计算实例
以4符号离散信源为例,概率分布为 p_1=0.5,\ p_2=0.25,\ p_3=0.125,\ p_4=0.125:
\begin{align*}
H(X) &= -(0.5\log_20.5 + 0.25\log_20.25 + 0.125\log_20.125 + 0.125\log_20.125) \\
&= -(0.5\times(-1) + 0.25\times(-2) + 0.125\times(-3) + 0.125\times(-3)) \\
&= 1.75\ \text{bit/符号}
\end{align*}
三、核心性质(工程必用)
-
非负性:H(X) \ge 0,当且仅当某一符号概率为1(完全确定)时取等号
-
最大熵定理:当所有符号等概率出现时,熵达到最大值 \log_2 N。例如8bit灰度图像最大熵为8bit/像素
-
凸函数性:熵是概率分布的上凸函数,存在唯一最大值
-
可加性:多个独立信源的联合熵,等于各信源熵值之和
四、FPGA计算离散信源熵的硬件流水线
FPGA无法像CPU一样直接做浮点对数运算,标准实现采用四级全流水线架构,支持像素级实时计算,典型延迟仅数拍。
第1级:符号概率统计(直方图统计)
-
功能:统计离散数列中每个符号出现的频次,再换算为概率
-
FPGA实现:用块RAM/双口RAM构建计数表,输入一个符号,对应地址的计数器自动+1;一帧数据统计完成后,用总数据量做除法得到定点概率
-
优化:二值化、小位宽数据可直接用寄存器计数,无需RAM
第2级:\log_2 对数运算
硬件无法直接计算对数,主流两种方案:
-
LUT查表法(首选):提前将概率值对应的 \log_2 结果存入ROM,输入概率直接查表输出,延迟1拍。适合8bit及以下位宽场景,速度快、逻辑简单
-
CORDIC算法:通过迭代逼近计算对数,节省存储资源,适合高精度、大位宽场景
第3级:乘法运算
-
功能:计算 p(x_i) \cdot \log_2 p(x_i)
-
FPGA实现:直接调用内部DSP乘法器,定点数相乘后按精度需求截位;每级打寄存器保证时序收敛
第4级:累加求和与取反
-
用加法器树或逐次累加器,将所有符号的计算结果求和,最后按公式取反,输出最终熵值
-
帧式处理场景下,一帧数据计算完成后输出一次熵值结果
五、FPGA实现的关键避坑点
- 定点精度权衡
概率常用Q12~Q16定点格式,对数结果用Q8~Q12格式,过低会导致误差过大,过高会浪费DSP与存储资源。
- 零概率旁路
必须对概率为0的符号做旁路处理,直接跳过乘加步骤,否则会出现对数溢出、结果异常。
- 时序优化
全链路插入寄存器打拍,将统计、查表、乘法、累加分级流水,可支持100MHz以上的实时像素流处理。
- 资源精简
符号数量少时(如二值图像仅2个符号),无需RAM和LUT,直接用寄存器计数、组合逻辑计算即可,资源消耗极低。
六、FPGA中的典型应用场景
-
图像压缩编码:计算图像熵值,预估哈夫曼/算术编码的极限压缩比,动态调整编码参数
-
纹理特征提取:计算图像局部区域的熵值,作为纹理特征用于目标检测、车道线识别、缺陷检测
-
信号异常检测:实时监测ADC采样序列的熵值,熵值突变时判断信号出现干扰或故障
-
真随机数校验:通过熵值评估随机数发生器的随机性,熵值越接近理论最大值,随机性越好
-
信道编码适配:根据信源熵动态调整信道编码码率,平衡传输效率与可靠性