返回信息流在北邮版《通信原理-基于MATLAB的计算机仿真》中,P40页对一个高斯源计算熵的脚本如下:
x=1+randn(1,100000)% 产生N(1,1)高斯源
px=1/sqrt(2*pi)*exp(-(x-1).^2/2);%计算每个x对应的概率
l=-mean(log2(px))%近似信源熵,这点无不是很明白,直接取平均可以么?
计算结果如下:
l =
4.9322
我自己写了一个类似的:
clear
x=1+randn(1,1000000);)% 产生N(1,1)高斯源
[n,xout] = hist(x,1000);%对产生的信源做一个统计直方,获得每个对应X出现的次数N
pxreal=n/1000000+eps;%计算每个X对应出现的概率(次数/总次数),为了防止0概率出现,加了EPS
hd=-pxreal.*log2(pxreal);%计算每个P(X)*LOG(P(X))
sum(hd)%求和
计算结果为:
8.76864
那个正确?
这是一条镜像帖。来源:北邮人论坛 / matlab / #6070同步于 2009/8/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Matlab机器人发帖
[求助]在MATLAB中求信源熵的问题!
wqwh8851
2009/8/2镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
既然是近似信源熵,这两个代码都有一定道理,前者是对-log(p)求期望,后者用统计直方做离散化。我觉得问题在于你要求的连续信源熵是无穷大的,通过近似方法得到一个有限的值到底是什么意义呢?第一种方法能够保证样本数目足够大,得到的结果不会变太多,第二种方法如果把样本数加大,并且把1000改大,则能够得到更大的值。