Matlab如何计算功率谱熵?|信息熵之功率谱熵

article/2023/6/4 14:27:10

信息熵
熵的概念最初在热力学中提出,熵的本质被解释为即熵的本质是一个系统“内在的混乱程度”。熵的概念在不同的学科中引申出更为具体的概念,在信息论中信息熵的具体定义为:

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=1np(xi)1=p(xi)i=1np(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)的定义。

要计算信号的功率谱熵,需要进行以下步骤:

  1. 计算信号的功率谱密度(Power Spectral Density,PSD),可以使用
  2. Matlab的pwelch函数来进行计算。
  3. 根据得到的功率谱密度,计算出每个频率点的概率密度函数。
  4. 计算出每个频率点的信息量,即−log(pi)-log(p_i)log(pi),其中pip_ipi为该频率点的概 率密度函数。
  5. 将每个频率点的信息量乘以其对应的概率密度函数,并将结果求和,得到信号的功率谱熵。
% 生成一个长度为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

测试结果
单一频率的功率谱熵低,混合频率信号的功率谱熵更高。
【注】单一频率中的高低频仅仅指相对关系,且单一的低频和单一的高频,在其它条件相同的情况下,功率谱熵接近。
测试的结果符合对熵的定义。

【个人一点理解,如有错误欢迎指证讨论,如有转载请联系作者】

http://www.ngui.cc/article/show-1007700.html

相关文章

扩散模型的数学理解

前置知识:标准高斯分布的乘法:若z~N(0, I),则 n*z~N(0, n^2 * I)。因为期望为0,乘以n后还是为0,但方差为1,乘以n后还要加上平方,所以说是n^2 * I。概率公式中的逗号、分号、竖线:分号…

Vue中的常用指令!!

Vue 中的指令是 Vue 的核心功能之一&#xff0c;用于在模板中添加特殊的标签&#xff0c;使得 DOM 元素和 Vue 实例的数据绑定在一起&#xff0c;实现双向数据绑定和动态更新。下面是常用的 Vue 指令。 v-if 指令&#xff1a;根据条件动态渲染元素 <!-- 根据 show 布尔值的…

【算法基础】欧拉函数

一、欧拉函数 1. 公式法求欧拉函数 2. 筛法求欧拉函数 二、案例分析1 (公式法求欧拉函数) (一)Question 1. 问题描述 2. Input 第一行包含整数 n。接下来 n行,每行包含一个正整数 ai。(1 ≤ n ≤ 100, 1 ≤ ai ≤ 2109) 3. Output 输出共 n 行,每行输出一个正整数…

Python接口自动化 ❀ JsonPath提取器和正则提取器

Python接口自动化 ❀ JsonPath提取器和正则提取器一、前言1.1 正则提取器1.2 正则示例&#xff1a;1.3 JsonPath提取器1.4 JsonPath提取器具体使用一、前言 我们一般在做接口关联时&#xff0c;会通过保存中间变量实现接口关联&#xff0c;在关联时就需要用到变量提取&#xf…

计科数据《算法设计与分析》第3次上机作业

问题 A: 算法10-6~10-8&#xff1a;快速排序 #include<bits/stdc.h> using namespace std; #define int long long #define fer(i,a,b) for(int ia;i<b;i) const int N1e55,mod1e97; int a[N]; int partition(int a[],int l,int r){int il,jr;int xa[l];while(i<j…

Oracle-CDC进程同步报错问题合集

前言: Oracle CDC是数据库自带的数据库数据复制和增量数据抽取工具&#xff0c;提供五种复制模式 1 Synchronous Change Data Capture Configuration(同步复制) 2 Asynchronous HotLog Configuration(异步在线日志CDC) 3 Asynchronous Distributed HotLog Configuratio…

史诗级详解面试中JVM的实战

史诗级详解面试中JVM的实战 1.1 什么是内存泄漏?什么是内存溢出?1.2 你们线上环境的JVM都设置多大?1.3 线上Java服务器内存飙升怎么回事?1.4 线上Java项目CPU飙到100%怎么排查?1.5 线上Java项目OOM了,怎么回事?1.1 什么是内存泄漏?什么是内存溢出? 内存溢出:OutOfMe…

Lua for 的使用

Lua 中的 for 循环有两种形式&#xff1a;数值型遍历和泛型遍历。 1&#xff0c;数值型遍历 语法为: for nameexp1, exp2 [,exp] do -- do something end [,exp] 这个不是必须的&#xff0c;是可选项。它表示步长&#xff0c;即从nameexp1 如何变化到 exp2&#xff0c;所…

HJ64 MP3光标位置(java详解)

就是一块诺基亚手机屏幕,只能显示四个歌曲,upper代表屏幕显示第一个歌曲(总歌曲中第几个),down代表屏幕显示的最后一个歌曲(总歌曲中第几个) 你要输入这个总歌曲数量n {初始值,cur0,upper0,downMath.min(3,n-1);}{为啥cur为0,例如打开QQ音乐光标不都是显示在第一个歌曲位置嘛} …

C++初阶——类和对象(3)赋值/运算符重载

目录 5.赋值运算符重载 5.1 运算符重载 5.2 赋值运算符重载 5.3 前置和后置重载 6.日期类的实现——流插入&#xff0c;流提取重载 Date.h&#xff1a; Date.cpp: 7.const成员 8.取地址及const取地址操作符重载 5.赋值运算符重载 5.1 运算符重载 C为了增强代码的可读性…