💥1 概述
文献来源:
瞬时能量的信号处理测量通常只包括幅度信息。但是,包括幅度和频率的测量在评估系统产生信号所需的能量方面做得更好,这使得它们成为更敏感的测量,可以包含在脑电图(EEG)分析中。Teager-Kaiser算子是EEG分析中经常使用的频率加权度量,尽管该算子在常见信号处理概念方面的定义很差。我们提出了一种替代的频率加权能量度量,它使用信号导数的包络。这种简单的包络导数算子具有非负的优点,当应用于新生儿脑电图的检测应用时,它比Teager-Kaiser算子提高了性能:在没有后处理滤波器的情况下,Teager-Kaiser算子的接收器工作特性曲线(AUC)下面积为0.57,包络导数算子为0.80。包络导数算子还满足与 Teager-Kaiser 算子类似的重要属性,例如跟踪瞬时幅度和频率。
原文摘要:
能量是一个难以在信号处理环境中定义的术语。信号处理的定义与物理学中使用的定义不同,物理学是衡量系统中完成的工作(或可以完成的工作)的度量,因为我们通常不知道或无法访问生成信号的系统。例如,信号处理定义仅评估幅度,并为两个单位幅度信号分配相同的值,一个在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