問題タブ [signal-processing]
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.
audio - リアルタイムピッチ検出
歌っているユーザーのピッチ検出をリアルタイムで実行しようとしていますが、多くの問題が発生しています。FFT( FFT問題(ランダムな結果を返す))や自己相関(自己相関ピッチ検出はマイク入力でランダムな結果を返す)など、さまざまな方法を試しましたが、良い結果を得る方法がないようです。誰かがリアルタイムのピッチ追跡の方法や、私がすでに持っている方法を改善する方法を提案できますか?リアルタイムのピッチ検出に適したC/C++メソッドが見つからないようです。
ありがとう、
ニール。
編集:注意するために、マイク入力データが正しいこと、および正弦波を使用した場合の結果が多かれ少なかれ正しいピッチであることを確認しました。
編集:申し訳ありませんが、これは遅れていますが、現時点では、結果の配列と各インデックスから値を取り出し、X軸にインデックスをプロットし、Y軸に値をプロットすることで自動照合を視覚化しています(両方をで割っています) 100000か何か、そしてOpenGLを使用しているim)、データをVSTホストにプラグインし、VSTプラグインを使用することは私には選択肢ではありません。現時点では、ランダムなドットのように見えます。私はそれを正しく行っていますか、それともそれを行うためのコードを教えてください、または生のオーディオデータと自己相関データを視覚化する方法を理解するのを手伝ってください。
image-processing - 異なる次元の 2 つの画像のスペクトルを乗算するにはどうすればよいですか?
これは「プログラミング」の問題ではありません。しかし、それはこのコミュニティで広く知られ、理解されていることだと確信しています。
画像 x と、はるかに小さい画像 y があり、それらの FFT を乗算して 2 つを畳み込む必要があります。しかし、それらは同じサイズではないため、周波数領域の乗算を行う方法がわかりません。
x (次元 4096 x 4096 の整数行列) の (2 次元) FFT を取得すると、周波数領域表現 X (複素数の行列であり、次元は 2048 x 2048 だと思います) が得られます。 )。
同様に、(次元 64 x 64 の整数行列である y の 2 次元 FFT を取得します。これにより、周波数領域表現 Y (複素数の行列でもあり、次元は 32 であると思います) が得られます。 ×32)。
Numerical Recipes で fourn 関数を使用しているため、入力行列 x と y を 1 次元配列に折りたたむ必要があり、これが離散フーリエ変換 X と Y に置き換えられます。画像の二次元問題、私は一次元配列で作業しています。
まったく同じ次元の x と y の 2 つの画像を畳み込みたいとします。それはすべて非常に簡単です:
しかし、X と Y の長さが異なる場合、どのように乗算を行うのでしょうか?
1 つの可能性は、x と同じ次元になるように y をパディングすることです。しかし、これは恐ろしく非効率的です。別の可能性は、Y をパディングして X と同じ次元にすることです。しかし、これが周波数空間で何を意味するのかわかりません。
この質問の別の言い方は次のとおりです。FFT を使用して非常に異なる次元の 2 つの画像を畳み込みたい場合、それらのスペクトル (周波数領域表現) の乗算を行うことができます。その乗算を行うにはどうすればよいですか?
ありがとう、
〜マイケル。
c# - サイン値のパフォーマンスの計算とルックアップテーブル?
ドメインが0.01から360.01の間である場合に、正弦(コサインまたはタンジェント-何でも)を計算する必要があるとしましょう。(C#を使用)
よりパフォーマンスの高いものは何ですか?
- Math.Sinの使用
- 事前に計算された値を持つルックアップ配列を使用する
ドメインを考えると、オプション2の方がはるかに高速であると予想します。ドメインの精度(0.0000n)のどの時点で、計算のパフォーマンスがルックアップを上回りますか。
audio - マイクからのOpenALリアルタイムオーディオ処理
マイクデータをリアルタイムで処理・再生できるクロスプラットフォームのアプリケーションを書きたいです。概念実証として、人々が互いに話し、自分の声にフィルターを適用できるチャットルームを想像してみてください。OpenALはこれに適していますか?そうでない場合、誰かが代替手段を提供できますか?さらに、誰かがマイクから読み取り、出力を吐き出す単純な「hello world」プログラムを提供またはリンクできるとしたら、それは素晴らしいことです。
ありがとう!
iphone - iPhone:DSP /フーリエ変換/周波数領域を実行するCPUパワー?
MICオーディオを継続的に分析し(スニッパーや事前に録音されたサンプルだけでなく)、周波数グラフを表示して、オーディオの特定の側面を除外したいと考えています。iPhoneはそのために十分強力ですか?GoogleとiPhoneの音声認識、Shazaamやその他の音楽認識アプリ、ギターチューナーアプリを考えると、答えはイエスだと思います。ただし、どのような制限に対処する必要があるのかわかりません。
誰かがこのエリアで遊んでいますか?
c++ - 電話回線のトーン信号を理解するためのC++API
トーン信号を理解するなどの電話回線を処理するための優れたC++ソースコードまたはAPIはありますか。たとえば、私はその人が3に入っているかどうかを調べたいと思います(これはトーンサウンドを使用して行われる可能性があります)。
この目的のために特別なモデムが必要ですか、それとも標準のモデムのみを使用して行うことができますか。
iphone - 浮動小数点演算の回避
iPhone用の小さなソフトウェアシンセを書きました。
パフォーマンスをさらに調整するために、Sharkを使用してアプリケーションを測定したところ、float/SInt16変換で多くの時間が失われていることがわかりました。
そこで、「すぐに使用できる」SInt16サンプルを返すルックアップテーブルを事前に計算して、変換を回避するためにいくつかの部分を書き直しました。これは今のところうまく機能します。
現在、整数演算のみを使用するようにいくつかのフィルターとADSRエンベロープの実装を書き直そうとしていますが、浮動小数点数なしで乗算/除算を実行する方法についていくつかのヒントを使用できます。
私はiPhoneの標準フォーマットをターゲットにしています:
- LPCM
- 16ビット整数サンプル
フロートを使用せずに最終サンプルに振幅を適用するための良いアプローチは何ですか?
編集:
私がこれまでに理解した唯一のことは、現在のサンプルを右シフトすることで2の累乗で割ることができるということです。
しかし、それを使ってスムーズなADSRエンベロープを作成するためのエレガントな方法は考えられません。
Edit2:
すべての素晴らしい答えをありがとう!
私の現在のアプローチ:
- すべてのADSRエンベロープ値を正のSInt16範囲にします
- ウェーブテーブルからの現在の値を乗算します(中間体をSInt32として格納します)
- 結果を右に16シフトします
これはうまくいくようです:)
assembly - TI DSPプログラミング-Cは十分に高速ですか、それともアセンブラが必要ですか?
TexasInstrumentsDaVinciプラットフォーム用の画像処理プログラムをいくつか作成します。C言語でのプログラミングに適したツールはありますが、アセンブリ言語に頼らずにDSPプロセッサを最大限に活用できるのではないかと思います。このDSPプラットフォーム上のCとアセンブラーで記述されたプログラム間の速度の比較について知っていますか?
audio - スマートフォンでの音符のピッチ認識
低速のCPU、コードサイズ、RAMなどの限られたリソースで、電子チューナーやソフトウェアチューナーと同様に、音符のピッチを検出するのに最適な方法はありますか?
使用する必要があります:
- キスFFT
- FFTW
- 離散ウェーブレット変換
- 自己相関
- ゼロクロッシング分析
- オクターブ間隔のフィルター
他の?
一言で言えば、私がやろうとしているのは、任意の(合理的な)楽器で演奏された、中央Cから2オクターブ下から2オクターブ上にある単一の音符を認識することです。半音の20%以内にしたいのですが、つまり、ユーザーがフラットすぎたりシャープすぎたりする場合は、それを区別する必要があります。ただし、チューニングに必要な精度は必要ありません。
c++ - FFTを使用したリアルタイムのピッチ検出
C++を使用してリアルタイムのピッチ検出を行おうとしています。他のすべてがうまくいかなかったので、performous(http://performous.org/ )からいくつかのコードをテストしています。私はこれがうまくいくことを確かに知っています、しかし私はそれをうまく動かすことができません。私はこれを数週間試しましたが、ピッチ検出コードを機能させることができませんでした。