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