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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

解決済

1回答

567閲覧

関数の出力の表示 python

ryosuke0313

総合スコア65

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

0グッド

0クリップ

投稿2022/10/04 06:16

編集2022/10/04 07:53

実現したいこと

python初心者です。
def integral  から始まる関数の結果(LF_HF)を表示させたいです。
関数の中身を表示させるために何をしていいか分かりません。

該当のソースコード

python

1#入力された時系列データ(t, x)とサンプリングレート(dt)を元にFFTを行って、 2#それを時系列とともにplotする。 3############################### 4import numpy as np 5import scipy 6from scipy import integrate 7import matplotlib.pyplot as plt 8from sympy import * 9 10def FFT_main(t, x, dt, split_t_r, overlap, window_F, output_FN, y_label, y_unit): 11 12 #データをオーバーラップして分割する。 13 split_data = data_split(t, x, split_t_r, overlap) 14 15 #FFTを行う。 16 FFT_result_list = [] 17 for split_data_cont in split_data: 18 FFT_result_cont = FFT(split_data_cont, dt, window_F) 19 FFT_result_list.append(FFT_result_cont) 20 21 """ 22 #各フレームのグラフ化 23 IDN = 0 24 for split_data_cont, FFT_result_cont in zip(split_data, FFT_result_list): 25 IDN = IDN+1 26 plot_FFT(split_data_cont[0], split_data_cont[1], FFT_result_cont[0], FFT_result_cont[1], output_FN, IDN, 0, y_label, y_unit) 27 """ 28 29 #平均化 30 fq_ave = FFT_result_list[0][0] 31 F_abs_amp_ave = np.zeros(len(fq_ave)) 32 for i in range(len(FFT_result_list)): 33 F_abs_amp_ave = F_abs_amp_ave + FFT_result_list[i][1] 34 F_abs_amp_ave = F_abs_amp_ave/(i+1) 35 36 plot_FFT(t, x, fq_ave, F_abs_amp_ave, output_FN, "ave", 1, y_label, y_unit) 37 38 return fq_ave, F_abs_amp_ave 39 40def plot_FFT(t, x, fq, F_abs_amp, output_FN, IDN, final_graph, y_label, y_unit): 41 fig = plt.figure(figsize=(12, 4)) 42 ax2 = fig.add_subplot(121) 43 title1 = "time_" + output_FN[:-4] 44 plt.plot(t, x) 45 plt.xlabel("time [s]") 46 plt.ylabel(y_label+"["+y_unit+"]") 47 #plt.title(title1) 48 plt.title(f'Ryosuke {i*60+1}-{(i+1)*60} pupil ') 49 50 ax2 = fig.add_subplot(122) 51 title2 = "freq_" + output_FN[:-4] 52 plt.xlabel('freqency(Hz)') 53 plt.ylabel(y_label+"["+y_unit+"/rtHz]") 54 plt.xscale("log") 55 plt.yscale("log") 56 plt.plot(fq, F_abs_amp) 57 #plt.title(title2) 58 plt.title(f'Ryosuke {i*60+1}-{(i+1)*60} pupil amplitude spectrum') 59 60 if final_graph == 0: 61 plt.savefig(output_FN[:-4]+"_"+str(IDN)+"_FFTtemp"+output_FN[-4:], dpi=300) 62 elif final_graph == 1: 63 plt.savefig(output_FN, dpi=300) 64 65 return 0 66 67def integrate(vlf,lf,hf,F_abs_amp,fq): 68 69 70 LF= scipy.integrate.quad(F_abs_amp, (fq,vlf,lf)) 71 HF= scipy.integrate.quad(F_abs_amp, (fq,vlf,lf)) 72 LF_HF = float(LF) / HF 73 print(LF_HF) 74 75 return LF_HF 76 77 78 79def FFT(data_input, dt, window_F): 80 81 N = len(data_input[0]) 82 83 #窓の用意 84 if window_F == "hanning": 85 window = np.hanning(N) # ハニング窓 86 elif window_F == "hamming": 87 window = np.hamming(N) # ハミング窓 88 elif window_F == "blackman": 89 window = np.blackman(N) # ブラックマン窓 90 else: 91 print("Error: input window function name is not sapported. Your input: ", window_F) 92 print("Hanning window function is used.") 93 hanning = np.hanning(N) # ハニング窓 94 95 #窓関数後の信号 96 x_windowed = data_input[1]*window 97 98 #FFT計算 99 F = np.fft.fft(x_windowed) 100 F_abs = np.abs(F) 101 F_abs_amp = F_abs / N * 2 102 fq = np.linspace(0, 1.0/dt, N) 103 104 #窓補正 105 acf=1/(sum(window)/N) 106 F_abs_amp = acf*F_abs_amp 107 108 #ナイキスト定数まで抽出 109 fq_out = fq[:int(N/2)+1] 110 F_abs_amp_out = F_abs_amp[:int(N/2)+1] 111 112 return [fq_out, F_abs_amp_out] 113 114def data_split(t, x, split_t_r, overlap): 115 116 split_data = [] 117 one_frame_N = int(len(t)*split_t_r) #1フレームのサンプル数 118 overlap_N = int(one_frame_N*overlap) #オーバーラップするサンプル数 119 start_S = 0 120 end_S = start_S + one_frame_N 121 122 while True: 123 t_cont = t[start_S:end_S] 124 x_cont = x[start_S:end_S] 125 split_data.append([t_cont, x_cont]) 126 127 start_S = start_S + (one_frame_N - overlap_N) 128 end_S = start_S + one_frame_N 129 130 if end_S > len(t): 131 break 132 133 134 return np.array(split_data) 135 136if __name__ == "__main__": 137 for i,dff in enumerate(dfs): 138 t = dff['timestamp'] 139 x = f_sci(dff['timestamp']) 140 dt = 0.025 #This value should be correct as real. 141 output_FN = "test.png" 142 split_t_r = 0.6 #1つの枠で全体のどの割合のデータを分析するか。 143 overlap = 0.5 #オーバーラップ率 144 window_F = "hanning" #窓関数選択: hanning, hamming, blackman 145 y_label = "amplitude" 146 y_unit = "V" 147 vlf = 0.04 148 lf = 0.15 149 hf = 0.4 150 151 FFT_main(t, x, dt, split_t_r, overlap, window_F,output_FN, y_label, y_unit)

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

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

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

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

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

