コミュニティアイコン プチコン 非公式コミュニティ プレイ日記

アバター
こういち ◆ou0jbJnEJ0Kb
2025/3/29 23:57
信号処理に使うサブルーチン、毎回別のファイルから探してるんだけど、さすがに手間なので一箇所にまとめたい。(コメント欄に書いたけど、いくつか未完成です。あと、こんなのあったらいいなーってサブルーチンをコメントしてくれたら実装するかもです)
   
ところで、ARYOPの速度がイマイチ分からない。
一応、FORで計算するより30倍ぐらい高速なのは昔検証したけど…(間違いなく速いけど、思ったよりは速くないって感じ)
各演算の速度はおそらく
加減算>>乗算>積和>>補間>除算
だと思う(想像)けど、クランプだけ予想付かない。
あとは、引数に数値を渡した場合配列と速度差が付くのかとか…

コメント

アバター
こういち 2025/3/30 0:21 ◆ou0jbJnEJ0Kb
'FFT/IFFTの要素数が引数配列の要素数から自動決定するのやめてほしい。さすがに扱いづらすぎる


'グロヴァ(ローカル変数だとメモリが断片化するので)
'要素数はてきとー(大きすぎると速度が著しく低下するので、大きすぎないサイズ)
DIM AR#[16384],BR#[16384]
DIM AJ#[16384],BJ#[16384]
DIM T#[16384]

'畳み込みのプロ・畳小宮の存在だ
'AとBを畳み込んだ結果をOに返す
DEF CONVOL O[],A[],B[]
 FILL AJ#,0:FILL BJ#,0
 'A,Bの要素数が16384じゃないとき用
 FILL AR#,0,LEN(A)-1
 FILL BR#,0,LEN(B)-1
 COPY AR#,A:COPY BR#,B
 IFFT AR#,AJ#,AR#,AJ#
 IFFT BR#,BJ#,BR#,BJ#
 'T=AR*BJ+BR*AJ
 ARYOP 2,T#,BR#,AJ#
 ARYOP 4,T#,AR#,BJ#,T#
 'AJ=AR*BR-AJ*BJ
 ARYOP 2,BJ#,AJ#,BJ#
 ARYOP 2,AJ#,AR#,BR#
 ARYOP 1,AJ#,AJ#,BJ#
 FFT AJ#,T#,AJ#,T#
 COPY O,AJ#,0,LEN(O)
END

'INのパワースペクトルをOに返す
'TODO なんかバグってそうなので修正する
DEF FFTPOW O[],IN[]
 FILL AJ#,0
 FILL AR#,0,LEN(IN)-1
 COPY AR#,IN
 FFT T#,AJ#,AR#,AJ#
 ARYOP 2,T#,T#,T#
 ARYOP 4,AJ#,AJ#,AJ#,T#
 COPY O,AJ#,0,LEN(O)
END

'INの自己相関関数をOに返す
DEF AUTOC O,IN
 'TODO 書き方を調べておく
END

'要素数Nのハミング窓
'FFTWFN A,1の要素数制限なし版
DEF HAMMING A,N
 VAR I%
 FOR I%=0 TO N-1
  A[I%]=0.54-COS(2*PI()*(I%)/N)*0.46
 NEXT I%
END

'要素数Nで正規化カットオフ周波数Fの因果的なLPF
DEF MKLPF A,N,F
 HIMMING T#,N '今回はハミング窓
 VAR I%
 FOR I%=0 TO N-1
  VAR J%=I%-(N>>1)
  IF J% THEN
   A[I%]=SIN(2*PI()*J%*F)*B#{I%]/J%/PI()
  ELSE 'J%=0ではゼロ除算が生じるので、極限値を入れる
   A[I%]=2*F%*B#[I%]
  ENDIF
 NEXT I%
END

コメントを書く

  • こちらは「プチコン3号」「プチコンBIG」など、プチコンシリーズに関する話題を扱ったコミュニティです
  • プチコンシリーズにまったく関係ない書き込みはご遠慮下さい。削除の対象となります
  • こちらにはその他のゲームや雑談のコミュニティはなく、作る予定もありません (ひとりで管理できないため)。ごめんなさい
  • ユーザー登録なしで書き込みができます
  • 秘密の合い言葉は成りすましの防止 (トリップ機能)、書き込みの編集時の本人認証に使用します
  • 秘密の合い言葉に他人に推測されやすい言葉、他サービスと同じパスワードは入力しないでください。
  • 書き込むと、投稿時に入力したお名前と秘密の暗号が記憶され、ログイン状態になります

- WEB PATIO -