引言
信息熵公式:
其中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);