回答編集履歴

4

append fix idea

2022/10/05 22:34

投稿

ps_aux_grep
ps_aux_grep

スコア1579

test CHANGED
@@ -11,4 +11,4 @@
11
11
  ### 改善案
12
12
  したがって抽出条件に合う値を存在させるために,サンプリング周波数`fs`を小さくするよう変更するか,`signal.welch()`の引数`nperseg`の値を大きくするよう変更してください.前者は物理的な定数ですので,実際変更可能なのは後者かと思われます.
13
13
 
14
- セグメント長`nperseg`は最大で入力データの長さ`len(f_sci(xx))`までの値を設定することができます.
14
+ セグメント長`nperseg`は最大で入力データの長さ`len(f_sci(xx))`までの値を設定することができます.Kaggleの方のコードでは`fs=4.0`,`nperseg=256`であるので,相対的に考えて`fs=40.0`と10倍にしていることから`nperseg`も10倍にして`2560`にすると同じスペクトル密度になるでしょう.

3

fixed context

2022/10/05 22:27

投稿

ps_aux_grep
ps_aux_grep

スコア1579

test CHANGED
@@ -4,7 +4,7 @@
4
4
  このエラーを治すには,スペクトル周波数の配列`fxx`においてLFの帯域値が必要ということになります.配列`fxx`の中身を確認しながらデバッグするか,周波数スペクトラムのグラフを表示しながらデバッグする必要があります.
5
5
 
6
6
  ### 原因の再現/解析
7
- そちらの持っている配列サイズは不明ですが弊環境で`fxx, pxx = signal.welch(x = np.random.randint(0, 100, N), fs = 40.0)`とすると,`N`の値に依存せず配列`fxx`の長さ`len(fxx)`は必ず`129`になりました.`signal.welch()`の引数`nperseg`のデフォルト値`256`の半分+1の値がスペクトル周波数`fxx`の配列長`len(fxx)`になるからです.
7
+ そちらで解析ために持っているデータの配列サイズは不明だったの,適当な整数`N`を用いて弊環境で`fxx, pxx = signal.welch(x = np.random.randint(0, 100, N), fs = 40.0)`として実行すると,`N`の値に依存せず配列`fxx`の長さ`len(fxx)`は必ず`129`になりました.`signal.welch()`の引数`nperseg`のデフォルト値`256`の半分+1の値がスペクトル周波数`fxx`の配列長`len(fxx)`になるからです.
8
8
 
9
9
  ところでこの配列`fxx`の中を見ると,0番目から順に`[0, 0.15625, 0.3125, 0.46875, 0.625, 0.78125...`となっており,コードで定義した抽出条件`cond_lf = (fxx >= 0.04) & (fxx < 0.15)`に合致する値は存在しません.
10
10
 

2

append description about nperseg value

2022/10/05 22:23

投稿

ps_aux_grep
ps_aux_grep

スコア1579

test CHANGED
@@ -1,11 +1,14 @@
1
+ ### 原因
1
2
  LFの帯域値が存在しなかったため,抽出条件`cond_lf = (fxx >= 0.04) & (fxx < 0.15)`で`True`になっているindexが0個となり,`pxx[cond_lf]`として抽出条件を適用した抽出結果の配列サイズが`0`,結果`np.argmax([])`という処理が行われ,`ValueError: attempt to get argmax of an empty sequence`となったようです.
2
3
 
3
- このエラーを治すには,LFの帯域値が必要ということになります.配列`fxx`の中身を確認しながらデバッグするか,周波数スペクトラムのグラフを表示しながらデバッグする必要があります.
4
+ このエラーを治すには,スペクトル周波数の配列`fxx`においてLFの帯域値が必要ということになります.配列`fxx`の中身を確認しながらデバッグするか,周波数スペクトラムのグラフを表示しながらデバッグする必要があります.
4
5
 
5
- そちらの持っている配列サイズは不明ですが弊環境で`fxx, pxx = signal.welch(x = np.random.randint(0, 100, N), fs = 40.0)`とすると,`N`値に依存せず配列`fxx`の長さ`len(fxx)`は必ず`129`になりました.
6
+ ### 原因再現/解析
7
+ そちらの持っている配列サイズは不明ですが弊環境で`fxx, pxx = signal.welch(x = np.random.randint(0, 100, N), fs = 40.0)`とすると,`N`の値に依存せず配列`fxx`の長さ`len(fxx)`は必ず`129`になりました.`signal.welch()`の引数`nperseg`のデフォルト値`256`の半分+1の値がスペクトル周波数`fxx`の配列長`len(fxx)`になるからです.
6
8
 
7
9
  ところでこの配列`fxx`の中を見ると,0番目から順に`[0, 0.15625, 0.3125, 0.46875, 0.625, 0.78125...`となっており,コードで定義した抽出条件`cond_lf = (fxx >= 0.04) & (fxx < 0.15)`に合致する値は存在しません.
8
10
 
11
+ ### 改善案
9
- サンプリング周波数`fs`を小さくするよう変更するか,`signal.welch()`の任意引数`nperseg`の値を大きくするよう変更してください.デフォルトは`256`が設定されています.前者は物理的な定数ですので,実際問題変更可能なのは後者かと思われます.
12
+ したがって抽出条件に合う値を存在させるために,サンプリング周波数`fs`を小さくするよう変更するか,`signal.welch()`の引数`nperseg`の値を大きくするよう変更してください.前者は物理的な定数ですので,実際変更可能なのは後者かと思われます.
10
13
 
11
14
  セグメント長`nperseg`は最大で入力データの長さ`len(f_sci(xx))`までの値を設定することができます.

1

append maximam segment length

2022/10/05 15:43

投稿

ps_aux_grep
ps_aux_grep

スコア1579

test CHANGED
@@ -7,3 +7,5 @@
7
7
  ところでこの配列`fxx`の中を見ると,0番目から順に`[0, 0.15625, 0.3125, 0.46875, 0.625, 0.78125...`となっており,コードで定義した抽出条件`cond_lf = (fxx >= 0.04) & (fxx < 0.15)`に合致する値は存在しません.
8
8
 
9
9
  サンプリング周波数`fs`を小さくするよう変更するか,`signal.welch()`の任意引数`nperseg`の値を大きくするよう変更してください.デフォルトは`256`が設定されています.前者は物理的な定数ですので,実際問題変更可能なのは後者かと思われます.
10
+
11
+ セグメント長`nperseg`は最大で入力データの長さ`len(f_sci(xx))`までの値を設定することができます.