繁体   English   中英

选择*最佳*带宽进行小波变换

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM