【能量算子】评估 EEG 中的瞬时能量:非负、频率加权能量算子(Python&Matlab代码实现)

简介: 【能量算子】评估 EEG 中的瞬时能量:非负、频率加权能量算子(Python&Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥


🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。


⛳️座右铭:行百里者,半于九十。


📋📋📋本文目录如下:🎁🎁🎁


目录


💥1 概述


📚2 运行结果


🎉3 参考文献


🌈4 Python、Matlab代码实现


💥1 概述

文献来源:


6d964ecc46d649749a11f0f83fcb4e5b.png


瞬时能量的信号处理测量通常只包括幅度信息。但是,包括幅度和频率的测量在评估系统产生信号所需的能量方面做得更好,这使得它们成为更敏感的测量,可以包含在脑电图(EEG)分析中。Teager-Kaiser算子是EEG分析中经常使用的频率加权度量,尽管该算子在常见信号处理概念方面的定义很差。我们提出了一种替代的频率加权能量度量,它使用信号导数的包络。这种简单的包络导数算子具有非负的优点,当应用于新生儿脑电图的检测应用时,它比Teager-Kaiser算子提高了性能:在没有后处理滤波器的情况下,Teager-Kaiser算子的接收器工作特性曲线(AUC)下面积为0.57,包络导数算子为0.80。包络导数算子还满足与 Teager-Kaiser 算子类似的重要属性,例如跟踪瞬时幅度和频率。


原文摘要:


Abstract:

Signal processing measures of instantaneous energy typically include only amplitude information. But measures that include both amplitude and frequency do better at assessing the energy required by the system to generate the signal, making them more sensitive measures to include in electroencephalogram (EEG) analysis. The Teager-Kaiser operator is a frequency-weighted measure that is frequently used in EEG analysis, although the operator is poorly defined in terms of common signal processing concepts. We propose an alternative frequency-weighted energy measure that uses the envelope of the derivative of the signal. This simple envelope- derivative operator has the advantage of being nonnegative, which when applied to a detection application in newborn EEG improves performance over the Teager-Kaiser operator: without post-processing filters, area-under the receiver-operating characteristic curve (AUC) is 0.57 for the Teager-Kaiser operator and 0.80 for the envelope-derivative operator. The envelope-derivative operator also satisfies important properties, similar to the Teager-Kaiser operator, such as tracking instantaneous amplitude and frequency.


能量是一个难以在信号处理环境中定义的术语。信号处理的定义与物理学中使用的定义不同,物理学是衡量系统中完成的工作(或可以完成的工作)的度量,因为我们通常不知道或无法访问生成信号的系统。例如,信号处理定义仅评估幅度,并为两个单位幅度信号分配相同的值,一个在1 Hz,另一个在1 000 Hz,即使生成这些信号的能量(完成的工作)可能不同。


为了解决这一不足,Kaiser根据Teager以前未发表的工作提出了一种能量测量,不仅包括幅度,还包括信号的频率[1]。使用这个Teager-Kaiser定义,不同频率的单位幅度信号显示出不同的能量。这个定义通常被称为非线性能量算子,也不同于经典的能量测量,因为它是一种瞬时测量;也就是说,它是时间的函数,可以跟踪信号的变化,从而跟踪系统能量的变化。


这种Teager-Kaiser测量已被应用于生物医学信号处理的许多领域,包括脑电图(EEG)分析[2],[3]。这个Teager-Kaiser算子的一个局限性是解释:测度是包含二阶微分方程的非线性系统的输出。在大多数脑电图应用中,操作员有大量的后处理,这让人怀疑这种措施的适用性。我们建议从信号处理前景研究Teager-Kaiser算子,并在新生儿记录的脑电图数据集上测试我们的结论。


📚2 运行结果


c007d1a918ac4e9cb940d25d66139c1e.png

605f96e3965d412e809c3a3cf525beef.png

0b63aa741969447a8d18350428d99856.png

d1083e9956954526b19e32fe13a5cb94.png

1c787cd6e2de48d689d2b22cf2aa9395.png


主函数代码:

print('\n' + start_message)
# -------------------------------------------------------------------
# Test #1: EDO with sum of 2 sinusoids
# -------------------------------------------------------------------
print('\n\n ------------------------------------------')
print(' 1. test EDO and compare with Teager-Kaiser operator')
# 1. generate 2 sinusoidal signals
N = 256
n = np.arange(N)
w = (np.pi / (N / 32), np.pi / (N / 8))
ph = (-np.pi + 2 * np.pi * np.random.rand(1),
      -np.pi + 2 * np.pi * np.random.rand(1))
a = (1.3, 3.1)
x = a[0] * np.cos(w[0] * n + ph[0]) + a[1] * np.cos(w[1] * n + ph[1])
# 2. estimate the EDO
x_edo = edo.gen_edo(x, True)
# 3. generate Teager--Kaiser operator for comparison:
x_nleo = general_nleo.specific_nleo(x, type='teager')
# 4. plot
fig, ax = plt.subplots(nrows=2, ncols=1, num=1, clear=True)
ax[0].plot(x, '-', label='test signal')
ax[1].plot(x_edo, '-', label='EDO')
ax[1].plot(x_nleo, label='Teager-Kaiser')
ax[0].legend(loc='upper right')
ax[1].legend(loc='upper left')
plt.pause(0.0001)
input("\n Any key to continue...")
# -------------------------------------------------------------------
# Test #2: EDO with Gaussian white noise
# -------------------------------------------------------------------
print('\n\n ------------------------------------------')
print(' 2. test EDO with Gaussian random noise')
# 1. test with random signal:
edo.test_edo_random()
input("\n Any key to continue...")
# -------------------------------------------------------------------
# Test #3: EDO with 4 different signal types
# -------------------------------------------------------------------
print('\n\n ------------------------------------------')
print(' 3. test EDO with different types and plot against expected ')
print('    frequency-weighted energy')
# 2. test with lots of different signals:
test_edo.do_all_tone_tests()
input("\n Any key to continue...")
# -------------------------------------------------------------------
# Test #4: compare different versions of the NLEO operator of the form:
# Ψ(n) = x(n-l)x(n-p) - x(n-q)x(n-s)
# -------------------------------------------------------------------
print('\n\n ------------------------------------------')
print(' 4. compare different NLEO of the form: x(n-l)x(n-p) - x(n-q)x(n-s)')
# 1. get test signal:
x1 = gen_test_signals.gen_signals('4', False)
# 2. compare methods based on the general NLEO expression:
general_nleo.test_compare_nleos(x1['x'], True)
input("\n Any key to finish.")
# -------------------------------------------------------------------
# compare with Matlab
# -------------------------------------------------------------------
# from test_functions import compare_matlab as cmp
# # load .csv files and compare with Matlab:
# cmp.test_compare_all_files()


🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。


[1] JM O' Toole, A Temko, NJ Stevenson, “Assessing instantaneous energy in the

EEG: a non-negative, frequency-weighted energy operator”, IEEE Int. Conf.

on Eng. in Medicine and Biology, Chicago, August 2014


🌈4 Python、Matlab代码实现


相关文章
|
22天前
|
开发框架 数据建模 中间件
Python中的装饰器:简化代码,增强功能
在Python的世界里,装饰器是那些静悄悄的幕后英雄。它们不张扬,却能默默地为函数或类增添强大的功能。本文将带你了解装饰器的魅力所在,从基础概念到实际应用,我们一步步揭开装饰器的神秘面纱。准备好了吗?让我们开始这段简洁而富有启发性的旅程吧!
29 6
|
15天前
|
数据可视化 Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
57 8
|
22天前
|
API Python
【Azure Developer】分享一段Python代码调用Graph API创建用户的示例
分享一段Python代码调用Graph API创建用户的示例
45 11
|
24天前
|
测试技术 Python
探索Python中的装饰器:简化代码,增强功能
在Python的世界中,装饰器是那些能够为我们的代码增添魔力的小精灵。它们不仅让代码看起来更加优雅,还能在不改变原有函数定义的情况下,增加额外的功能。本文将通过生动的例子和易于理解的语言,带你领略装饰器的奥秘,从基础概念到实际应用,一起开启Python装饰器的奇妙旅程。
35 11
|
20天前
|
Python
探索Python中的装饰器:简化代码,增强功能
在Python的世界里,装饰器就像是给函数穿上了一件神奇的外套,让它们拥有了超能力。本文将通过浅显易懂的语言和生动的比喻,带你了解装饰器的基本概念、使用方法以及它们如何让你的代码变得更加简洁高效。让我们一起揭开装饰器的神秘面纱,看看它是如何在不改变函数核心逻辑的情况下,为函数增添新功能的吧!
|
21天前
|
程序员 测试技术 数据安全/隐私保护
深入理解Python装饰器:提升代码重用与可读性
本文旨在为中高级Python开发者提供一份关于装饰器的深度解析。通过探讨装饰器的基本原理、类型以及在实际项目中的应用案例,帮助读者更好地理解并运用这一强大的语言特性。不同于常规摘要,本文将以一个实际的软件开发场景引入,逐步揭示装饰器如何优化代码结构,提高开发效率和代码质量。
44 6
|
25天前
|
Python
Python编程入门:从零开始的代码旅程
本文是一篇针对Python编程初学者的入门指南,将介绍Python的基本语法、数据类型、控制结构以及函数等概念。文章旨在帮助读者快速掌握Python编程的基础知识,并能够编写简单的Python程序。通过本文的学习,读者将能够理解Python代码的基本结构和逻辑,为进一步深入学习打下坚实的基础。
|
4月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
226 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
4月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
142 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
4月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
111 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码