前提・実現したいこと
Excelから読み込んだ時系列データにFFTをかけてスペクトル分析を行おうとしています。
読み込んでいるExcelデータの2列目には簡単なsin関数が書いてあり、その列の中の1000行目から15000行目のデータを使用します。
周波数スペクトルのグラフをアウトプットしたいと考えています。
初心者で、質問の体すらなってないかもわかりませんが、アドバイスをよろしくお願いいたします。
発生している問題・エラーメッセージ
発生している問題は、F = np.fft.fft(f)でFFTが実行されていないことです。 エラーメッセージはありません。 F = np.fft.fft(f)でFFTをかけているつもりですが、Fにはfがそのまま入っています。 結果的に、読み込んだデータを絶対値変換しただけのグラフが出力されます。
該当のソースコード
Python
1import matplotlib.pyplot as plt 2import numpy as np 3import pandas as pd 4 5data = pd.read_excel(r'C:\tmp\test.xlsx', 6 delimiter=",", 7 dtype="float64", 8 #skiprows=0, 9 usecols=[1] 10 ) 11 12data1=data[10000:15000] 13data1 14 15x = np.arange(0, 10, 0.002) 16 17dt = 0.002 18fs = 1/dt 19n=5000 20y=data1 21 22N = len(y) # データ数 23 24# FFT 25f = y 26F = np.fft.fft(f) # 高速フーリエ変換(FFT) 27# 振幅スペクトルを計算 28Amp = np.abs(F) 29# 周波数軸のデータ作成 30fq = np.linspace(0, N/2, len(Amp)) # 周波数軸 numpy.arange(start, stop, step) linspace(開始,終了,分割数) 31 32# 周波数軸のデータ作成 33fq = np.linspace(0, N/2, len(Amp)) # 周波数軸 linspace(開始,終了,分割数) 34 35# 周波数軸に変更してグラフを再表示 36plt.figure(figsize=(8, 4)) 37plt.xlabel('freqency(Hz)', fontsize=14) 38plt.ylabel('signal amplitude', fontsize=14) 39plt.plot(fq, Amp)
試したこと
読み込んだデータが正しく読み込まれていることは確認しました。
また、Excelからデータを読み込まずにコードの中でsin関数を作るとFFTは実行できました。
np.fft.fftのプログラムについて詳しく調べましたが、原因は分かりませんでした。
補足情報(FW/ツールのバージョンなど)
Excelデータの一列目は、0から0.002刻みで60まで。2列目は=SIN(A1*PI())でのように、A列を用いた基本的なsin関数です。
使用ツールはJupyterLabとSpyderの両方を試しました。どちらも最新版です。
OSはWindows10です。
回答1件
あなたの回答
tips
プレビュー