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

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

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

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

Python

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

解決済

python 信号処理 エラー

ryosuke0313
ke0313

総合スコア62

Python 3.x

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

Python

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

1回答

0リアクション

0クリップ

261閲覧

投稿2022/10/05 11:37

前提

信号に対して周波数解析を行っています。
kaggleのコードと同じことを実行してもエラーが出てしまいます。
kaggleのコードをコピペすると、実行できましたが、信号の中身を私の信号にするとエラーが出てしまいます。

実現したいこと

エラーを解決し、実行可能状態にしたいです。

kaggleのコード

python

def frequency_domain(r, fs=4): # Estimate the spectral density using Welch's method fxx, pxx = signal.welch(x=rr_interpolated, fs=fs) ''' Segement found frequencies in the bands - Very Low Frequency (VLF): 0-0.04Hz - Low Frequency (LF): 0.04-0.15Hz - High Frequency (HF): 0.15-0.4Hz ''' cond_vlf = (fxx >= 0) & (fxx < 0.04) cond_lf = (fxx >= 0.04) & (fxx < 0.15) cond_hf = (fxx >= 0.15) & (fxx < 0.4) # calculate power in each band by integrating the spectral density vlf = trapz(pxx[cond_vlf], fxx[cond_vlf]) lf = trapz(pxx[cond_lf], fxx[cond_lf]) hf = trapz(pxx[cond_hf], fxx[cond_hf]) # sum these up to get total power total_power = vlf + lf + hf # find which frequency has the most power in each band peak_vlf = fxx[cond_vlf][np.argmax(pxx[cond_vlf])] peak_lf = fxx[cond_lf][np.argmax(pxx[cond_lf])] peak_hf = fxx[cond_hf][np.argmax(pxx[cond_hf])] # fraction of lf and hf lf_nu = 100 * lf / (lf + hf) hf_nu = 100 * hf / (lf + hf) results = {} results['Power VLF (ms2)'] = vlf results['Power LF (ms2)'] = lf results['Power HF (ms2)'] = hf results['Power Total (ms2)'] = total_power results['LF/HF'] = (lf/hf) results['Peak VLF (Hz)'] = peak_vlf results['Peak LF (Hz)'] = peak_lf results['Peak HF (Hz)'] = peak_hf results['Fraction LF (nu)'] = lf_nu results['Fraction HF (nu)'] = hf_nu return results, fxx, pxx # sample rate for interpolation fs = 4.0 steps = 1 / fs # now we can sample from interpolation function xx_2 = np.arange(1, np.max(x_2), steps) rr_interpolated = f_2(xx_2) print("Frequency domain metrics:") results_2, fxx_2, pxx_2 = frequency_domain(rr_interpolated) for k, v in results_2.items(): print("- %s: %.2f" % (k, v)) #結果 Frequency domain metrics: - Power VLF (ms2): 3.64 - Power LF (ms2): 7.07 - Power HF (ms2): 7.81 - Power Total (ms2): 18.53 - LF/HF: 0.91 - Peak VLF (Hz): 0.02 - Peak LF (Hz): 0.09 - Peak HF (Hz): 0.28 - Fraction LF (nu): 47.51 - Fraction HF (nu): 52.49

kaggleの信号

python

print(rr_interpolated) #[59.12206572 58.903625 58.67572032 ... 75.11356874 74.51171895 70.1799672 ] print(xx_2) #[ 1. 1.25 1.5 ... 298.75 299. 299.25]

私のコード

python

def frequency_domain(rri, fs=40): # Estimate the spectral density using Welch's method fxx, pxx = signal.welch(x=f_sci(xx), fs=fs) ''' Segement found frequencies in the bands - Very Low Frequency (VLF): 0-0.04Hz - Low Frequency (LF): 0.04-0.15Hz - High Frequency (HF): 0.15-0.4Hz ''' #cond_vlf = (fxx >= 0) & (fxx < 0.04) cond_lf = (fxx >= 0.04) & (fxx < 0.15) cond_hf = (fxx >= 0.15) & (fxx < 0.4) # calculate power in each band by integrating the spectral density #vlf = trapz(pxx[cond_vlf], fxx[cond_vlf]) lf = trapz(pxx[cond_lf], fxx[cond_lf]) hf = trapz(pxx[cond_hf], fxx[cond_hf]) # sum these up to get total power #total_power = vlf + lf + hf # find which frequency has the most power in each band #peak_vlf = fxx[cond_vlf][np.argmax(pxx[cond_vlf])] peak_lf = fxx[cond_lf][np.argmax(pxx[cond_lf])] peak_hf = fxx[cond_hf][np.argmax(pxx[cond_hf])] # fraction of lf and hf lf_nu = 100 * lf / (lf + hf) hf_nu = 100 * hf / (lf + hf) results = {} #results['Power VLF (ms2)'] = vlf results['Power LF (ms2)'] = lf results['Power HF (ms2)'] = hf #results['Power Total (ms2)'] = total_power results['LF/HF'] = (lf/hf) #results['Peak VLF (Hz)'] = peak_vlf results['Peak LF (Hz)'] = peak_lf results['Peak HF (Hz)'] = peak_hf results['Fraction LF (nu)'] = lf_nu results['Fraction HF (nu)'] = hf_nu return results, fxx, pxx print("Frequency domain metrics:") results_2, fxx_2, pxx_2 = frequency_domain(f_sci(xx)) for k, v in results_2.items(): print("- %s: %.2f" % (k, v))

私の信号

python

print(xx) #[ 20.5 20.525 20.55 ... 379.925 379.95 379.975] print(f_sci(xx)) #[5.61056341 5.58633306 5.57034141 ... 5.93681271 5.93674881 5.93688724]

発生している問題・エラーメッセージ

Output exceeds the size limit. Open the full output data in a text editor --------------------------------------------------------------------------- ValueError Traceback (most recent call last) ~\AppData\Local\Temp/ipykernel_13212/220404614.py in <module> 1 print("Frequency domain metrics:") ----> 2 results_2, fxx_2, pxx_2 = frequency_domain(f_sci(xx)) 3 4 for k, v in results_2.items(): 5 print("- %s: %.2f" % (k, v)) ~\AppData\Local\Temp/ipykernel_13212/92220601.py in frequency_domain(rri, fs) 22 # find which frequency has the most power in each band 23 #peak_vlf = fxx[cond_vlf][np.argmax(pxx[cond_vlf])] ---> 24 peak_lf = fxx[cond_lf][np.argmax(pxx[cond_lf])] 25 peak_hf = fxx[cond_hf][np.argmax(pxx[cond_hf])] 26 <__array_function__ internals> in argmax(*args, **kwargs) c:\Users\ryous\anacon\lib\site-packages\numpy\core\fromnumeric.py in argmax(a, axis, out) 1191 1192 """ -> 1193 return _wrapfunc(a, 'argmax', axis=axis, out=out) 1194 1195 ... ---> 58 return bound(*args, **kwds) 59 except TypeError: 60 # A TypeError occurs if the object does have such a method in its ValueError: attempt to get argmax of an empty sequence

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

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

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

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

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

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

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

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

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

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

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

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

Python 3.x

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

Python

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