信息熵
熵的概念最初在热力学中提出,熵的本质被解释为即熵的本质是一个系统“内在的混乱程度”。熵的概念在不同的学科中引申出更为具体的概念,在信息论中信息熵的具体定义为:
H(X)=p(xi)∑i=1n1p(xi)=−p(xi)∑i=1np(xi)H(X)=p(x_i)\sum_{i=1}^n \frac{1}{p(x_i)}=-p(x_i)\sum_{i=1}^n p(x_i)H(X)=p(xi)i=1∑np(xi)1=−p(xi)i=1∑np(xi)
信息量
一个系统中,各个组成部分的信息量的期望构成信息熵。信息量的定义为
概率的倒数的对数值,反映的该事件发生所贡献的信息。
h(x)=log2(1p(x))h(x)=log2(\frac{1}{p(x)})h(x)=log2(p(x)1)
上述内容有参考:https://zhuanlan.zhihu.com/p/26486223
p(x)p(x)p(x)的范围是0到1之间,概率越小则信息量越大。我们可以绘制一下概率与信息量的关系图:
p=0.001:0.0001:1;
infor=-log(p);
figure;
plot(p,infor);xlabel('概率');ylabel('信息量');
信息熵是所有信息量的期望
信息量越大,但是对于一个系统的信息熵的贡献不一定越大,因为信息量大意味着概率小,二者的乘积就不一定越大了。
p=0.001:0.0001:1;
infor=-p.*log(p);
figure;
plot(p,infor);xlabel('P(x)');ylabel('-p(x)log(p(x))');
个人一点想法,熵反映的是一个系统的不确定性,熵越大反映一个系统越不稳定。我觉得对于一个系统而言,p(x)很大或者很小,对于系统来说都是更稳定的,一个趋向于确定发生,一个是趋向于确定不发生,所以概率很大或者很小对于信息熵的贡献都是比较小的。(个人理解,谨慎食用)。
好了废话不多说了,网上有很多关于熵信息熵的介绍,大家可以搜索来学习。给出功率谱熵的具体求解代码的几乎没有,本文给出一种求法,内容如下
功率谱熵
个人感觉各种熵的定义本质上都是类似的,各种各样不同类型的熵的求法不同之处都在于公式中 p(xi)p(x_i)p(xi)的定义。
要计算信号的功率谱熵,需要进行以下步骤:
- 计算信号的功率谱密度(Power Spectral Density,PSD),可以使用
- Matlab的pwelch函数来进行计算。
- 根据得到的功率谱密度,计算出每个频率点的概率密度函数。
- 计算出每个频率点的信息量,即−log(pi)-log(p_i)−log(pi),其中pip_ipi为该频率点的概 率密度函数。
- 将每个频率点的信息量乘以其对应的概率密度函数,并将结果求和,得到信号的功率谱熵。
% 生成一个长度为N的随机信号
N = 1024;
x = randn(N, 1);
% 计算信号的功率谱密度
[pxx, f] = pwelch(x);
% 计算每个频率点的概率密度函数
pdf = pxx / sum(pxx);
% 计算每个频率点的信息量
info = -log2(pdf);
% 计算功率谱熵
entropy = sum(pdf .* info);
测试:
随机信号
N = 1000;
x = randn(N, 1);
[pxx, f] = pwelch(x);
pdf = pxx / sum(pxx);
info = -log2(pdf);
EP = sum(pdf .* info);
figure;plot(x);title('随机信号');
disp(['entropy:',num2str(EP)]);
结果:entropy:6.9034
单一频率信号
信号1-低频
t=0.01:0.001:1-0.01;
x=sin(2*pi*15*t);
entropy:1.3607
信号2-高频
clc;clear all;
t=0.01:0.001:1-0.01;;
x=sin(2*pi*250*t);
entropy:1.3626
混合频率信号
t=0.01:0.001:1-0.01;
x=sin(2*pi*15*t);
y=sin(2*pi*250*t);x=x+y;
entropy:2.3614
测试结果
单一频率的功率谱熵低,混合频率信号的功率谱熵更高。
【注】单一频率中的高低频仅仅指相对关系,且单一的低频和单一的高频,在其它条件相同的情况下,功率谱熵接近。
测试的结果符合对熵的定义。
【个人一点理解,如有错误欢迎指证讨论,如有转载请联系作者】