Open5

Rust で信号処理がやりたいんじゃ〜

タイトルの通り。
Rust で信号処理を行うために役に立つ crate やノウハウを書きなぐりたい。
ひとまず音響信号処理に絞ることにする。

まず気になるのは

  • 信号を格納するデータ構造に何を用いるべきか
  • FFT、STFTや畳み込みなどの基本的な信号処理を行う crate として何を選ぶとよいか
  • 波形やスペクトログラムの可視化はどのように行うのが良いか

いずれも単一の答えはないと思うものの、自分の目的に沿ったものを選びたい

データ構造に何を用いるべきか

  • 信号は基本的に可変長なので最も単純なのは Vec<T> だが、多チャネル信号を取り扱う際に Vec<Vec<T>> とするのは少し面倒になりそう
  • スペクトログラムを格納することも考えると ndarray crate を用いるのが無難か

ndarray を使うなら以下の本がとても参考になりそう。

https://zenn.dev/termoshtt/books/b4bce1b9ea5e6853cb07/viewer/ndarray_linalg

基本的な信号処理を行う crate に何を用いるか

FFT/STFT

crates.io で検索掛けた限りでは以下が人気っぽい。

https://crates.io/crates/rustfft

しかしドキュメントを読んだ限りでは STFT は実装されていない。 Rust では割と機能ごとに crate を分けるらしいので、自然かも。

STFT の crate は crates.io で検索した限りあまり良いのが無さそう(最終更新が2年前、とかしかない)。
割とニッチだから仕方ない、のか…?

ログインするとコメントできます