can110

2022/10/04 06:36

単にprint(LF_HF)なりするのではダメなのでしょうか。 あるいは「関数の結果」「中身」を表示させたいと記載ありますが、どちらでしょうか? より具体的に詳しく実現したいことを説明すると回答得られやすくなると思います。
ryosuke0313

2022/10/04 06:56

私もそう思い、returnの前とif __name__ == "__main__":の中に print(LF_HF)をいれましたが、結果が表示されません。 print(integrat)も入れてみましたが、<function integrate at 0x0000017974914DC0>と表示されるだけです。 関数の使い方も曖昧なのですが、FFTを行った波形F_abs_ampに対してvlf,lh,hfの範囲で積分を行っているつもりです。
guest

回答1

0

ベストアンサー

問題が2つあります。

  • integrate 関数はどこからも呼ばれていません。
    なので、そもそも表示したいLF_HF は計算されていませんし、 printを挿入しても表示されません。

  • integrate という変数は上書きされてしまっているのでintegrate関数は動きません。

python

1from scipy import integrate 2 3def integrate(vlf,lf,hf,F_abs_amp,fq): 4 LF= integrate.quad(F_abs_amp, (fq,vlf,lf))

scipyのintegurateをインポートしておいて、同じ名前でintegrateを関数に定義しています。そしてその中で、integureteを使おうとしています。

python

1import scipy 2def integrate(vlf,lf,hf,F_abs_amp,fq): 3 LF= scipy.integrate.quad(F_abs_amp, (fq,vlf,lf))

とりあえず僕ならこうしておきます。

投稿2022/10/04 07:41

TakaiY

総合スコア12745

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

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

ryosuke0313

2022/10/04 07:55

回答ありがとうございます。 上記のように変更しましたが、結果は表示されませんでした。 まだ関数が機能していないのでしょうか。
TakaiY

2022/10/04 07:59

上記とは、僕の回答のようにですか? そこを変えただけでは、呼ぶようにはなりませんよ。 そもそも呼んでいない関数をどのように使うべきなのかは作った人に聞くしかないと思います。
ryosuke0313

2022/10/05 03:15

了解です。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問