将Numpy阵列转换为正弦波信号进行傅立叶分析

f8rj6qna  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(102)

我有一个很长的表格数据,简单的峰值幅度测量相对于时间,即间隔1分钟的一维阵列索引。

>>> a = np.array([5, 7, -6, 9, 0, 1, 15, -2, 8]) 
#array is of length of many thousands readings taken on interval of 1 minute. 
#The index represents 1-minute interval.

字符串
如何将这个NumPy数组转换为可以在NumPy numpy.fft或任何其他库中对其执行FFT的“信号”?

uurv41yg

uurv41yg1#

您可以使用np.fft.fft执行FFT:

import numpy as np

a = np.array([5, 7, -6, 9, 0, 1, 15, -2, 8]) 

a_fft = np.fft.fft(a)

字符串
输出量:

array([ 37.         +0.j        ,   2.1617886 +10.12019119j,
         3.88830807 -3.48605171j,  25.         -1.73205081j,
       -27.05009668 +1.98221437j, -27.05009668 -1.98221437j,
        25.         +1.73205081j,   3.88830807 +3.48605171j,
         2.1617886 -10.12019119j])

kokeuurv

kokeuurv2#

您可以生成一个1分钟间隔的时间数组,然后将其转换为时间序列,因为您的数据以1分钟的间隔显示峰值幅度。首先,应创建一个均匀间隔的时间序列。

import numpy as np

a = np.array([5, 7, -6, 9, 0, 1, 15, -2, 8])

# Sample rate (1 sample per minute)
sample_rate = 1  # samples per minute

# a time array
time = np.arange(0, len(a)) / sample_rate  
# Your data 'a', and the appropriate time values are in 'time'.  

# using numpy.fft library 
import matplotlib.pyplot as plt

# Perform FFT on the data
fft_result = np.fft.fft(a)

# Calculate the frequency axis
frequencies = np.fft.fftfreq(len(a), d=1/sample_rate)

# Plot the FFT result
plt.plot(frequencies, np.abs(fft_result))
plt.xlabel('Frequency (Hz)')
plt.ylabel('Amplitude')
plt.title('FFT Result')
plt.grid()
plt.show()

字符串

相关问题