互信息 matlab
时间: 2023-10-21 09:06:46 浏览: 183
互信息(Mutual Information)是一种用来衡量两个随机变量之间依赖关系的指标。在信息论中,互信息表示一个随机变量X中的信息量对于另一个随机变量Y的预测能力。在Matlab中,可以使用以下代码计算互信息:
```matlab
function mi = calmi(u1, u2, wind_size)
x = [u1, u2];
n = wind_size;
[xrow, xcol] = size(x);
bin = zeros(xrow,xcol);
pmf = zeros(n, 2);
for i = 1:2
minx = min(x(:,i));
maxx = max(x(:,i));
binwidth = (maxx - minx) / n;
edges = minx : binwidth : (minx + binwidth*n);
histcEdges = [-Inf, edges(2:end-1), Inf];
[occur,bin(:,i)] = histc(x(:,i), histcEdges, 1);
pmf(:,i) = occur(1:n) ./ xrow;
end
jointOccur = accumarray(bin, 1, [n,n]);
jointPmf = jointOccur ./ xrow;
Hx = -(pmf(:,1))' * log2(pmf(:,1) + eps);
Hy = -(pmf(:,2))' * log2(pmf(:,2) + eps);
Hxy = -(jointPmf(:))' * log2(jointPmf(:) + eps);
MI = Hx + Hy - Hxy;
mi = MI / sqrt(Hx * Hy);
end
```
这个函数可以计算输入向量`u1`和`u2`之间的互信息。其中`wind_size`表示向量的长度,`u1`和`u2`是要计算互信息的两个向量。函数中使用了直方图的方式计算了单个向量的直方图分布,并通过联合概率密度计算了互信息。
阅读全文