0

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

示例:图表中,深蓝色线为原始一维连续信号数据。每隔一条曲线是该数据在带宽范围内的转换 [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()

在此处输入图像描述

4

1 回答 1

1

对于这种类型的问题,您可以使用 Welch 的方法scipy.signal.welch来确定给定频率所携带的波的预期功率。

在此处输入图像描述

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

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

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

对于看起来像您正在使用的未编码信号(神经数据、历史趋势、观察数据等),我们通常更关心曲线上的“颠簸”发生的位置,因为它们表明在哪个频率振荡驱动携带部分信号。这样,我们就可以表示重要信息,而不是由于随机性而导致的最佳拟合。

于 2017-02-03T18:47:45.643 回答