如何在Python中计算小波能量与香农熵比来选择最佳母离散小波?

问题描述 投票:0回答:3

我正在对传感器数据进行小波分析,但是,我意识到有很多小波族可供选择。我读过一篇文章说:“该方法首先使用最大能量与香农熵比的准则来选择合适的小波基进行信号分析”。那么,我想知道如何用python计算传感器信号的能量与香农熵比?

python wavelet
3个回答
1
投票

假设文本含义的最佳猜测:np.max(总能量/总熵)|小波

import pywt
import numpy as np

#series - input data
#wave   - current wavelet
data=pywt.wavedec(series,wave)
S=0
Etot=0
for d in data:
    E=d**2
    P=E/np.sum(E)
    S+=-np.sum(P*np.log(P))
    Etot+=np.sum(E)
ratio=Etot/S

然后对每个候选小波重复


1
投票

我认为 NRG 的代码有混乱。

import pywt
import numpy as np
#series - input data
#wave   - current wavelet
data=pywt.wavedec(series,wave)
S=0
Etot=0
for d in data:
    E=d**2
    Etot+=np.sum(E)
    P=E/Etot
    S+=-np.sum(P*np.log(P))
ratio=Etot/S

即 Etot 和 np.sum(E)


0
投票

虽然NRG的代码具有代表性,但我认为上面熵的计算是错误的,因为我们需要在计算熵之前首先离散化小波系数的分布。这是一个稍微修改过的版本(基于他们的代码)来说明这一点:

import pywt
import numpy as np

#series - input data
#wave   - current wavelet
data = pywt.wavedec(series,wave)
S = 0
Etot = 0
for d in data:
    E = d**2
    P = E / np.sum(E) #the normalization is not strictly necessary...
    P_counts, _ = np.histogram(P) #discretize the distribution of coefficients
    P_counts = P_counts / sum(P_counts) #converts the counts into probabilities
    S += -np.sum(P_counts * np.log(P_counts)) #compute the entropy
    Etot += np.sum(E)
ratio = Etot/S

可以在不同的小波族之间使用固定/一致的直方图分箱策略,以获得不同小波之间更稳定的结果,即,如果您在使用某种分箱策略(例如 Doane 分箱)时按上述方法测试 Haar 小波,则使用相同的直方图分箱策略是有意义的测试其他小波时的分箱策略,以便可以比较获得的比率。

© www.soinside.com 2019 - 2024. All rights reserved.