为小波变换选择*最佳*带宽

时间:2017-02-02 21:32:29

标签: python scipy signal-processing wavelet wavelet-transform

转换1-D连续信号数据并为给定的带宽/比例生成一系列变换。现在如何自动选择给定范围内的最佳带宽或比例?

示例:在图表中,深蓝色线是原始的1D连续信号数据。每隔一条曲线就是一系列带宽[10,20,30,40,50]的数据转换。对于此示例,如何自动选择捕获最佳曲线变化的带宽

注意:答案可以Python具体或非常一般地说明如何计算"最佳"带宽。

import numpy 
import matplotlib.pyplot as plt
from scipy.signal import ricker, cwt

data         #numpy.ndarray
# data = ([11,  8,  8,  2,  2,  4,  4,  4,  4,  3,  3,  5,  5,  9, 12, 17, 19, 19, 20, 19, 19, 14, 12, 11,  9,  6,  4,  3,  3,  2,  2,  6,  9, 12, 16, 17, 19, 20, 20, 19, 17, 15, 13,  9,  7,  6,  5,  3,  2,  4], dtype=int64)
bandwidths = np.arange(10, 60, 10)
cwt_data = cwt(data, ricker, bandwidths)   #transforms the data
plt.plot(cwt_speed.T, label='Transformed data')
plt.plot(speed, label='original data', linewidth=2)
plt.legend()

enter image description here

1 个答案:

答案 0 :(得分:1)

对于此类问题,您可以使用Welch的方法scipy.signal.welch来识别给定频率所承载的波的预期功效。

enter image description here

这种方法的简单解释是它在几个持续时间内对重叠的频率范围进行带宽,并通过连续平均确定每个频率所代表的信噪比。

有几种方法可以使用此分析来选择卷积的带通。

我建议您查看PSD并识别功率偏离1 / f曲线的频谱中的局部最大值。较低的频率范围通常是更好的统计拟合(除非您的信号携带明确的编码振荡信号),因此选择总体最大值将受此影响。

对于您正在使用的未编码信号(神经数据,历史趋势,观察数据等),我们通常更关注“碰撞”的位置。在曲线上出现,因为那些表明振荡驱动器携带信号的一部分频率。这样,由于随机性,我们可以代表重要信息而非最佳匹配。