我正在使用DAQ对正弦电压进行采样。我将样本存储在一个列表中,然后对该列表进行FFT。我的问题是,我只想获得正弦波的完整周期的FFT,所以我想找到列表的索引值,其中的值非常接近于零,这样我就可以将其他值更改为零。
例如,如果我有一个非常粗糙的正弦波,采样如下:
[-3, -2, -1, 0, 1, 2, 3, 4, 3, 2, 1, 0, -1, -2, -3, 4, -3, -2, -1, 0, 1, 2]我想要检测零(实际上是每隔一个零),这样我就可以生成这个数组:
[ 0, 0, 0, 0, 1, 2, 3, 4, 3, 2, 1, 0, -1, -2, -3, -4, -3, -2, -1, 0, 0, 0]另一件事是,由于存在噪声,并且我的采样频率不是无限大的,所以我不会得到恰好为零的值。因此,我需要查找一个范围内的值,比如range(-0.1,0.1)。
我查看了numpy库,numpy.where()看起来可能是正确的工具,但我在实现它时遇到了问题。我是一个EE,几乎没有编程经验,所以任何帮助都是非常感谢的!
发布于 2013-06-13 08:12:08
>>> l = np.array([-3, -2, -1, 0, 1, 2, 3, 4, 3, 2, 1, 0, -1, -2, -3, 4, -3, -2, -1, 0, 1, 2])
>>> epsilon = 1
>>> inds = np.argwhere(np.abs(l) < epsilon) # indices of “almost zero” items
>>> left = inds[0] # index of the first “almost zero” value
>>> right = inds[-1] # -//- last
>>> l[:left + 1] = 0 # zero out everything to the left and including the first “almost zero”
>>> l[right:] = 0 # -//- last
>>> l
>
array([ 0, 0, 0, 0, 1, 2, 3, 4, 3, 2, 1, 0, -1, -2, -3, 4, -3,
-2, -1, 0, 0, 0])发布于 2013-06-14 03:00:31
你的回答是非常有用的kirelagin,但我对你将值设置为0的部分有问题。我对Python不是很有经验,但在我看来,您不能像在某些语言中那样用等号填充数组。取而代之的是,我最终做了这样的事情:
epsilon = 1
length = len(l)
inds = np.argwhere(np.abs(l)<epsilon)
left = inds[0]
right = inds[-1]
del l[:left]
del l[right-left+1:]
for x in range (0,left):
l.insert(x,0)
endzeros = length - right -1
for x in range (0, endzeros):
l.append(0)insert函数将0添加到数组的开头,append函数将0添加到数组的末尾。这个解决方案对我来说工作得很好,尽管我确信有一种更优雅的方法可以用我不知道的不同值来替换数组中的值。
https://stackoverflow.com/questions/17077310
复制相似问题