簡體   English   中英

如何使用FFT查找方波的頻率

[英]How to find frequency of a square wave using FFT

在FFT(第二個)圖中,與其他頻率相比,我期望在頻率= 1.0處有一個更大的峰值,因為它是在5Hz采樣的1Hz方波信號。

我是一個初學者,可能在這里錯過了一些愚蠢的事情。

import numpy as np
from matplotlib import pyplot as plt
from scipy import signal
t500 = np.linspace(0,5,500,endpoint=False)
s1t500 = signal.square(2*np.pi*1.0*t500)

第一個圖顯示了以5Hz采樣5秒鍾的1 Hz方波:

t5 = np.linspace(0,5,25,endpoint=False)
t5 = t5 + 1e-14
s1t5 = signal.square(2.0*np.pi*1.0*t5)
plt.ylim(-2,2); plt.plot(t500,s1t500,'k',t5,s1t5,'b',t5,s1t5,'bo'); plt.show()

1 Hz方波以5Hz采樣

在第二張圖中,我期望f = 1 Hz時的幅度大於f = 2時的幅度。 我想念什么嗎?

y1t5 = np.fft.fft(s1t5)
ff1t5 = np.fft.fftfreq(25,d=0.2)
plt.plot(ff1t5,y1t5); plt.show()

1 Hz方波以5Hz采樣的FFT

似乎您錯過了以下事實:傅立葉變換會在復雜空間中生成函數(或在DFT / FFT情況下為數字序列):

>>> np.fft.fft(s1t5)
[ 5. +0.j          0. +0.j          0. +0.j          0. +0.j          0. +0.j
  5.-15.38841769j  0. +0.j          0. +0.j          0. +0.j          0. +0.j
  5. +3.63271264j  0. +0.j          0. +0.j          0. +0.j          0. +0.j
# and so on

為了查看曲線圖上的振幅頻譜,請應用np.absoluteabs

>>> np.absolute(np.fft.fft(s1t5))
[  5.           0.           0.           0.           0.          16.18033989
   0.           0.           0.           0.           6.18033989   0.           0.
   0.           0.           6.18033989   0.           0.           0.           0.
   16.18033989  0.           0.           0.           0.        ]

否則,將僅顯示實部。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM