質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

1723閲覧

Python FFT解析したい 初心者

ppgrow

総合スコア5

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/11/16 16:05

編集2020/11/17 01:22

<やりたい事> pythonで 以下の機械data のFFT 周波数解析をしたいです。

色々しらべ FFTの式は見つけたのですが どうもあてはめる場所があっているかもわからない状況です。結果が 例題にあったようにきれいな波になりません。
波がいくつかに分かれない。
2パターン試しましたが どちらも上手くいきません。
初心者のため 何をどこに入れたらよいのか理解ができません。
宜しくお願い致します。

1秒単位 (86400秒/日)
サンプルデータ
日付      時間  機械
2020/10/10 0:00:00 342
2020/10/10 0:00:01 245
2020/10/10 0:00:02 206
2020/10/10 0:00:03 173
: 
: 
2020/10/10 23:59:57 419
2020/10/10 23:59:58 467
2020/10/10 23:59:59 536

Python 3.7

import numpy as np
from numpy.fft import fftn, ifftn, fftfreq
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# csvファイルdataの読み込み
df = pd.read_csv('C:/Users/Desktop/sample.csv', engine = 'python')

試しケース1

y = np.fft.fft(df['機械'])
N = len(y)
dt = 0.00000001
t = np.arange(0, N*dt, dt)
freq = np.fft.fftfreq(N, dt)
plt.plot(freq,y)
plt.xlabel('Number of data')
plt.ylabel('Output')
plt.title('FFT of macine')

試しケース2

parameters

target_freq = 1.0 # [Hz]
N = 86400
t = df['機械'] # number of data
fs = 100.0 # sampling frequency [Hz]

sample data to check FFT

dt = 1 / fs
#t = np.arange(N) * dt
y = np.sin(2 * np.pi * target_freq * t)

FFT

f = np.fft.fftfreq(N, dt)
y_hat = np.fft.fft(y)

Plot

fig, ax = plt.subplots(2, 1, figsize=(12, 9))
ax[0].plot(t, y, linestyle="--", marker=".")
ax[0].set_xlabel("Time [sec]")
i = f.argsort()
ax[1].plot(f[i], np.abs(y_hat[i]), linestyle="--", marker=".")
ax[1].set_xlabel("Freq [Hz]")
ax[1].axvline(x=target_freq, color="red")

plt.show()

以上 宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ppgrow

2020/11/17 10:31

ありがとうございます。 勉強不足です。参考にさせて頂き またわからない場合 質問させて頂きます。 お忙しい中 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問