問題タブ [fft]
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 - 高速フーリエ変換を計算するとき..?
2 つのチャネルを持つマイクから音を取得する場合、周波数スペクトルを計算するには、次のようにします。
- すべてのデータ入力の高速フーリエ変換を計算しますか?
- 左右の各チャネルの高速フーリエ変換を計算し、両方の平均を作成しますか?
- 左右の各チャネルの高速フーリエ変換を計算し、両方の最大値を取得しますか?
- 別の方法で計算しますか?
python - Python/SciPy のピーク検出アルゴリズム
一次導関数のゼロクロッシングなどを見つけることで自分で何かを書くことができますが、標準ライブラリに含まれるのに十分一般的な関数のようです。誰か知っていますか?
私の特定のアプリケーションは 2D 配列ですが、通常は FFT などでピークを見つけるために使用されます。
具体的には、この種の問題では、複数の強いピークがあり、その後、ノイズが原因である無視されるべき小さな「ピーク」がたくさんあります。これらは単なる例です。私の実際のデータではありません:
1 次元ピーク:
2 次元ピーク:
ピーク検出アルゴリズムは、これらのピークの位置 (値だけでなく) を見つけ、理想的には、おそらく二次補間などを使用して、最大値のインデックスだけでなく、真のサンプル間のピークを見つけます。
通常、いくつかの強いピークのみを気にするため、特定のしきい値を超えているか、振幅によってランク付けされた順序付けられたリストの最初のnピークであるために選択されます。
私が言ったように、私はこのようなものを自分で書く方法を知っています。うまく機能することが知られている既存の関数またはパッケージがあるかどうかを尋ねているだけです。
アップデート:
MATLAB スクリプトを変換したところ、1 次元の場合は問題なく動作しましたが、改善される可能性があります。
更新された更新:
sixtenbeは 1 次元の場合のより良いバージョンを作成しました。
algorithm - FFTの説明
次の推論に何か問題があることは知っていますが、それが何であるかはわかりません。
FFT:
与えられた 2 つの多項式
A = a_0 + a_1 x + a_2 x^2 + ... + a_n x^n
と
B = b_0 + b_1 x + b_2 x^2 + ... + b_n x^n
積の係数を計算できます
AB = \sum _k = 0 ^ 2n ( \sum _ j = 0 ^ k (a_j b_{k-j}))x^k
間に合い
O(n log n )
ます。したがって、2 つのベクトルが与えられた場合、時間内にベクトルを
(a_0, ..., a_n)
計算(b_0, ..., b_n)
できます(ベクトルをゼロに埋め込むことによって)。v_i = \sum j = 0 ^ k ( a_j b_{k-j})
O(n log n)
上記を考えると、ベクトルの 1 つを前処理し、時間内に 2. のように畳み込みを計算することによって、
A =(a_0, ..., a_n)
との内積を計算できるはずです。B =(b_0, ..., b_n)
A.B = \sum_j=0 ^ n a_j b_j
O(n log n)
B
B' = (b_n, b_{n-1}, ..., b_1, b_0)
O(n log n)
上記の推論が正しければ、時間内の内積を計算することで、2 つの行列の行列乗算を時間内に実装できることを意味しnxn
ます。O(n^2 log n )
O(n log n)
O(n)
ただし、私たちが知っている行列乗算の最適な実行時間は約でO(n^2.4)
あるため、これが真実である可能性は低いと思われます。これは、おそらくステップ 1、2、または 3 の意味が正しくありません。
python - portaudio で numpy を使用して低音、中高音を抽出する方法
この例 のように、入力オーディオストリームから周波数情報を抽出する方法 (PortAudio を使用)? portaudio と numpy が気になる…
fft について 100% 確信が持てません。どうすれば numpy をチャンクに渡して、低音、中音、高音の -1.0 から 1.0 までの 3 つの値を取得できますか?
これのオーディオ部分を理解できるので、これが1つのチャネルだけであってもかまいません。それらを見ると、目の前を泳ぐのは数学です:)
matlab - 逆フーリエ変換のスパイク
MATLAB で 2 つのデータ セットを比較しようとしています。これを行うには、データをフーリエ変換し、フィルター処理してから逆フーリエ変換することで、データ セットをフィルター処理する必要があります。
データを逆フーリエ変換すると、赤いデータセットの両端にスパイクが発生します (写真は最初のスパイクを示しています)。青い線のように、最初はゼロに近いはずです。多くのデータセットを比較していますが、これはたまにしか起こりません。
この現象について 3 つの質問があります。第一に、それを引き起こしている可能性があるもの、第二に、それをどのように修正できるか、そして第三に、時系列に沿ってさらにデータに影響を与えるか、それとも時系列の最初と最後にデータに影響を与えるか.
どんな助けでも大歓迎です。
signal-processing - FFT結果の大きさは波の周波数に依存する?
FFT から得た結果に困惑しており、助けていただければ幸いです。
私は FFTW 3.2.2 を使用していますが、他の FFT 実装 (Java) でも同様の結果が得られました。正弦波の FFT を実行すると、結果のスケーリングは波の周波数 (Hz) に依存します。具体的には、整数に近いかどうかに依存します。結果の値は、周波数が整数に近い場合は非常に小さくスケーリングされ、周波数が整数の間にある場合は桁違いに大きくなります。このグラフは、さまざまな周波数について、波の周波数に対応する FFT 結果のスパイクの大きさを示しています。これは正しいですか??
FFT の逆 FFT が、元の正弦波にサンプル数を掛けたものに等しいことを確認しました。FFT の形状も正しいようです。
個々の正弦波を分析している場合は、その高さに関係なく FFT でスパイクを探すだけでよいので、それほど悪くはありません。問題は、正弦波の合計を分析したいということです。たとえば、440 Hz と 523.25 Hz の正弦波の合計を分析している場合、523.25 Hz の正弦波のスパイクのみが表示されます。もう一方のスパイクは非常に小さいため、ノイズのように見えます。Matlabでは機能するため、これを機能させる方法が必要です-両方の周波数で同様のサイズのスパイクが発生します。以下のコードを変更して、異なる周波数のスケーリングを均等化するにはどうすればよいですか?
macos - OSX環境でのオーディオファイルFFT
OS XのリニアPCMオーディオファイル(複数のオーディオチャネルが含まれる可能性があります)でFFTを実行しようとしています。これを実行するための最良の方法は何ですか?
いくつかの情報源は、AppleのAccelerateFrameworkが私に必要なものであることを示しています。もしそうなら、それらのFFT関数で使用するために浮動小数点データをどのように抽出して適切に準備する必要がありますか?
audio - Core Audio を使用して AIFF からフロートを抽出する
OS X で Core Audio を使用して、AIFF ファイル内の一連のフレームを FFT の実行に適した 32 ビット float の配列に抽出する方法はありますか?