0

ベクターをエンベロープとして使用して、さまざまなサイズのかなり大きな音の塊に fft イコライゼーションを適用できるようにしたいと考えています。

周波数ドメイン ビンをエンベロープで乗算できるようにするには、エンベロープが fft データと同じ解像度である必要があります。これは、サウンド チャンクのサイズによって異なります。

したがって、エンベロープ ベクトルをリサンプリングする関数が必要です。vDSP がその目的のための機能を備えているかどうか知っていますか? 参照を前後に閲覧しましたが、何も見つかりませんでした。これは、そこに何もないという意味ではありません。vDSP リファレンスを検索しているときに何かを見逃すのは簡単です...

自分で何かを実装できなかったわけではありませんが、vDSP 機能があれば、おそらく私が思いつくよりもはるかに高速になるでしょう。このプロジェクトは iOS デバイスも対象としているため、これは重要です。

そして、車輪を再発明する必要はありません:)

ありがとう!!

4

2 に答える 2

2

私が正しく理解していれば、周波数ビンの 1D 配列でベクトル乗算したいエンベロープ値の 1D 配列があります。解決しようとしている問題は、エンベロープ配列を FFT 配列と同じ長さにスケーリングすることです。そもそもエンベロープ配列をどのように生成しているかを知っておくと役に立ちますが、単純に正しい長さで生成することはできませんか? もしそうなら、問題は解決しました:)

そうでない場合は、 を使用vDSP_vtabiして、現在持っている値のルックアップ テーブルからエンベロープ ベクトルを生成してみてはどうでしょうか? を使用して、ルックアップ テーブルの入力ベクトル A を生成できますvDSP_vramp

ただし、これはかなり複雑でコストがかかるように思えますが、かなりの量のバッファーの割り当て/再割り当てが必要です。vDSP_vsmul各エンベロープ値で乗算する必要がある FFT サンプルの数を計算し、FFT ベクトルのチャンクをエンベロープ値で乗算するために各エンベロープ サンプルをループする方が簡単な場合があります。

どのソリューションのパフォーマンスが向上するかは、各ベクトルの相対的なサイズに大きく依存します。また、FFT ベクトルのサイズが異なる理由と、最初にエンベロープ配列を生成する方法を知っておくと、より正確な答えが得られます。

于 2012-12-30T12:30:20.813 に答える
0

別の方法をお勧めします。

入力信号は固定サンプルレートでハードウェアから送信され、エンベロープ値の数が正確にわかっているため、を使用してサンプルレート変換を行うだけです。

AudioConverterFillComplexBuffer

高速で、リサンプリング時にフィルタリングと補間に注意を払います。

于 2013-02-20T18:26:53.910 に答える