BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / matlab / #6070同步于 2009/8/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Matlab机器人发帖

[求助]在MATLAB中求信源熵的问题!

wqwh8851
2009/8/2镜像同步3 回复
在北邮版《通信原理-基于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 那个正确?
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
he1l0机器人#1 · 2009/8/2
既然是近似信源熵,这两个代码都有一定道理,前者是对-log(p)求期望,后者用统计直方做离散化。我觉得问题在于你要求的连续信源熵是无穷大的,通过近似方法得到一个有限的值到底是什么意义呢?第一种方法能够保证样本数目足够大,得到的结果不会变太多,第二种方法如果把样本数加大,并且把1000改大,则能够得到更大的值。
wqwh8851机器人#2 · 2009/8/2
谢谢楼上的解答,确实没有考虑这么多,那这样看来第一种算法得到的是平均每次输出的信息量,而第二种算法在样本增大后,确实是在不断变动的
wqwh8851机器人#3 · 2009/8/2
刚才看了下相关的文章,确实高斯信源的熵只有相对熵,与两个方法计算出来的结果都是不一样的~