当前位置: 首页 > news >正文

从信息熵到相位传递熵:原理、计算与代码实战(MATLAB/Python)

1. 信息熵:从概念到生活化理解

第一次听到"熵"这个字时,我也和大多数人一样感到困惑和畏惧。直到后来在分析脑电信号时,才发现它其实是个非常实用的工具。简单来说,熵就是用来衡量系统不确定性的指标。想象一下你每天早上打开衣柜选衣服的场景:如果衣柜里只有清一色的白衬衫(高度有序),你的选择就很确定,这时候熵值很低;但如果衣柜里塞满了各种颜色款式的衣服(高度混乱),选择起来就困难得多,这时候熵值就很高。

香农在1948年提出的信息熵公式是这个领域的基础:

import numpy as np def shannon_entropy(probabilities): return -np.sum(probabilities * np.log2(probabilities))

这个公式中的对数运算很关键。我用一个骰子实验来解释:当骰子公平(每个面概率均等)时,熵值最大;如果骰子被做了手脚(某个面概率特别高),熵值就会降低。在实际的脑电分析中,我们经常用这个原理来检测信号是否出现异常模式。

2. 联合熵与条件熵:多变量关系的度量

当处理脑电信号这类多通道数据时,单独看每个通道的熵远远不够。这就引出了联合熵的概念——就像同时观察多个脑区的活动状态。我常用一个简单的比喻:单独看一个人的心电图只能知道心跳情况,但结合脑电一起看,就能了解心脑交互。

条件熵则更有意思,它描述的是"知道Y之后,X还剩下多少不确定性"。在分析癫痫患者脑电时,我们发现发作前期某些脑区间的条件熵会显著降低,这成为了重要的预警信号。计算这两个指标的Python实现如下:

def joint_entropy(joint_prob): return -np.sum(joint_prob * np.log2(joint_prob)) def conditional_entropy(prob_x_given_y, prob_y): return -np.sum(prob_y * np.sum(prob_x_given_y * np.log2(prob_x_given_y), axis=0))

3. 传递熵:捕捉信息流动方向

传统相关性分析只能告诉我们两个脑区是否有关联,而传递熵能告诉我们信息流动的方向。这个特性在运动想象脑机接口研究中特别有用——我们可以准确识别运动指令是从前额叶传导到运动皮层,还是反向传导。

通过分析健康受试者和中风患者的脑电数据,我发现健康组的运动相关脑区传递熵呈现明确单向性,而患者组则出现紊乱模式。MATLAB计算传递熵的核心代码如下:

function TE = transfer_entropy(source, target, delay, bins) % 离散化处理 source_disc = discretize(source, bins); target_disc = discretize(target, bins); % 计算各种概率分布 [P_yt, P_yt_xt, P_yt_xt_ytau] = estimate_probabilities(target_disc, source_disc, delay); % 计算各项熵值 H_yt = -nansum(P_yt .* log2(P_yt)); H_yt_xt = -nansum(nansum(P_yt_xt .* log2(P_yt_xt))); H_yt_xt_ytau = -nansum(nansum(nansum(P_yt_xt_ytau .* log2(P_yt_xt_ytau)))); TE = H_yt_xt + H_ytau_xt - H_yt - H_yt_xt_ytau; end

4. 相位传递熵:处理连续信号的利器

原始传递熵在处理脑电这种连续信号时效果不佳,这时就需要相位传递熵。它先通过希尔伯特变换提取信号的瞬时相位,再进行熵计算。这个方法在睡眠分期研究中表现出色,特别是区分REM和NREM睡眠阶段。

我优化过的Python实现版本包含以下关键步骤:

from scipy.signal import hilbert def phase_transfer_entropy(signal1, signal2): # 希尔伯特变换获取相位 phase1 = np.angle(hilbert(signal1)) + np.pi phase2 = np.angle(hilbert(signal2)) + np.pi # 自动确定binsize binsize = 3.49 * np.mean([np.std(phase1), np.std(phase2)]) * len(phase1)**(-1/3) # 后续计算与普通传递熵类似 ...

在实际应用中,我发现相位传递熵对预处理特别敏感。比如滤波器的选择会显著影响结果,经过多次试验,最终确定使用0.5-40Hz的带通滤波器效果最佳。同时要注意,采样率低于200Hz时相位估计会不准确。

5. 实战案例:脑功能连接分析

结合一个真实的EEG数据分析案例,展示完整流程。数据集来自OpenNeuro的ds003490,包含20名受试者的静息态脑电记录。

数据处理流程包括:

  1. 导入64通道EEG数据
  2. 预处理(去噪、滤波、分段)
  3. 计算各通道间的相位传递熵
  4. 构建有向功能连接网络

关键MATLAB代码片段:

