计算单个事件信息量Matlab,獨立向量信號互信息計算——Matlab實現

引言

信息熵公式:

bde53db4ff665376b6b077e7fbb5e876.png

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

c0f59046c3f660988359399366aa74d7.png

p(xi)是xi發生的概率英文里面叫做probability mass function,一個隨機產生的事件所包含的信息本體數量,只與事件發生的機率相關。事件發生的機率越低,在事件真的發生時,接收到的信息中,包含的信息本體越大。含義是概率為 0 的事件對應的信息大, 反之信息量少.取對數的原因是使得乘積變為求和。兩個獨立事件x,y :p(x,y)=p(x)*p(y),I(x,y)=I(x)+I(y)

信息熵即為信息量的數學期望。

互信息為:

efabe0af0692fbdb92d6f88a0247cabb.png

平均互信息為互信息的數學期望:

ebcc808eba764352eb96ecd2d3b1ac2f.png

從公式可以推出:

9161b1c828a88633f2825e6866d769e9.png

這樣就可以求出兩個信號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);

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值