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

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

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

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

Q&A

解決済

1回答

1552閲覧

高速フーリエ変換の方法

agg1234

総合スコア6

Python

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

0グッド

0クリップ

投稿2020/06/27 00:31

編集2020/06/27 04:19

気温と湿度のデータを用いて高速フーリエ変換しようとしています。
ですが表示されるグラフが何か違う気がして、どこで間違っているのか指摘していただきたいです。

使用しているデータセットの中身。

過去2年分のデータ。1週間ごとに記録されているので104個のデータ(1年=52週)がある。1列目が気温、2列目が湿度。

array([(19. , 40.), (18.8, 44.), (19. , 42.), (19.2, 44.), (22.3, 41.), (20.7, 45.), (20.8, 40.), (20.6, 45.), (19.5, 41.), (20.5, 40.), (21.1, 39.), (20.8, 43.), (20.3, 41.), (21.9, 45.), (22.2, 42.), (21.6, 41.), (22.5, 45.), (23.3, 48.), (21.1, 42.), (23.2, 44.), (22.4, 42.), (24.2, 44.), (25.8, 41.), (24.8, 40.), (28.2, 40.), (28.3, 41.), (27.9, 39.), (27.4, 43.), (28.6, 44.), (29. , 41.), (29.4, 45.), (30. , 37.), (30.9, 38.), (27.6, 47.), (27.6, 47.), (27.7, 43.), (26. , 37.), (27.5, 39.), (24.9, 42.), (22.8, 36.), (23.3, 40.), (23. , 44.), (23.6, 41.), (21.6, 44.), (22.1, 41.), (20.7, 40.), (20.1, 44.), (19.3, 38.), (17.3, 39.), (20.3, 38.), (20.3, 38.), (21.2, 37.), (19. , 40.), (18.8, 44.), (18.7, 40.), (20.1, 43.), (20.1, 37.), (22.8, 45.), (18.5, 42.), (19.4, 39.), (20.3, 43.), (20.1, 41.), (22.3, 36.), (20.7, 38.), (23. , 41.), (21.6, 41.), (20.6, 40.), (21.8, 39.), (21.2, 36.), (22. , 40.), (23.9, 40.), (22.4, 42.), (23.4, 43.), (27.3, 40.), (25.8, 41.), (24.8, 40.), (28.2, 40.), (28.3, 41.), (28.5, 42.), (28.8, 40.), (29.9, 37.), (28.8, 36.), (30.4, 37.), (30.4, 39.), (28.6, 35.), (27. , 34.), (25.2, 41.), (24.4, 41.), (26.7, 39.), (25.1, 51.), (25.2, 45.), (23.7, 41.), (21.4, 42.), (21.8, 45.), (22.8, 44.), (22. , 40.), (21.5, 42.), (23.4, 46.), (21.3, 39.), (20.8, 43.), (20.6, 41.), (20.3, 42.), (21.2, 39.), (22.7, 39.)], dtype=[('temperature', '<f8'), ('humidity', '<f8')])

ソースコード

import numpy as np import matplotlib.pyplot as plt pitch = np.genfromtxt('ファイル名', names = ['temperature', 'humidity']) y = np.fft.fft(pitch['temperature']) N = len(y) dt = 0.00000001 t = np.arange(0, N*dt, dt) freq = np.fft.fftfreq(N, dt) plt.plot(freq) plt.xlabel('Number of data') plt.ylabel('Output') plt.title('FFT of temperature')

イメージ説明

補足

yymmtさんのおっしゃるとおりにplt.plot(freq, y)でプロットしてみたところ、イメージ説明になりました。ですがまだ授業で習った様な形ではないのでyが間違っているのでしょうか?質問続きですみません。

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

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

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

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

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

yymmt

2020/06/27 05:57

dtの値はどうやって決めましたか?
agg1234

2020/06/27 06:05

特に指示されていないので適当に決めてしまいました…
yymmt

2020/06/27 06:21

dtは計測間隔である「1週間ごと」をどういう表現で扱いたいかによって決めます。 例1: 1週間は1/52年とする → dt = 1/52 [年] → FFT後の周波数の単位 [1/年] → 1にピークが立つ 例2: 1週間は7日とする → dt = 7 [日] → FFT後の周波数の単位 [1/日] → 1/365にピークが立つ
agg1234

2020/06/27 06:25

そうだったのですね。おかげでわかりました!ありがとうございます!
guest

回答1

0

ベストアンサー

FFTで変換したyがプロットされていません。まずはyをプロットするのが良いでしょう。

python

1# plt.plot(freq) 2plt.plot(freq, y)

またソースコードが正しいか確認したい場合、素性の分かるダミーデータを作って動作検証をします。FFTの場合は既知の周波数で振動する正弦波をFFTに掛けてみて下さい。周波数空間では、その周波数でデルタ関数的にピークを持つはずです。以下に5Hzで振動する正弦波の例を示します。

python

1import numpy as np 2import matplotlib.pyplot as plt 3 4# parameters 5target_freq = 5.0 # [Hz] 6N = 2 ** 7 # number of data 7fs = 100.0 # sampling frequency [Hz] 8 9# sample data to check FFT 10dt = 1 / fs 11t = np.arange(N) * dt 12y = np.sin(2 * np.pi * target_freq * t) 13 14# FFT 15f = np.fft.fftfreq(N, dt) 16y_hat = np.fft.fft(y) 17 18# Plot 19fig, ax = plt.subplots(2, 1, figsize=(12, 9)) 20ax[0].plot(t, y, linestyle="--", marker=".") 21ax[0].set_xlabel("Time [sec]") 22i = f.argsort() 23ax[1].plot(f[i], np.abs(y_hat[i]), linestyle="--", marker=".") 24ax[1].set_xlabel("Freq [Hz]") 25ax[1].axvline(x=target_freq, color="red") 26 27plt.show()

FFTの確認

投稿2020/06/27 02:19

編集2020/06/27 02:28
yymmt

総合スコア1615

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

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

agg1234

2020/06/27 04:39

回答ありがとうございます。補足として新たに画像をつけました。
agg1234

2020/06/27 06:25

前回に引き続き今回も丁寧な回答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.39%

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

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

質問する

関連した質問