【能量算子】评估 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代码实现


相关文章
|
4天前
|
开发者 Python
探索Python中的装饰器:简化代码,增强功能
【10月更文挑战第22天】在Python的世界里,装饰器是一个强大的工具,它能够让我们以简洁的方式修改函数的行为,增加额外的功能而不需要重写原有代码。本文将带你了解装饰器的基本概念,并通过实例展示如何一步步构建自己的装饰器,从而让你的代码更加高效、易于维护。
|
1天前
|
算法 测试技术 开发者
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗;代码审查通过检查源代码发现潜在问题,提高代码质量和团队协作效率。本文介绍了一些实用的技巧和工具,帮助开发者提升开发效率。
6 3
|
5天前
|
开发框架 Python
探索Python中的装饰器:简化代码,增强功能
【10月更文挑战第20天】在编程的海洋中,简洁与强大是航行的双桨。Python的装饰器,这一高级特性,恰似海风助力,让代码更优雅、功能更强大。本文将带你领略装饰器的奥秘,从基础概念到实际应用,一步步深入其内涵与意义。
|
4天前
|
机器学习/深度学习 缓存 数据挖掘
Python性能优化:提升你的代码效率
【10月更文挑战第22天】 Python性能优化:提升你的代码效率
8 1
|
6天前
|
机器人 Shell Linux
【Azure Bot Service】部署Python ChatBot代码到App Service中
本文介绍了使用Python编写的ChatBot在部署到Azure App Service时遇到的问题及解决方案。主要问题是应用启动失败,错误信息为“Failed to find attribute 'app' in 'app'”。解决步骤包括:1) 修改`app.py`文件,添加`init_func`函数;2) 配置`config.py`,添加与Azure Bot Service认证相关的配置项;3) 设置App Service的启动命令为`python3 -m aiohttp.web -H 0.0.0.0 -P 8000 app:init_func`。
|
10天前
|
数据处理 开发者 Python
Python中的列表推导式:一种优雅的代码简化技巧####
【10月更文挑战第15天】 本文将深入浅出地探讨Python中列表推导式的使用,这是一种强大且简洁的语法结构,用于从现有列表生成新列表。通过具体示例和对比传统循环方法,我们将揭示列表推导式如何提高代码的可读性和执行效率,同时保持语言的简洁性。无论你是Python初学者还是有经验的开发者,掌握这一技能都将使你的编程之旅更加顺畅。 ####
16 1
|
4天前
|
缓存 算法 数据处理
Python性能优化:提升代码效率与速度的秘诀
【10月更文挑战第22天】Python性能优化:提升代码效率与速度的秘诀
8 0
|
2月前
|
人工智能 数据挖掘 数据处理
揭秘Python编程之美:从基础到进阶的代码实践之旅
【9月更文挑战第14天】本文将带领读者深入探索Python编程语言的魅力所在。通过简明扼要的示例,我们将揭示Python如何简化复杂问题,提升编程效率。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开一扇通往高效编码世界的大门。让我们开始这段充满智慧和乐趣的Python编程之旅吧!
|
6月前
|
算法 编译器 开发者
如何提高Python代码的性能:优化技巧与实践
本文探讨了如何提高Python代码的性能,重点介绍了一些优化技巧与实践方法。通过使用适当的数据结构、算法和编程范式,以及利用Python内置的性能优化工具,可以有效地提升Python程序的执行效率,从而提升整体应用性能。本文将针对不同场景和需求,分享一些实用的优化技巧,并通过示例代码和性能测试结果加以说明。
|
1月前
|
大数据 Python
Python 高级编程:深入探索高级代码实践
本文深入探讨了Python的四大高级特性:装饰器、生成器、上下文管理器及并发与并行编程。通过装饰器,我们能够在不改动原函数的基础上增添功能;生成器允许按需生成值,优化处理大数据;上下文管理器确保资源被妥善管理和释放;多线程等技术则助力高效完成并发任务。本文通过具体代码实例详细解析这些特性的应用方法,帮助读者提升Python编程水平。
52 5