1
我不確定詢問這個問題的最佳方式,所以我提前道歉。用數組掩蓋Numpy掩碼
我試圖在音頻信號的NxM numpy陣列的每一行上找到峯值。數組中的每一行都是單獨處理的,我希望對於頻率空間中的每個N,在噪聲基底上獲得一定數量的標準偏差。在這個實驗中,我知道我沒有400Hz以上的信號,所以我使用它作爲我的本底噪聲。我試圖掩蓋時遇到問題。這裏是我的代碼片段:
from scipy import signal
import numpy as np
Pxx_den = signal.periodogram(input, fs=sampleRate ,nfft=sampleRate,axis=1)
p = np.array(Pxx_den)[1].astype(np.float)
noiseFloor = np.mean(p[:,400:],axis=1)
stdFloor = np.std(p[:,400:],axis=1)
p = np.ma.masked_less(p,noiseFloor+stdFloor*2)
這個例子會產生一個錯誤:
ValueError: operands could not be broadcast together with shapes (91,5001) (91,)
我推斷,這是因爲ma.masked_less處理單個值,並在不採取陣列。我希望輸出是一個大於條件的NxM數組值。有沒有一個Numpy的方式做我想做的或有效的替代品?
我也看過一些峯值檢測例程,如peakUtils和scipy.signal.find_peaks_cwt(),但它們似乎只對一維數組起作用。
在此先感謝
這似乎已經成功了。謝謝! – nanoPhD