DE特征、PID特征、PSD特征、时频图

浅记一下四个特征,方便以后查阅。

DE特征(Differential Entropy)PID特征(Permutation Index Dimension)PSD特征(Power Spectral Density) 是在脑电信号分析中用于描述信号复杂度和结构的信息理论特征。这些特征通常用于脑电信号分类、预测任务或神经网络模型中,特别是在脑机接口(BCI)和情绪识别等领域。

1. DE特征(Differential Entropy)

DE(Differential Entropy) 是熵的一种度量方式,用来描述信号的不确定性或信息量。在脑电信号分析中,DE特征用于量化信号的复杂度。与传统的熵(如香农熵)不同,DE考虑了信号的动态变化,它是基于信号的概率分布来评估信号的复杂性。

  • 定义:DE是信号在特定频带(例如,α波、β波等)上的差异性,通常基于信号的功率谱估计来计算。

  • 计算方法:通常,通过对信号的功率谱进行傅里叶变换或小波变换,然后计算信号的差分熵。

DE的公式:

H ( x ) = − ∫ p ( x ) log ⁡ p ( x ) d x H(x) = - \int p(x) \log p(x) dx H(x)=p(x)logp(x)dx
其中, p ( x ) p(x) p(x) 是信号 x x x 的概率密度函数, H ( x ) H(x) H(x) 就是信号的差分熵。

DE特征的计算步骤:

  1. 进行傅里叶变换或小波变换,得到信号的频谱。
  2. 计算信号在不同频段(如 α 波、β 波、θ 波)的功率谱。
  3. 计算这些频段的差分熵,得到 DE 特征。

Python 实现:

import numpy as np
import scipy.signal as signal
from scipy.stats import entropy

def differential_entropy(data, fs=512):
    """
    计算单通道脑电信号的差分熵(DE特征)。
    
    参数:
    data: 单通道EEG信号(NumPy数组)
    fs: 采样率(Hz)
    
    返回:
    DE值
    """
    # 计算信号的功率谱密度(PSD)
    f, Pxx = signal.welch(data, fs, nperseg=1024)
    
    # 对功率谱密度取对数后计算熵
    psd_log = np.log(Pxx + 1e-10)  # 防止log(0)的出现
    de = entropy(psd_log)
    
    return de

# 示例:假设有一个脑电信号 `eeg_signal` 和采样率 `fs`
eeg_signal = np.random.randn(1024)  # 这里使用随机信号代替
fs = 512  # 假设采样率为512Hz

de_value = differential_entropy(eeg_signal, fs)
print(f"Differential Entropy (DE): {
     de_value}")

代码解释

  1. scipy.signal.welch:计算信号的功率谱密度(PSD),这可以看作是信号的频谱分布。
  2. entropy:计算信号的熵,基于其功率谱的对数。
  3. DE特征:最终通过对功率谱密度的对数进行熵计算得到 DE 特征。

2. PID特征(Permutation Index Dimension)

PID(Permutation Index Dimension) 是一种基于排列的复杂度度量方法。它可以用于描述时间序列的动态结构。PID特征通过比较信号在不同时间点的排列顺序来反映信号的动态行为。

  • 定义:PID特征基于信号的排列模式,考虑到信号的局部结构和动态。它通过检测信号的排列模式是否有规则性来量化信号的复杂性。

  • 计算方法:PID的计算通常依赖于对信号的局部子序列的排列模式进行分析。通过比较子序列之间的排列模式,计算出信号的维度或复杂度。

Python 实现:

我们可以使用一个简单的 PID 计算方法,基于排列模式(permutation)来计算复杂度。

import numpy as np
from itertools import permutations

def permutation_index_dimension(data, m=3, tau=1):
    """
    计算脑电信号的排列指数维度(PID特征)。
    
    参数:
    data: 单通道EEG信号(NumPy数组)
    m: 选择的嵌入维度(通常为3)
    tau: 时间延迟
    
    返回:
    PID值
    """
    # 创建嵌入向量
    embedded = np.array([data[i:i+m*tau:tau] for i in range(len(data) - m*tau)])
    
    # 计算排列模式
    perm_indices = []
    for vector in embedded:
        perm_indices.append(np.argsort(vector))  # 获取每个向量的排列顺序
    
    # 计算PID:通过排列模式的维度来量化复杂度
    unique_perms = set(tuple(perm) for perm in perm_indices)
    pid = len(unique_perms)  # 不同排列的数量
    
    return pid

# 示例:假设有一个脑电信号 `eeg_signal`
eeg_signal = np.random.randn(1024)  # 这里使用随机信号代替

pid_value = permutation_index_dimension(eeg_signal)
print(f"Permutation Index Dimension (PID): {
     pid_value}")

代码解释

  1. embedded:构造信号的嵌入向量,通常通过选择信号的子序列并加入时间延迟(tau)来生成。
  2. np.argsort(vector):对信号的子序列进行排序,得到每个子序列的排列模式。
  3. unique_perms:计算所有排列模式的数量,不同的排列模式代表信号的不同结构。
  4. PID特征:最终,通过计算不同排列模式的数量来得到信号的复杂度。

3. PSD特征(Power Spectral Density)

功率谱密度(Power Spectral Density, PSD) 是信号能量(或功率࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值