打印频域p的最高峰值

2024-10-01 15:33:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着在时间和频率域绘制我自制的四元曲线的振荡曲线。 如何在频域图中打印最高峰值的值?在

代码:

import matplotlib.pyplot as plt
import numpy as np
from scipy import fft, arange

csv = np.genfromtxt ('/Users/shaunbarney/Desktop/Results/quadOscillations.csv', delimiter=",",dtype=float)
x = csv[:,0]
y = csv[:,1]
x = x - 6318        #Remove start offset
av=0
for i in xrange(1097):      #Calculate average sampling time in seconds oscillations 
    if i == 1076:
        avSampleTime = av/1097000     # 
        break
    av = av + (x[i+1]-x[i])

Fs = 1/avSampleTime   #Average sampling freq.
n = 1079              #no.Samples
k = arange(n)
Ts = n/Fs
frq = k/Ts            #Frequency range two sided
frq = frq[range(n/2)] #Frequency range one sided
Y = fft(y)/n          #Fast fourier transfors
Y = Y[range(n/2)]     #Normalise

#        PLOTS

plt.subplot(2,1,1)
plt.plot(frq,abs(Y),'r') # plotting the spectrum
plt.xlabel('Freq (Hz)')
plt.ylabel('|Y(freq)|')
plt.grid('on')
plt.subplot(2,1,2)
plt.plot(x,y)
plt.xlabel('Time (ms)')
plt.ylabel('Angle (degrees)')
plt.grid('on')
plt.show()

结果如下:

enter image description here

谢谢, 肖恩


Tags: csvinimportfftasnprangeplt
2条回答

因为您使用的是numpy,所以只需使用^{}和{a2}来确定峰值以及峰值的位置,这样就可以将其打印到屏幕上。一旦找到这个位置,索引到频率数组中以获得最终坐标。在

假设所有变量都是在运行代码时创建的,只需执行以下操作:

mY = np.abs(Y) # Find magnitude
peakY = np.max(mY) # Find max peak
locY = np.argmax(mY) # Find its location
frqY = frq[locY] # Get the actual frequency value

peakY包含图中最大的幅值,frqY包含该最大值(即峰值)所在的频率。作为奖励,你可以在你的图表上用不同的颜色和一个更大的标记来区分它与主震级图。请记住,调用多个plot调用将只在当前焦点图的顶部追加。因此,画出你的光谱,然后把这一点标在光谱的顶部。我将使点的大小大于图的厚度,并用不同的颜色标记点。你也可以制作一个标题,反映这个最大的峰值和相应的位置。在

还要记住,这是在震级上进行的,因此在绘制实际震级之前,请简单地执行以下操作:

^{pr2}$
print("maximum of |Y| is: %.4g" % np.max(np.abs(Y)))

其他建议:使用数组切片:Y = Y[:n/2+1]而不是Y = Y[range(n/2)]。具有n个输入(n个偶数)的实值数据集的Fourier变换将具有n/2+1个频率分量。索引遗漏了最后一点。如果你的情况变得更棘手。在

旁注:最好提供一个独立的例子来回答这个问题,也就是说,这个例子不依赖于计算机上的文件。在

相关问题 更多 >

    热门问题