python快速傅里叶系数滤波和阈值决定

时间:2013-06-24 23:50:29

标签: python lambda fft

我正在尝试分析长期浮点数序列。我想对数字进行快速傅立叶变换,然后去掉低系数。有两个问题:

1如何以有效的方式将这些噪声系数效率小于阈值设置为0。 例如,Arr = [100,2,50,4,15,7],阈值= 5,返回= [100,0,50,0,15,7]。我怀疑我应该使用lambda相关的技巧,但我仍然是Python的新手

2是否有拇指规则决定阈值,有经验的FFT或信号处理的人请帮忙。

由于

2 个答案:

答案 0 :(得分:2)

阈值的 numpy解决方案将比列表推导或lambdas更快,并且更容易编写和读取,并且您可能正在使用numpy用于FFT:

import numpy as np
Arr=np.array([100, 2, 50, 4, 15, 7])

Arr[Arr<8] = 0  
# array([100, 0, 50, 0, 15, 0])

还有scipy.stats.threshold,但它基本上就是上面的内容。

关于阈值的问题,它完全取决于信号的性质和噪声,所以没有好的经验法则。例如,如果你知道的样本的一部分只是噪声,那么相当明显该做什么;如果你不这样做,你的信号就像噪音一样,那么你就不应该达到门槛。这取决于细节。

答案 1 :(得分:1)

你的第一个问题甚至不需要lambda,而是你可以使用列表推导。

>>> print [n if n > 5 else 0 for n in [100, 2, 50, 4, 15, 7]]
关于统计数据的

This question可能会提供有关确定阈值的一些见解。