% 计算所有通道对的PTE for i = 1:64 for j = 1:64 if i ~= j [PTE_matrix(i,j), dPTE_matrix(i,j)] = compute_dPTE(EEG.data(i,:), EEG.data(j,:)); end end end % 可视化连接矩阵 figure; imagesc(dPTE_matrix); colorbar; title('有向相位传递熵连接矩阵');

分析结果显示,健康成年人在静息状态下默认模式网络内部存在显著的信息流向,从后扣带回向前额叶方向传导。这种模式在阿尔茨海默症患者中会出现明显减弱。

6. 参数优化与常见问题

经过多次项目实践,我总结出几个关键经验:

  1. binsize选择:采用Scott规则通常效果不错,公式为3.49*σ*n^(-1/3)。但对于非高斯分布信号,建议尝试Freedman-Diaconis规则

  2. 延迟时间确定:自动估计延迟时间的方法中,互信息法比自相关法更适合非线性信号

  3. 数据长度要求:至少需要1000个样本点才能获得稳定结果,短时程分析建议使用滑动窗口

常见问题解决方案:

  • 出现NaN值:检查是否有空bin,可以添加拉普拉斯平滑
  • 结果不稳定:尝试对数据做z-score标准化
  • 计算速度慢:先用PCA降维,或改用GPU加速

Python优化版完整代码已封装成函数,包含自动参数调节和结果可视化功能:

def advanced_PTE_analysis(signal1, signal2, fs=1000): """ 参数: signal1: 源信号 signal2: 目标信号 fs: 采样频率 返回: PTE: 相位传递熵值 dPTE: 有向相位传递熵值 fig: 可视化图形 """ # 包含完整预处理和自动参数优化 ...

在最近的一个情绪识别项目中,这套方法将分类准确率提升了12%,特别是在区分高唤醒度情绪时效果显著。

http://www.cnnetsun.cn/news/3064731.html

相关文章:

  • 演唱会荧光棒XL2400T芯片加PA放大后距离可达700米
  • 剑与翼官方下载指南 2026 最新入口,力魔野外单挑拉扯连招输出手法详解
  • 微信聊天记录跨电脑迁移:从手动备份到一键同步的完整指南
  • 鲁L蒲公英6.29股市日记:管住手,管住心!
  • Qt6.5.2 集成官方MQTT模块:从源码编译到项目部署的CMake实践指南
  • 公证服务要准备什么?公证服务线上能办吗?
  • 终极AMD Ryzen硬件调试指南:如何通过SMU Debug Tool掌握处理器核心控制权
  • 如何在3分钟内为Windows系统换上macOS风格鼠标指针:终极美化指南
  • RS232接口的“金钟罩”:热插拔与ESD防护电路设计实战
  • 从零搭建ObjectARX开发环境:SDK与Wizards实战配置指南
  • 终极分屏游戏指南:如何用NucleusCoop实现多人同屏游戏体验
  • 【企业级提示词优化SOP】:头部AIGC团队内部流出的8层校验流程(限时公开)
  • Cadence SPB模块复用实战:从原理图到PCB的自动化布局
  • 3分钟快速上手:ncmdumpGUI轻松解密网易云音乐NCM文件完整指南
  • 源码剖析:NVMe-snsd核心组件snsd_switch.c的架构设计
  • 【UE Niagara】从零构建:打造随风摇曳的蒲公英粒子特效
  • 装配式钢结构除锈喷涂车间通风 易互德耐腐防爆布风管适配重防腐工况
  • Vue 登录密码为什么要 RSA 加密?一文讲透前后端实现
  • JMeter TCP服务器压力测试实战:从协议解析到性能瓶颈定位
  • 老旧电视优化终极指南:MyTV-Android轻量级直播应用让安卓电视重获新生
  • 【实战】基于Altera FPGA与三速以太网IP核的MDIO配置与数据包接收调试全解析
  • 2026优质方矩管厂家甄选,全链精工生产赋能基建新能源工程建设
  • 【金蝶云星空】赠品业务对存货核算有什么影响?
  • SRA宏基因组数据提交实战:从Attribute填坑到Metadata避雷
  • 【实战解析】从零构建高精度果蔬识别模型:TensorFlow 2.3与MobileNet的融合应用
  • 华为OD机试2025C卷-IPv4地址转换成整数[100分](Java_Python3_C++_C语言_JsNode_Go)实现100%通过率
  • AXI协议——1.1. 从总线到接口:AXI协议全景解析
  • 华为OD机试2025C卷-不等式是否满足约束并输出最大差[100分](Java_Python3_C++_C语言_JsNode_Go)实现100%通过率
  • 上海GEO优化服务推荐:企业如何让品牌进入AI搜索答案?推荐了解 OurGEO
  • 现代前端的极致性能 icon 加载方案(死磕成功版)