numpy
의 고속 푸리에 변환 구현에 어려움을 겪고 있습니다. 내 신호는주기적인 성격이 아니기 때문에 이상적인 후보는 아니지만 FFT의 결과는 내가 기대했던 것과는 거리가 멀다. 그것은 동일한 신호이며, 단순히 어떤 요인에 의해 뻗어 있습니다.numpy의 빠른 푸리에 변환으로 인해 예상치 못한 결과가 발생합니다.
import numpy as np
from matplotlib import pyplot as plt
signal = array([[ 0.], [ 0.1667557 ], [ 0.31103874], [ 0.44339886], [ 0.50747922],
[ 0.47848347], [ 0.64544846], [ 0.67861755], [ 0.69268326], [ 0.71581176],
[ 0.726552 ], [ 0.75032795], [ 0.77133769], [ 0.77379966], [ 0.80519187],
[ 0.78756476], [ 0.84179849], [ 0.85406538], [ 0.82852684], [ 0.87172407],
[ 0.9055542 ], [ 0.90563205], [ 0.92073452], [ 0.91178145], [ 0.8795554 ],
[ 0.89155587], [ 0.87965686], [ 0.91819571], [ 0.95774404], [ 0.95432073],
[ 0.96326252], [ 0.99480947], [ 0.94754962], [ 0.9818627 ], [ 0.9804966 ],
[ 1.], [ 0.99919711], [ 0.97202208], [ 0.99065786], [ 0.90567128],
[ 0.94300558], [ 0.89839004], [ 0.87312245], [ 0.86288378], [ 0.87301008],
[ 0.78184963], [ 0.73774451], [ 0.7450479 ], [ 0.67291666], [ 0.63518575],
[ 0.57036157], [ 0.5709147 ], [ 0.63079811], [ 0.61821523], [ 0.49526048],
[ 0.4434457 ], [ 0.29746173], [ 0.13024641], [ 0.17631683], [ 0.08590552]])
sinus = np.sin(np.linspace(0, np.pi, 60))
plt.plot(signal)
plt.plot(sinus)
파란색 라인 내 신호, 녹색 선은 동입니다 : 내가 제대로 FFT 기능을 사용하는 것이, 설명해야하는 그 옆에 내 신호를 근사, 부비동 곡선을 꾸몄다.
transformed_signal = abs(np.fft.fft(signal)[:30]/len(signal))
transformed_sinus = abs(np.fft.fft(sinus)[:30]/len(sinus))
plt.plot(transformed_signal)
plt.plot(transformed_sinus)
파란색 선이 transformed_signal
입니다
transformed_sinus
입니다.
사람이 여기에 무슨 일인지를 설명 할 수 :
만 transformed_signal
이 동작은 위에서 설명한 보여줍니다 음모를 꾸미고?
UPDATE는
나는 참으로 FFT를 호출의 문제였다. 이것은 올바른 전화 및 올바른 결과입니다 :
transformed_signal = abs(np.fft.fft(signal,axis=0)[:30]/len(signal))
또는 signal이 1D 벡터가되도록하려는 경우'np.array ([signal in x]에 대해 [x [0])와 같은 것으로 변환하십시오.)' – mtrw