問題タブ [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.
signal-processing - ピッチ検出のためのケプストラル分析
音声信号からピッチを抽出しようとしています。
IRC の誰かが、ダブル FFT を使用してこれを実現する方法を説明してくれました。具体的には:
- FFTを取る
- 絶対値の 2 乗の対数を取る (ルックアップ テーブルで実行可能)
- 別のFFTを取る
- 絶対値をとる
vDSPを使用してこれを試みています
なぜこのテクニックを以前に知らなかったのか理解できません。私はたくさんの狩りと質問をしました。数週間分。もっと言えば、なぜそれを考えなかったのか理解できません。
vDSP ライブラリでこれを達成しようとしています。これらすべてのタスクを処理する機能を備えているようです。
ただし、最終結果の精度については疑問に思っています。
以前、単一の FFT の周波数ビンを調べて極大値を求める手法を使用しました。ピークが検出されると、狡猾な手法 (最後の FFT からの位相の変化) を使用して、ビン内の実際のピークをより正確に配置します。
ここで紹介するこの手法では、この精度が失われるのではないかと心配しています。
2 番目の FFT の後にこの手法を使用して、基本波を正確に取得できると思います。しかし、ステップ 2 で情報が失われているように見えます。
これは潜在的にトリッキーなプロセスであるため、経験のある誰かが私が行っていることを見て、正気かどうかをチェックしてもらえますか?
また、隣接するビンに二次関数を当てはめることを含む代替手法があると聞きました。これは同等の精度ですか?もしそうなら、ビンフェーズを覚える必要がないので、私はそれを支持します。
だから、質問:
- このアプローチは理にかなっていますか?改善できますか?
- 「対数二乗」コンポーネントが少し心配です。まさにそれを行う vDSP 関数があるようです: vDSP_vdbcon. ただし、対数テーブルを事前計算するという兆候はありません-FFT関数では、明示的な事前計算関数を呼び出して渡す必要があるため、そうではないと思います。そして、この機能はそうではありません。
- 高調波を拾う危険性はありますか?
- vDSP に最大値を最初に引き出させる狡猾な方法はありますか?
この手法に関する研究や文献を教えてくれる人はいますか?
主な質問: それは十分に正確ですか? 精度を上げることはできますか?専門家から、正確さは確かに十分ではないと言われました. これは行の終わりですか?
円周率
PS タグを作成したいときにとてもイライラしますが、できません。:| 私はメンテナーにタグの試行を追跡するよう提案しましたが、無視されたことは確かです。vDSP、加速フレームワーク、ケプストラム分析用のタグが必要です
iphone - AccelerateFrameworkとvDSPを使用したiPhone画像処理
更新:より多くのコードを含む以下の追加の質問を参照してください。
画像をぼかすためのカテゴリをコーディングしようとしています。私の出発点は、ここにあるJeffLaMarcheのサンプルです。これは(他の人が提案した修正後)正常に機能しますが、私の要件には1桁遅すぎます。3GSでは、適切なぼかしを行うのに3秒かかる可能性があり、これを0.5未満に下げたいと思います。フルスクリーンの場合は秒(速いほど良い)。
彼はAccelerateフレームワークをパフォーマンスの向上として言及しているので、私はこれ、特にAppleDocumenationによるとvDSP_f3x3を見て最後の日を過ごしました。
3x3カーネルで2次元畳み込みを実行することにより、画像をフィルタリングします。単精度。
完璧-私は適切なフィルターマトリックスを持っていて、画像を持っています...しかし、これは私が困惑するところです。
vDSP_f3x3は、画像データが(float *)であると想定していますが、私の画像は;からのものです。
コンテキストはkCGImageAlphaPremultipliedFirstを使用したCGBitmapContextCreateから取得されるため、私のsrcDataは実際にはコンポーネントあたり8ビットのARGBです。
私が本当に必要としているのはfloatコンポーネントのコンテキストだと思いますが、Quartzのドキュメントによると、kCGBitMapFloatComponentsはMac OSでのみ利用可能であり、iOSでは利用できません:-(
私が持っている整数コンポーネントをvDSP_f3x3が必要とするfloatコンポーネントに変換するaccelateフレームワークを使用する本当に速い方法はありますか?自分でできるということですが、それを実行してから畳み込みを行ってから元に戻すまでに、畳み込みを行った方がよいので、今よりもさらに遅くなっているのではないかと思います。
多分私は間違ったアプローチをしていますか?
vDSPを使用してiPhoneで画像処理を行ったヒントはありますか?私が見つけることができるドキュメントは、非常に参照指向であり、この種のことに関してはあまり初心者に優しいものではありません。
誰かが本当に速いぼかし(そして高品質、解像度を下げてから私が見たものを再スケーリングしてズボンに見えるものではない)のリファレンスを持っているなら、それは素晴らしいでしょう!
編集:
@Jasonに感謝します。私はこれを実行し、ほぼ機能していますが、問題は、画像がぼやけても、呼び出すたびに1ピクセル左にシフトすることです。また、画像が白黒になるように見えますが、それは別のことかもしれません。
このコードには、明らかに正しくないものとして飛び出しているものがありますか?私はまだそれを最適化しておらず、少しラフですが、たたみ込みコードが十分に明確であることを願っています。
vDSP_conv行をコメントアウトし、次の行を次のように変更する場合は、これを追加する必要があります。
その後、予想どおり、私の結果は元のソースのクローンになります。カラーで、左にシフトされていません。これは、問題が発生しているのは畳み込みであることを意味しますが、どこにあるのかわかりません:-(
思考:実際にこれについて考えると、畳み込みは入力ピクセルがARGB形式であることを知る必要があるように思われます。そうしないと、畳み込みは値を乗算し、その意味についての知識がありません(つまり、複数のR * Bなど) 。これは、私が思うに白黒の結果が得られる理由を説明しますが、シフトは説明しません。繰り返しになりますが、ここにある私の素朴なバージョンよりも多くのものが必要かもしれないと思います...
最終的な考え:左へのシフトはフィルターの自然な結果だと思います。画像のサイズを確認し、場合によってはそれを埋める必要があります...したがって、コードは実際に機能していると思います。
iphone - vDSP フレームワーク (iOS) を含める方法は?
vDSP-Framework を含めるのに問題があります。私はそれがただの手順だと思った:
しかし、ビルドしようとすると、エラーが発生します:
フレームワークをリンクしていないと思います。しかし、どうすればそれを行うことができますか?
iphone - Accelerate Framework for iPhoneに点の配列の線形回帰を計算する機能はありますか?
配列に格納されている一連のダブルポイントの回帰を計算するための最速/最も簡単なソリューションを探しています。
Accelerateフレームワークまたはチュートリアルで適切な機能を見つけようとしましたが、うまくいきませんでした。
誰かがそれをしましたか?
gcc - blackfingcc-ツールチェーンリンクエラー`Ret_Add'への未定義の参照
次の議論:
VDSPコンパイラのFFTアルゴリズムをベアメタルアプリに変換してコアBで実行し、コアAでuclinuxを実行しています。リンクエラーが発生しました。どこから来たのかわかりません。
呼び出し:'/opt/uClinux/bfin-elf/bin/../bfin-elf/bin/ld.real''-v''-o''test_ad1836_driver''-T''coreb_test_ad1836_driver.lds''- just-symbol'' ../../icc_core/icc'' queue.o'' ezkit_561.o'' heap_2.o'' port.o'' tasks.o'' test_ad1836_driver.o'' list.o ' 'croutine.o''user_isr.o''bfin_isr.o''app_c.o''context_sl_asm.o''cycle_count.o''CFFT_Rad4_NS_NBRev.o''-Ttext''0x3c00000''-L''/ opt / uClinux / bfin-elf / bfin-elf / lib'' -L'' /opt/uClinux/bfin-elf/bfin-elf/lib'' -lc'GNUldバージョン2.17cycle_count.o:関数Compute_Cycle_Count':
/home/william/Development_new/Music_Recognition/code/uCLinux/uclinux-dist/user/blkfin-apps/icc_utils/example/DSP_imp/CFFT_Rad4_NS_NBRev/corea/cycle_count.asm:22: undefined reference toRet_Add'/home/william/Development_new/Music_Recognition/code/uCLinux/uclinux-dist/user/blkfin-apps/icc_utils/example/DSP_imp/CFFT_Rad4_NS_NBRev/corea/cycle_count.asm:23:未定義の参照Ret_Add'
/home/william/Development_new/Music_Recognition/code/uCLinux/uclinux-dist/user/blkfin-apps/icc_utils/example/DSP_imp/CFFT_Rad4_NS_NBRev/corea/cycle_count.asm:27: undefined reference toSave_R7'
/home/william/Development_new/Music_Recognition/code/uCLinux/uclinux-dist/user/blkfin-apps/icc_utils/example/DSP_imp/CFFT_Rad4_NS_NBRev/corea/cycle_count.asm:44: undefined reference toSave_R7'/home/william/Development_new/Music_Recognition/code/uCLinux/uclinux-dist/user/blkfin-apps/icc_utils/example/DSP_imp/CFFT_Rad4_NS_NBRev/corea/cycle_count.asm:28: Save_R7' / home/williamへの未定義の参照Save_R7'
/home/william/Development_new/Music_Recognition/code/uCLinux/uclinux-dist/user/blkfin-apps/icc_utils/example/DSP_imp/CFFT_Rad4_NS_NBRev/corea/cycle_count.asm:48: undefined reference to/Development_new/Music_Recognition/code/uCLinux/uclinux-dist/user/blkfin-apps/icc_utils/example/DSP_imp/CFFT_Rad4_NS_NBRev/corea/cycle_count.asm:45:Ret_Add'/home/william/Development_new/Music_Recognitionへの未定義の参照/uCLinux/uclinux-dist/user/blkfin-apps/icc_utils/example/DSP_imp/CFFT_Rad4_NS_NBRev/corea/cycle_count.asm:49:「Ret_Add」への未定義の参照
コードは次のようになります。
.section l1.data;
.align 4;
.var _Ret_Add = 0;
.var _Save_R7 = 0;
.section l1.text;
.global _Compute_Cycle_Count;
.align 8;
_Compute_Cycle_Count:P0.L = _Ret_Add;
P0.H = _Ret_Add;
R3 = RETS;
[P0] = R3;
.......。
ありがとう
ウィリアム
transform - vDSP と離散コサイン変換
私はFFT、DCTなどに不慣れです。最近、Apple の vDSP ライブラリのドキュメントを調べていたところ、DCT の実装が見つかりませんでした。vDSP で提供されている FFT 関数の 1 つを使用して DCT を計算する方法を誰かが知っているかどうか疑問に思っていましたか?
少し文脈。私が読んでいるグラフィックペーパーから画像処理の実装を構築しています。彼らは、いくつかの画像サンプリングを実行した後に DCT を使用すると述べました。
可能であれば、vDSP の速度を最大限に活用したいと考えています。
ios - vecLib/vDSP を使用して、エンベロープを持つサイン トーン ジェネレーターを作成する
Accelerate フレームワークを使用してサイン トーン ジェネレーターを作成したいと考えています。ジェネレーターにアタック/リリース設定 (つまり、振幅エンベロープ) を持たせたいと思っています。
正弦値でいっぱいのベクトルを作成する方法を理解しています。私が知らないのは、ベクトル データに振幅エンベロープを適用する方法です。
vDSP_vgen を使用して傾斜ベクトルを作成し、線形ボリューム エンベロープ ベクトルを作成し、正弦ベクトルにエンベロープ ベクトルを掛けることができることはわかっています。ただし、これは無駄に思えます。なぜなら、私は多くのデータ ポイントを扱っており、振幅エンベロープを格納するためだけに中間ベクトルを作成することは、私の環境ではメモリをかなり浪費するからです。
Accelerate フレームワークで振幅エンベロープを操作する最良の方法は何ですか?
ios - Accelerate の vImage と vDSP の比較
iOS の Accelerate フレームワークを使用して、iOS の Core Image がカスタム フィルター/カーネルをサポートしていないという事実を回避しようとしています。Sobel カーネルで 2 つの畳み込みを使用してエッジ検出フィルターを開発しています。、しかし、コツをつかむために単純なガウスぼかしから始めます。vImage は行列としての画像操作を対象としており、vDSP はフーリエ変換を使用したデジタル信号の処理に重点を置いています。しかし、私は vImage 関数 (vImageConvolve_XXXX など) を使い始めましたが、多くの人が vDSP の関数 (vDSP_conv、vDSP_imgfir など) を使用して畳み込みなどを行うことについて議論しているのを耳にします。それで、目前の質問につながります。いつ、一方を他方よりも使用する必要がありますか? 畳み込み演算に関して、それらの違いは何ですか? 私はどこでも見ましたが、明確な答えを見つけることができませんでした。誰かがそれに光を当てたり、正しい方向に向けたりできますか?
ありがとう!