实验一 离散信源的熵
一、信源熵的物理意义和概念
信源熵是信息论中用来衡量信源信息量有序化程度的一个概念
信源熵值与信源有序化程度成反比;有序度越高,信源熵值越低,反之亦成立。
二、离散信源熵计算的基本步骤
信源的数学模型抽象为
[ X p ( x ) ] = [ a 1 a 2 a 3 ⋯ a q p ( a 1 ) p ( a 2 ) p ( a 3 ) ⋯ p ( a q ) ] \Bigg[\begin{matrix}X\\p(x)\end{matrix}\Bigg] = \Bigg[\begin{matrix}a_1&a_2&a_3&\cdots&a_q\\p(a_1)&p(a_2)&p(a_3)&\cdots&p(a_q) \end{matrix}\Bigg] [Xp(x)]=[a1p(a1)a2p(a2)a3p(a3)⋯⋯aqp(aq)]
- 计算每个符号携带的自信息量 I ( a i ) = − l o g 2 p ( a i ) I(a_i) = -log_2p(a_i) I(ai)=−log2p(ai)
- 根据公式计算信源的的信息熵 H ( x ) = − ∑ i = 1 q p ( a i ) l o g ( a i ) H(x)=-\sum_{i=1}^qp(a_i)log(a_i) H(x)=−∑i=1qp(ai)log(ai)
程序流程图
三、源程序
clc
clear
a = input("输入离散信源的概率矩阵:");
H = 0; %初始化信源熵
q = size(a,2); %获取信源样本空间的大小
for i = 1:q
H = H - a(i) * log2(a(i)); %离散信源熵的计算公式
end
fprintf('该离散信源的熵为:%f (bit/symbol)\n',H); %输出结果
验证程序
%% 习题2.6
%% (1)
clear
a(1:128) = 1/128; %定义离散信源
H = 0; %初始化信源熵
q = size(a,2); %获取信源样本空间的大小
for i = 1:q
H = H - a(i) * log2(a(i)); %离散信源熵的计算公式
end
fprintf('习题2.6(1)信源的熵为:%f\n',H); %输出结果
%% (2)
clear
a(1:10000) = 1/10000; %定义离散信源
H = 0; %初始化信源熵
q = size(a,2); %获取信源样本空间的大小
for i = 1:q
H = H - a(i) * log2(a(i)); %离散信源熵的计算公式
end
fprintf('习题2.6(2)信源的熵为:%f\n',H); %输出结果
%% 习题3.6
clear
px = [3/4 1/4];
Hx = 0;
qx = size(px,2);
for i = 1:qx
Hx = Hx - px(i) * log2(px(i));
end
fprintf('H(X) = %f (bit/symbol)\n',Hx); %输出结果
py = [7/12 5/12];
Hy = 0;
qy = size(py,2);
for j = 1:qy
Hy = Hy - py(j) * log2(py(j));
end
fprintf('H(Y) = %f (bit/symbol)\n',Hy); %输出结果
pxy = [1/2 1/4;1/12 1/6];
Hxy = 0;
for i = 1:qx
for j = 1:qy
Hxy = Hxy - pxy(i,j) * log2(pxy(i,j));
end
end
fprintf('H(XY) = %f (bit/symbol)\n',Hxy); %输出结果
Hx_y = Hxy - Hy;
Hy_x = Hxy - Hx;
Ix_y = Hx - Hx_y;
fprintf('H(X|Y) = %f (bit/symbol)\n',Hx_y); %输出结果
fprintf('H(Y|X) = %f (bit/symbol)\n',Hy_x); %输出结果
fprintf('I(X;Y) = %f (bit)\n',Ix_y); %输出结果
四、信源熵大小与前后符号之间相关性的关系
信源的相关性是信源符号间的依赖程度的度量。由于信源输出符号间的依赖关系也就是信源的相关性使信源的实际熵减小。信源输出符号间统计约束关系越长,信源的实际熵越小。当信源输出符号间彼此不存在依赖关系且为等概率分布时,信源的实际熵等于最大熵。