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

本文提出了一种新的频率加权能量度量方法,使用信号导数的包络,以改善对瞬时能量的测量。相比于Teager-Kaiser算子,包络导数算子在新生儿脑电图检测中表现出更高的性能,无需后处理滤波器,其AUC从0.57提高到0.80。该算子同样能跟踪瞬时幅度和频率。
摘要由CSDN通过智能技术生成

👨‍🎓个人主页:研学社的博客    

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

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

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

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

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Python、Matlab代码实现


💥1 概述

文献来源:

 瞬时能量的信号处理测量通常只包括幅度信息。但是,包括幅度和频率的测量在评估系统产生信号所需的能量方面做得更好,这使得它们成为更敏感的测量,可以包含在脑电图(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 运行结果

 

 

 

主函数代码:

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代码实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝科研社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值