Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.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
Python绘制fft.rfft的频率_Python_Plot_Fft_Analysis_Frequency - Fatal编程技术网

Python绘制fft.rfft的频率

Python绘制fft.rfft的频率,python,plot,fft,analysis,frequency,Python,Plot,Fft,Analysis,Frequency,这是我关于stackoverflow的第一个问题,我希望我不会犯大错误。 我正在分析一组采样率为1 Hz的时间序列。为了研究它们的光谱,我需要画出它们的傅里叶变换图 这是我的一段代码: from obspy.core import read import numpy as np import matplotlib.pyplot as plt st = read('../SC_noise/*HEC_109C*_s', format='SAC') stp = st.copy() stp.detr

这是我关于stackoverflow的第一个问题,我希望我不会犯大错误。 我正在分析一组采样率为1 Hz的时间序列。为了研究它们的光谱,我需要画出它们的傅里叶变换图

这是我的一段代码:

from obspy.core import read
import numpy as np 
import matplotlib.pyplot as plt

st = read('../SC_noise/*HEC_109C*_s', format='SAC')
stp = st.copy()
stp.detrend('linear')
stp.taper('cosine')

for tr in stp:
  dataonly = tr.data
  spec = np.fft.rfft(dataonly)
  plt.plot(abs(spec))
  plt.show()
这很好:情节和我使用SAC得到的一样。但是xaxis没有显示频率。我四处转转,发现了不同的想法:没有一个是有效的。 例如,在fft的情况下(这里我使用rfft),这应该可以完成这项工作

samp_rate=1
freq = np.fft.fftfreq(len(spec), d=1./samp_rate)
但如果我用它,它会给我负频率

有人有主意吗? 非常感谢您的帮助


Piero

如果您的NumPy版本足够新(1.8或更高版本),请使用。否则,这里是:

def rfftfreq(n, d=1.0):
    """
Return the Discrete Fourier Transform sample frequencies
(for usage with rfft, irfft).

The returned float array `f` contains the frequency bin centers in cycles
per unit of the sample spacing (with zero at the start). For instance, if
the sample spacing is in seconds, then the frequency unit is cycles/second.

Given a window length `n` and a sample spacing `d`::

f = [0, 1, ..., n/2-1, n/2] / (d*n) if n is even
f = [0, 1, ..., (n-1)/2-1, (n-1)/2] / (d*n) if n is odd

Unlike `fftfreq` (but like `scipy.fftpack.rfftfreq`)
the Nyquist frequency component is considered to be positive.

Parameters
----------
n : int
Window length.
d : scalar, optional
Sample spacing (inverse of the sampling rate). Defaults to 1.

Returns
-------
f : ndarray
Array of length ``n//2 + 1`` containing the sample frequencies.

Examples
--------
>>> signal = np.array([-2, 8, 6, 4, 1, 0, 3, 5, -3, 4], dtype=float)
>>> fourier = np.fft.rfft(signal)
>>> n = signal.size
>>> sample_rate = 100
>>> freq = np.fft.fftfreq(n, d=1./sample_rate)
>>> freq
array([ 0., 10., 20., 30., 40., -50., -40., -30., -20., -10.])
>>> freq = np.fft.rfftfreq(n, d=1./sample_rate)
>>> freq
array([ 0., 10., 20., 30., 40., 50.])

"""
    if not (isinstance(n,int) or isinstance(n, integer)):
        raise ValueError("n should be an integer")
    val = 1.0/(n*d)
    N = n//2 + 1
    results = arange(0, N, dtype=int)
    return results * val