2

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

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

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

谢谢

4

2 回答 2

2

阈值的numpy 解决方案将比列表推导或 lambda 更快,并且更易于编写和阅读,并且无论如何您可能会使用 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,但它基本上只是做上面的事情。

关于阈值的问题,完全取决于信号和噪声的性质,因此没有好的经验法则。例如,如果您知道样本的一部分只是噪声,那么该怎么做就很明显了;如果您不这样做并且您的信号与噪声完全一样,那么您根本不应该设置阈值。这取决于细节。

于 2013-06-25T02:54:06.110 回答
1

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

>>> print [n if n > 5 else 0 for n in [100, 2, 50, 4, 15, 7]]

这个关于统计数据的问题可能会为确定阈值提供一些见解。

于 2013-06-24T23:52:23.027 回答