Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用heapq函数“nlargest”在python中查找FFT的峰值及其相应的频率_Python_Python 2.7_Numpy_Scipy_Fft - Fatal编程技术网

使用heapq函数“nlargest”在python中查找FFT的峰值及其相应的频率

使用heapq函数“nlargest”在python中查找FFT的峰值及其相应的频率,python,python-2.7,numpy,scipy,fft,Python,Python 2.7,Numpy,Scipy,Fft,我正在使用FFT来查看我正在设计的IC测试仪的输出信号的失真。我有两个数组,一个包含采样频率,另一个包含相应的FFT值。我已经能够使用heapq库中的nlargest函数打印出三个最高的FFT值,但我还想打印x轴阵列中相应的频率值。我的部分代码如下。频率值存储在数组“frq”中,FFT值存储在数组“Y”中 Y = sci.fft(y)/n # fft computing and normalization Y = Y[range(n/2)] Y = abs(Y) print heapq.nlar

我正在使用FFT来查看我正在设计的IC测试仪的输出信号的失真。我有两个数组,一个包含采样频率,另一个包含相应的FFT值。我已经能够使用heapq库中的nlargest函数打印出三个最高的FFT值,但我还想打印x轴阵列中相应的频率值。我的部分代码如下。频率值存储在数组“frq”中,FFT值存储在数组“Y”中

Y = sci.fft(y)/n # fft computing and normalization
Y = Y[range(n/2)]
Y = abs(Y)
print heapq.nlargest(3, 20*np.log10(abs(Y)))
print heapq.nlargest(3, frq, key=lambda i: Y[i])
我从最后一行代码中收到以下错误:

print heapq.nlargest(2, frq, key=lambda i: Y[i])
IndexError: index 500 is out of bounds for axis 0 with size 50

这里有一种方法可以给出3个元组,对应于最高的

from itertools import izip
print heapq.nlargest(3, izip(frq, 20*np.log10(abs(Y))), key=lambda x: x[1])
你也可以把Y放在第一位

print heapq.nlargest(3, izip(20*np.log10(abs(Y)), frq))

这里有一种方法可以给出3个元组,对应于最高的

from itertools import izip
print heapq.nlargest(3, izip(frq, 20*np.log10(abs(Y))), key=lambda x: x[1])
你也可以把Y放在第一位

print heapq.nlargest(3, izip(20*np.log10(abs(Y)), frq))
numpythonic的方法是完全跳过heapq,然后进行如下思考:

idx = np.argsort(Y)[::-1][:3]
y_top_3 = 20*np.log10(Y[idx])
f_top_3 = frq[idx]
如果您想获得一个iterable的iterable,您可以执行以下操作:

top_3 = np.vstack(f_top_3, y_top_3).T
numpythonic的方法是完全跳过heapq,然后进行如下思考:

idx = np.argsort(Y)[::-1][:3]
y_top_3 = 20*np.log10(Y[idx])
f_top_3 = frq[idx]
如果您想获得一个iterable的iterable,您可以执行以下操作:

top_3 = np.vstack(f_top_3, y_top_3).T

你确定你的意思不是:nlargest3,enumeratefrq,key=lambda i,:Y[i]你确定你的意思不是:nlargest3,enumeratefrq,key=lambda i,:Y[i]这很好用,现在我可以从FFT函数返回一个包含频率和FFT信息的数组。非常感谢。这很好,现在我可以从我的FFT函数返回一个包含频率和FFT信息的数组。非常感谢。