4

私は最近この質問をしました:

ピッチを検出するアルゴリズムを探しています。回答の 1 つは、最初の FFT を使用して基本的な周波数応答を取得し、どの周波数が発声されているかを把握し、関心のある各領域でバンドパス フィルターを使用してフォローアップすることを提案しました。

少し高度なアルゴリズムでは、次のようなことができます。

  1. ピッチ周波数を大まかに検出します (DFT で実行できます)。
  2. ピッチ周波数を分離するためのバンドパス信号。
  3. フィルター処理された信号の 2 つのピーク間のサンプル数をカウントします。

これで、最初のステップを問題なく実行できます (私は iOS 用にコーディングしており、Apple には FFT などを実行するためのフレームワーク (加速フレームワーク) があります。

私はここから始めました: しかし、私は問題を見ることができます: 歌うことができる可能性のあるすべての音符を区別する FFT は、多くのサンプルを必要とし、あまり多くの不必要な計算を実行したくありません。モバイル デバイスをターゲットにします。

したがって、上記のこの回答に頭を悩ませようとしていますが、バンドパスフィルターの概念をコードに適用する方法がわかりません。

誰でも助けることができますか?

4

3 に答える 3

3

フィルターの設計はかなり複雑です。多くのテクニックがあります。まず、作成するフィルタの種類を決定する必要があります。有限インパルス応答 (FIR)? 無限インパルス応答 (IIR) ? 次に、そのタイプのフィルターを設計するためのアルゴリズムを選択します。Remez アルゴリズムは、FIR フィルターの設計によく使用されます。ここにアクセスして、私が言及していた複雑さを確認してください: http://en.wikipedia.org/wiki/Remez_algorithm

フィルタを作成する最善の方法は、既存の信号処理ライブラリを使用することです。簡単な Google 検索でここにたどり着きました: http://spuc.sourceforge.net/

アプリケーションが何であるかを考えると、一致したフィルターについて読みたいと思うかもしれません。それらがここで関連しているかどうかはわかりませんが、関連している可能性があります。 http://en.wikipedia.org/wiki/Matched_filter

于 2011-02-04T03:08:24.393 に答える
1

よくウィキペディアで、ローパスフィルターとハイパスを調べて、それらを組み合わせてバンドパスフィルターを作ります。ウィキペディアには、これら 2 つのフィルターのコード実装があります。

http://en.wikipedia.org/wiki/Low-pass_filter http://en.wikipedia.org/wiki/High-pass_filter

于 2014-09-16T01:07:59.777 に答える