独立向量信号互信息计算——Matlab实现

引言

信息熵公式:

其中I(X)表示X的信息量

p(xi)是xi发生的概率英文里面叫做probability mass function,一个随机产生的事件所包含的信息本体数量,只与事件发生的机率相关。事件发生的机率越低,在事件真的发生时,接收到的信息中,包含的信息本体越大。含义是概率为 0 的事件对应的信息大, 反之信息量少.取对数的原因是使得乘积变为求和。两个独立事件x,y :p(x,y)=p(x)*p(y),I(x,y)=I(x)+I(y)
信息熵即为信息量的数学期望。
互信息为:

平均互信息为互信息的数学期望:

从公式可以推出:

这样就可以求出两个信号X,Y的互信息了,唯一需要求的就是两个信号的各自的pmf以及联合pmf,离散的pmf可以用直方图法求出,很直观很简单,就是将数据分成n等分,累计落入区间的数量即为信号自己的pmf,联合的pmf呢,同样的记录相同时刻的(xi,yi)落入两个数据n*n等分方格中的数量即为联合的pmf。

1. 编码实现

%计算两列向量之间的互信息
%u1:向量1
%u2:向量2
%wind_size:划分的等份
function mi = calc_mi(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*(0: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);


  • 2
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值