我正在尝试分析一个长期的浮点数序列。我想对数字进行快速傅立叶变换,然后删除低系数一。有两个问题:
1 如何以有效的方式将这些小于阈值的噪声系数效率设置为0。例如 Arr=[100, 2, 50, 4, 15, 7],阈值 = 5,返回 = [ 100, 0,50,0,15,7]。我怀疑我应该使用与 lambda 相关的技巧,但我还是 Python 的新手
2 是否有决定阈值的拇指规则,有FFT或信号处理经验的人请帮忙。
谢谢
阈值的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
,但它基本上只是做上面的事情。
关于阈值的问题,完全取决于信号和噪声的性质,因此没有好的经验法则。例如,如果您知道样本的一部分只是噪声,那么该怎么做就很明显了;如果您不这样做并且您的信号与噪声完全一样,那么您根本不应该设置阈值。这取决于细节。
对于第一个问题,您甚至不需要 lambda,而是可以使用列表推导。
>>> print [n if n > 5 else 0 for n in [100, 2, 50, 4, 15, 7]]
这个关于统计数据的问题可能会为确定阈值提供一些见解。