【发布时间】:2016-05-20 01:23:09
【问题描述】:
我不确定提出这个问题的最佳方式,所以我提前道歉。
我正在尝试在 NxM numpy 音频信号数组的每一行上找到一个峰值。数组中的每一行都是单独处理的,我希望在频率空间中为数组中的每个 N 获得高于噪声基底一定数量的标准偏差的所有值。在这个实验中,我知道我没有高于 400Hz 的信号,所以我将其用作本底噪声。我在尝试掩盖时遇到了问题。这是我的代码 sn-p:
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(),但它们似乎只作用于一维数组。
提前致谢
【问题讨论】: