基于这篇关于脑-机接口的论文,我想用离散小波变换提取时频域特征,然后用给定的方程计算能量和熵。
所以我选择了python中的pywt,现在我有以下代码来从每个频带获得小波和熵(例如,我使用D2 ),here是数据的链接:
import numpy as np
data = np.loadtxt('data.txt')
import pywt
cA5, cD5, cD4, cD3, cD2, cD1 = pywt.wavedec(data,'db4',mode='symmetric',level= 5)
Ent = 0
for d in data:
E = d**2
p = cD2 * E
Ent -= np.sum( np.abs( p * np.log(p) ) )
print(Ent)
但是我得到了每个频带的熵的nan
。如何解决小波熵的NaN值问题?
发布于 2021-10-15 16:54:23
你的问题是由小波变换得到的第二频带中的负数。负数的对数导致使用numpy
的nan
和使用python的math
库的ValueError: math domain error
引发的异常。
顺便说一句,我认为你在实施这个公式时犯了一个错误。我认为这是正确的实现:
ENT2 = -np.dot(np.log(np.square(cD2)), np.square(cD2))
ENG = np.square(cD2).sum()
https://stackoverflow.com/questions/69586580
复制相似问题