問題タブ [kissfft]
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.
android - AndroidのリアルタイムFFTから可能な限り最も正確な可聴周波数データを取得するにはどうすればよいですか?
そこで私は、特定の音の検出とフィルタリングを含むプロジェクトの前兆として、リアルタイムオーディオアナライザーとして機能するAndroidアプリを構築しようとしています。
ですから、離散フーリエ変換の基本は理解できたと思いますが、リアルタイムの周波数解析を行うために最適なパラメーターは何かわかりません。
理想的な状況(無制限の計算能力)では、AudioRecordクラスから取得した44100サンプル/秒のPCMストリームからすべてのサンプルを取得し、44100要素のFIFO「ウィンドウ」( 2 ** 16は0で、おそらくテーパー関数ですか?)、新しいサンプルが入るたびにウィンドウでFFTを実行します。これにより、(私は)0〜22KHzのスペクトルが1秒あたり44100回更新されます。 。
これはスマートフォンでは起こらないようです。問題は、可能な限り多くの品質を維持しながら、Galaxy Nexusで扱いやすくするために、計算のどのパラメーターを減らす必要があるかわからないということです。最終的には、より感度の高い外部マイクを使用したいと思います。
FFTを取得する間にウィンドウを複数のサンプルで移動する必要があると思いますが、どの時点で、これが小さいウィンドウでFFTを実行するよりも、精度/エイリアシング/その他に悪影響を与えるかどうかはわかりません。私が見落としているオプション。
libgdxから使用しているネイティブに実装されたKissFFTを使用すると、44100サンプルあたり30〜42の44100要素FFTを実行でき、それでも応答性があります(つまり、AudioRecord.readを実行しているスレッドからバッファーがいっぱいになります) ()は、fftを実行しているスレッドがそれを排出できるよりも速くいっぱいになりません)。
だから私の質問は:
- 私が現在得ているパフォーマンスは、私が得ようとしている最高のものでしょうか?それとも、はるかに速い速度が可能であるため、私は何か愚かであるに違いないように思われますか?
- これに対する私のアプローチは少なくとも根本的に正しいですか、それとも私は完全に間違った木を吠えていますか?
質問に答えるのに役立つコードがあれば喜んで表示しますが、たくさんあるので、すべてを投稿するのではなく、選択的に表示することにしました。
opencv - FFTW fftwf_plan_r2r_2d() と同等の FFTW_REDFT01
FFTW を使用するコードを KissFFT を使用するように移植しようとしています。
コードはfftwf_plan_r2r_2d()
with をFFTW_REDFT01
使用します。
KissFFT での同等の呼び出しは何ですか?
この呼び出し ( with ) が DCT と同等である場合、代わりにOpenCVFFTW_REDFT01
などの直接 DCT 変換を使用できますか?
反射や対称化など、必要な入力データの変更はありますか?cv::dct
c++ - Tizen のリアルタイム FFT から可能な限り正確なオーディオ周波数データを取得するにはどうすればよいですか?
現在Tizen IDEに取り組んでいます。
マイクから入力データを読み取り、それに FFT を適用しました...しかし、毎回 nan 出力を取得します。
ここに私のコードがあります..
FFT を適用します。
c++ - std::vector を変換するにはどうすればよいですか& samples2 を kiss_fft_scalar* サンプルに変換しますか?
現在、入力データにkissFFTを使用しています..
std::vector& samples2 に入力データがあり、KissFFT で必要な形式に変換したい..
これを変換するために次のコードを使用しています。
しかし、最後に私は差分値を取得しています助けてください..
ここに私のコードがあります
助けてください
c++ - KissFFT を使用してピークを計算するにはどうすればよいですか?
実機にFFTをかけ、そこからピークを算出したい
ここに私のコードがあります..
ここで、コードを使用してピックを計算します。しかし、毎回0を返します
ここでは常にpeak=0になります。助けてください
最初の 25 個の FFT サンプルのスペクトル出力は次のとおりです。
fft - Kiss FFTで計画を定義して実行するにはどうすればよいですか
次の内容に間違いはありませんか?
次と等しいか: ?
cfg = fftw_plan_dft_c2r_1d(dim, in , out, FFTW_ESTIMATE);
fftw_execute(cfg);
gcc - Kissfftr の異なる結果 x86 - Atheros AR9331
これはstackoverflowに関する私の最初の質問であり、残念ながら私の英語は貧弱です。でもやってみたい。
Kissfft の twotonetest のカスタマイズされたルーチンは、2 つの異なるシステムで非常に異なる結果をもたらします。
x86 プログラムの gcc で変換された ubuntu の下では、正しい値が得られます。Arduino YUN (Atheros AR9331) プログラム用に変換された openWRT SDK では、誤った値が表示されます。FIXED_POINT の定義が無視されているようです。
定義は次のとおりです。
関数:
同じファイルからの 16 ビット サウンドの入力サンプルとして使用されます。結果は、たとえば-3dBから-15dBまで異なります。Aどこからトラブルシューティングを開始できますか?