問題タブ [vdsp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
objective-c - C 対 vDSP 対 NEON - どうして NEON は C と同じくらい遅いのでしょうか?
NEON が C のように遅いのはなぜでしょうか?
私は、入力値に値を割り当てることにより、入力値を範囲にバケット化する高速ヒストグラム関数を構築しようとしています。これは、最も近い範囲のしきい値です。これは画像に適用されるものなので、高速である必要があります (画像配列が 640x480 で 300,000 要素であると仮定します)。ヒストグラム範囲の数値は (0,25,50,75,100) の倍数です。入力は浮動小数点数で、最終出力は明らかに整数になります
新しい空のプロジェクト (アプリ デリゲートなし) を開き、main.m ファイルのみを使用して、xCode で次のバージョンをテストしました。Accelerate を除いて、リンクされているすべてのライブラリを削除しました。
これが C の実装です。古いバージョンでは if then がたくさんありましたが、最終的に最適化されたロジックは次のとおりです。11秒と300ミリ秒かかりました。
これが vDSP の実装です。面倒な整数への浮動小数点演算を行ったり来たりしても、わずか 6 秒しかかかりませんでした。ほぼ 50% の改善!
これが Neon の実装です。初めてなので仲良く遊んでね!vDSP より遅く、9 秒と 300 ミリ秒かかりましたが、私には意味がありませんでした。vDSP が NEON よりも最適化されているか、何か間違ったことをしています。
PS: これはこの規模での私の最初のベンチマークなので、シンプルに保つようにしました (大きなループ、設定コード定数、NSlog を使用した開始/終了時間の出力、リンクされたフレームワークの高速化のみ)。これらの仮定のいずれかが結果に大きな影響を与えている場合は、批判してください。
ありがとう
linux - Linux で同等の vDSP
私は、OS X および iOS で Apple の vDSP プリミティブを使用して、良い経験をしました。
現在、vDSP に依存するコードを Linux に移植しようとしていますが、標準ライブラリの 1 つに組み込まれている同等のものが利用できるかどうか疑問に思っています。
ios - FFTのサイズは実際に何を意味しますか
- Apple ドキュメントの FFT サンプル コードを使用している場合、N、log2n、n、および nOver2 は実際には何を意味するのでしょうか?
- N は fft のウィンドウ サイズを指すのか、それとも特定のオーディオのサンプル数全体を指すのか、および
- オーディオ ファイルから N を計算するにはどうすればよいですか?
- オーディオ サンプリング レート、つまり 44.1kHz とどのように関係していますか?
- このコードの FFT フレーム サイズは?
コード:
ios - サウンドファイルをFFTに変換するためにiOSでvDSPを使用する方法
私は Audio フレームワークを初めて使用しますが、しばらく検索した後、デジタル信号処理用の iOS API によって提供される Accelerate フレームワークを見つけました。私のプロジェクトでは、fft を使用して 2 つのサウンドを比較できるように、サウンド ファイルを fft に変換したいと考えています。では、これをどのように進める必要がありますか?私はリンゴの aurio touch サンプル アプリを試しましたが、加速フレームワークを使用していませんでした。サウンドファイルを fft に変換してから、correlation を使用して比較するのを手伝ってくれる人はいますか?
ios - iOS FFT スペクトルを描く
私はこれらの質問を読みました:
Apple FFT および Accelerate フレームワークの使用
Accelerate フレームワークを使用して FFT を実行する場合、バッファを設定するにはどうすればよいですか?
iOS FFT Accerelate.framework は、再生中にスペクトルを描画します
それらはすべて、加速フレームワークで fft をセットアップする方法を説明しています。彼らの助けを借りて、fft をセットアップし、基本的なスペクトラム アナライザを入手することができました。現在、fft から取得したすべての値を表示しています。ただし、特定の周波数を再設定する 10 ~ 15、または可変数のバーのみを表示したいと考えています。iTunes や WinAmp Level Meter と同じです。1. ある範囲の周波数からマグニチュード値を平均化する必要がありますか? それとも、特定の周波数バーのマグニチュードを示しているだけですか? 2. また、マグニチュード値を db に変換する必要がありますか? 3. データを特定の範囲にマッピングするにはどうすればよいですか。サウンドのビット深度の最大 db 範囲に対してマッピングしますか? ビンの最大値を取得すると、最大マッピング値がジャンプします。
私のRenderCallback:
音楽を再生すると、-96db から 0db までの値が得られます。点をプロットする:
私のかなり丸みを帯びた曲線を与えています:
db に変換しない場合は、配列の値に 10000 を掛けてプロットし、素敵なピークを得ることができます。
私は何か完全に間違っていますか?可変数のバーを表示するにはどうすればよいですか?
ios - vDSP_desamp FIR フィルターのサンプル履歴の連続性
vDSP_desamp()ルーチンを使用して、常にキャプチャされているオーディオ信号のダウンサンプリングを実行しようとしています。Accelerate フレームワークのドキュメントによると、このルーチンは FIR フィルタリングとデシメーションを実行します。
ただし、FIR フィルタリングを実行するためにサンプル履歴を保存するために必要な循環バッファーの入力パラメーターが API に提供されていないため、競合があります。これにより、各関数呼び出し中にサンプル履歴がリセットされているか、私が知っているアルゴリズムとは異なるアルゴリズムが適用されていると思われます。
残念ながら、この関数は完全なブラック ボックスであり、フィルタリングの実行方法や信号の連続性を確保する方法についてのヒントはありません。
フィルタリングの連続性を得るために、前のバッファの最後の N サンプル (N はフィルタ タップの数) で各フレームをパディングすれば十分だと思いますか? を呼び出しvDSP_desamp()た後、これらの padding-sample 出力を破棄しますが、パディング サンプルが処理された後、サンプル履歴行が正しく初期化されるはずです。
の内部に関するヒントvDSP_desamp()は大歓迎です。