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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Matplotlib

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

NumPy

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

pandas

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

受付中

生波形同士の位相差を出力したいです.

nonnon615
nonnon615

総合スコア19

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Matplotlib

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

NumPy

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

pandas

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

0回答

0リアクション

0クリップ

238閲覧

投稿2022/10/04 14:40

編集2022/10/05 00:39

Pythonで,生波形同士の位相差を出力したいです.

現在,20~30個程度の生波形の入ったcsvファイル(図1を参照)をFFTし,一つのExcelにまとめる処理を行っています.

csvファイルのc列目に生波形1,d列目に生波形2、e列目に生波形3、f列目に生波形4が出力されています。

このCSVファイルをfft解析し、0行目に計測時間を、一行目に生波形1,二行目に生波形2,三行目に生波形3,四行目に生波形6,五行目にサンプリング周波数,六行目にfft解析をした生波形1,七行目にfft解析をした生波形2,八行目にfft解析をした生波形3,九行目にfft解析をした生波形4としています(図2参照).

今回行いたいこととして,十行目に生波形1と3の位相差 degを,十一行目に生波形1と4の位相差を出力したいです.

つまり、以下のホームページに記載してあるようなことをPython上で行いたいです。
https://blog.goo.ne.jp/je-suis-sumichan/e/0e562abe1dacdfd5ad65763d4658c685
このホームページでいう、信号1Xnを図1の生波形に、信号2Ynを生波形3や4として、処理したいということです。

ホームページ上のstep1.2.3と書かれた列は出力してもしなくてもかまいません。求められた位相差 degという列を出力できれば嬉しいです。

様々なサイトを調べてみたのですが,グラフを出力するものや,コードが膨大なものが多く,既存の下記に示すコードにどのように埋め込めばよいのかわからなくなってしまいました.

下記に図1と図2,既存のコードを記します.
※図2のcsvファイル名と図1のシート名は対応していません.
図2は,入力フォルダ内に1.2.3.4.5.6というcsvが入っていた際にPython を動かしたものとなります.

ご協力お願いいたします.

質問の欄をご覧ください。

図1
イメージ説明

図2
イメージ説明

import cv2 import numpy as np import matplotlib.pyplot as plt import csv import os import glob import pandas as pd def my_fft(infile): ##### 実験条件、分析対象の設定 ###### t = np.arange(0,8.192,0.0005) #サンプリング時間,周波数の指定(開始時間(=0),終了時間,サンプリング周期) file = infile #分析対象のファイル指定 ##### データの読み込みy ##### for i in range(4): def loadvtp(file,i): #ファイルの読み込みに使用する関数の定義 vtp = pd.read_csv(file, dtype='float', skiprows=57, usecols=[i+2], nrows=16384, engine='python', header=None) #解析対象となるデータの読み込み vtp = vtp - np.mean(vtp) #平均を引く vtp = np.squeeze(vtp) return vtp ##### 主流(x)成分出力の計算 ##### vx = loadvtp(file,i) ##### FFT ##### freq = np.fft.fftfreq(16384, 1/2000) #周波数軸の生成(サンプリング点数, サンプリング周期) f = np.fft.fft(vx) #FFT f [0]=f[0]/2 #定常成分を1/2にする(スケーリングに必要) amp = np.abs(f)/(16384/2) #FFT結果を振幅に合わせてスケーリング freq = freq[0:16384//2] #周波数軸の対称成分を除く amp = amp[0:16384//2] #振幅の対称成分を除く if i==0: yav=vx xav="" vav="" wav="" y=amp x="" v="" w="" elif i==1: yav=yav xav=vx vav="" wav="" y=y x=amp v="" w="" elif i==2: yav=yav xav=xav vav=vx wav="" y=y x=x v=amp w="" elif i==3: yav=yav xav=xav vav=vav wav=vx y=y x=x v=v w=amp df = [t, yav, xav, vav, wav, freq, y, x, v, w] df=pd.DataFrame(df).T return df infile = glob.glob("入力フォルダ名/*.csv") infile.sort() print('入力csvファイル数', len(infile)) with pd.ExcelWriter('出力Excel名.xlsx', mode='w') as writer: for in_csv_file in infile: in_file_name = os.path.basename(in_csv_file) fft_df = my_fft(in_csv_file) fft_df.to_excel(writer, sheet_name=in_file_name)

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

y_waiwai

2022/10/04 15:00

まずはその位相差、というものを定義しよう。 それはどういうものでしょうか。また、どういう結果を想定してるんでしょうか
nonnon615

2022/10/04 23:29

一つ一つのcsvが時系列のようなものになっています。そこで、得られた位相差のアベレージをとり、その時系列での位相差とするつもりです。 そして、横軸に時系列、縦軸に位相差の関係のグラフをプロットすることが目標です。
nonnon615

2022/10/04 23:31

生波形1と、3の位相差がおよそ0となるか180度ずれている、といったような結果がでると予行しており、様々な考察ができるのではないかと考え、このようなプログラムの作成に至りました。
nonnon615

2022/10/04 23:39

定義として、例えば図2を参考にすると、セルc2とe2の位相差をセルL2に、c3とe3の位相差をL3に、といったようにできないか、と考えています。
nonnon615

2022/10/04 23:46

生波形1の列を0行目の時間の列と組み合わせると、横軸が時間、縦軸が生波形1のサインカーブのようなものができます。同じく、生波形2.3.4でも同様にサインカーブがつくれます。それらの位相差が知りたいというわけです。 0秒での位相差、0.0005秒での位相差、と求めれないか、と考えています。
y_waiwai

2022/10/04 23:51

まずはその波形というのをグラフにしてみてはいかがでしょう。 そのうえで、その各波形のグラフ間の、どれを位相差とするのか示しましょう #位相差の説明に全くなってませんがな
nonnon615

2022/10/05 00:05

グラフにして、どれを位相差とするかとのことですが、もちろんそれについても考えました。 しかし、グラフにするとゆらぎのあるサイン波のようなものができます。そのため、0.0005秒ごとにどれだけの位相のズレが生じているか求めれないかと考えています
nonnon615

2022/10/05 00:40

説明がわかりにくかったも思いますので、参考としたホームページ等を説明に加えましたので、ご覧ください。

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

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Matplotlib

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

NumPy

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

pandas

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