[英]Choose the *best* bandwidth for wavelet transformation
转换一维连续信号数据,并生成给定带宽/比例的一系列转换。 现在如何自动选择最佳带宽或在给定范围内进行缩放?
示例:在图表中,深蓝色线是原始的一维连续信号数据。 每隔一条曲线是针对一定带宽范围[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()
对于此类问题,您可以使用Welch的scipy.signal.welch
方法来确定给定频率携带的电波的预期功率。
此方法的简单解释是,它在几个时间段内使重叠的频率范围带通,并通过连续平均确定每个频率下表示的信噪比。
有两种方法可以使用此分析选择卷积带通。
我建议您查看PSD,并在频谱中找出功率偏离1 / f曲线的局部最大值。 较低的频率范围通常会更好地进行统计拟合(除非您的信号带有显式编码的振荡信号),因此选择整体最大值会受到该影响。
对于看起来像您正在使用的未编码信号(神经数据,历史趋势,观察到的数据等),我们通常更关注曲线上“凸点”的发生位置,因为这些信号指示振荡驱动器在哪个频率上携带部分信号。 这样,由于随机性,我们可以表示重要信息,而不是最佳拟合。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.