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

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

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

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

674閲覧

周波数解析で得られた結果の解釈について

KYuki1218

総合スコア26

NumPy

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2023/01/05 10:32

前提

エラーメッセージは出ないものの出力された結果の解釈が合っているかを確認したいです。

実現したいこと

6秒間のデータを抽出し,3-8Hz(high band)の周波数帯域におけるパワースペクトルの面積を,0.5-3Hz(low band)の周波数帯域におけるパワースペクトルの面積で除すことで面積比を計算し,1frame毎にずらして解析し,面積比が3を超えるframe数をカウントするプログラムを記載しました。

ただ,出力された結果が意図した結果になっているか判断できずに作業が止まっている状況です…

記載したプログラムが合っているか確認いただき,間違っている場合は修正案をご教示いただけますと幸いです。

なお,resultファイルには,サンプリングレート128Hzの加速度計によって得られた垂直方向の加速度データが参加者10名分格納されております(今回は最初の参加者"pt1"を解析)。

該当のソースコード

python

1import pandas as pd 2import numpy as np 3from scipy import integrate 4 5# データ 6df = pd.read_csv("result.csv") 7 8def area_ratio(fi): 9 # 周波数解析 10 rate = 128 11 han = np.hanning(fi.size) 12 fft_data = np.abs(np.fft.rfft(fi * han)) 13 freqList = np.fft.rfftfreq(fi.size, 1.0 / rate) # 横軸 14 15 # 周波数帯域の指定 16 fft_df = pd.DataFrame(freqList) 17 fft_df['fft'] = pd.DataFrame(fft_data) 18 fft_df.columns=['freq', 'fft'] 19 20 low = fft_df.query("3> freq >= 0.5") 21 high = fft_df.query("8>= freq >= 3") 22 23 # 面積比の算出 24 s1 = integrate.trapz(low["fft"]) 25 s2 = integrate.trapz(high["fft"]) 26 27 return s2/s1 28 29if __name__ == '__main__': 30 # generate data for testing 31 N = df['pt1'].size 32 df_fft = pd.DataFrame({ 33 'frame': range(1, N+1), 34 }) 35 36 # rolling apply 37 window_size = 128*6 38 indexer = pd.api.indexers.FixedForwardWindowIndexer(window_size=window_size) 39 df_fft["FFT"] = df['pt1'].rolling(window=indexer).apply(area_ratio).dropna() 40 41count = (df_fft["FFT"] >= 3.0).sum() 42print("frame数:",count)

出力結果

frame数: 3883

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

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

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

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

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

guest

回答1

0

ベストアンサー

出力された結果が意図した結果になっているか判断できずに作業が止まっている

(今回は最初の参加者"pt1"を解析)

こういう場合はいきなり解析したいデータで確かめるのではなく、
手計算でも確かめられる簡単な試験データを自分で作って確かめます。

投稿2023/01/06 01:56

ozwk

総合スコア13521

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

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

KYuki1218

2023/01/06 14:40

建設的なご指導ありがとうございます。おっしゃっていただいた方法で検証してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問