Open5
Rust で信号処理がやりたいんじゃ〜
タイトルの通り。
Rust で信号処理を行うために役に立つ crate やノウハウを書きなぐりたい。
ひとまず音響信号処理に絞ることにする。
まず気になるのは
- 信号を格納するデータ構造に何を用いるべきか
- FFT、STFTや畳み込みなどの基本的な信号処理を行う crate として何を選ぶとよいか
- 波形やスペクトログラムの可視化はどのように行うのが良いか
いずれも単一の答えはないと思うものの、自分の目的に沿ったものを選びたい
データ構造に何を用いるべきか
- 信号は基本的に可変長なので最も単純なのは
Vec<T>
だが、多チャネル信号を取り扱う際にVec<Vec<T>>
とするのは少し面倒になりそう - スペクトログラムを格納することも考えると ndarray crate を用いるのが無難か
ndarray を使うなら以下の本がとても参考になりそう。
基本的な信号処理を行う crate に何を用いるか
FFT/STFT
crates.io で検索掛けた限りでは以下が人気っぽい。
しかしドキュメントを読んだ限りでは STFT は実装されていない。 Rust では割と機能ごとに crate を分けるらしいので、自然かも。
STFT の crate は crates.io で検索した限りあまり良いのが無さそう(最終更新が2年前、とかしかない)。
割とニッチだから仕方ない、のか…?
dasp という crate も気になる。
が、 feature を full にして入れてみたところコンパイルが落ちたので保留。以下の Issue と同じ現象。