問題タブ [goertzel-algorithm]

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.

0 投票する
0 に答える
773 参照

java - Android - goertzel を使用した FSK のデモ

このコード https://stackoverflow.com/questions/23432398/audio-recorder-in-android-process-the-audio-bytesを使用してマイクの音声をキャプチャしていますが、データを ByteArrayOutputStream に書き込んでいます。録音が終わったら、Goertzel Algorithm を使用してキャプチャされた信号をモジュール解除したいと考えています。FSK 信号は 2 つの周波数 (「1」の場合は 800Hz、「0」の場合は 400Hz) で構成され、各ビットは 100 サンプルを使用してモジュール化されます。私はこのクラスの Goertzel を使用しています: http://courses.cs.washington.edu/courses/cse477/projectwebs04sp/cse477m/code/public/Goertzel.java私は 150 のビン サイズを使用しようとしています。

これが私がやろうとしていることです: 記録を終えた後のコード:

関数 testSpecificFrequency:

コンストラクターに 800Hz を送信し、その後 400Hz を送信することで、結果がどうなるかを確認しようとしましたが、この時点からどのように進めればよいかわかりません =\

何か案は?

0 投票する
1 に答える
163 参照

windows-phone-8 - 時間に沿ってバッファ内の周波数を検出する

たとえば、一連の周波数のビープ音をバッファに記録すると、次のようになります。

50 ミリ秒で 15kHz、50 ミリ秒で 17k と続きますが、タイム プレーンに沿って「移動」し、この周波数を (goertzel などで) デコードする方法はありますか?

ねえ、これは更新です。チェックするサウンド バッファー内の最初の区切り文字を見つける方法を示すコードを追加しました。5 秒間のバッファを記録すると (ファイルではなくストリーム バッファに記録します)、最初のスニペットは、開始区切り文字が始まるインデックスを分析するのに 30 秒ほどかかります。私はそれが非常に初心者だと思います...より良い解決策を見つけなければなりません。ありがとうございます (すべての区切り文字は 0.2 秒の長さです) 開始区切り文字 = 12KHz、1's = 13k、0's = 14k、終了区切り文字 = 15k です。

私のゲルツェルはこんな感じです:

0 投票する
0 に答える
167 参照

c# - Goertzel フィルターは、バッファーの平均エネルギーに関連するマグニチュードを返しました

バッファーのスライスを Goertzel フィルターに渡します。バッファーには、18Khz の周波数と無音が含まれています。それぞれの持続時間は 75ms です。サンプリング レート = 44.1。FSKのように機能します。

18KHz の Goertzel フィルターのしきい値を検出しようとしています。次の式でバッファの平均エネルギーを測定することを考えました。

さて、私の問題は、エネルギーが Goertel フィルターの戻り値にどのように関連しているかということです。私が測定した周波数が低いほど、ゲーテルの大きさが小さいことに気付きました。たとえば、私の Goertel が 13K を検出するように調整されている場合、50 から 100 のような値が得られます。18k の場合、0.00001 から 0.005 までのさらに小さな数値が得られます。私が渡す配列は float[] で、すべての数値は +-1 の範囲です。そのための良い解決策はありますか?ありがとう

0 投票する
1 に答える
981 参照

c# - C#でほぼリアルタイムでオーディオトーンを検出する

ほぼリアルタイムでいくつかのオーディオ信号 (純粋な正弦波) を検出しようとしています。レイテンシが発生することはわかっています。最初に、75ms の間に 10Khz のトーンをいくつか検出しようとしました。これは、Goertzel フィルターによって実現されます。その問題に適した手法は何ですか? Goertzel によって常に検出される小さなバッファーを作成することを考えましたが、信号がいつ開始されるかがわからないため、これは良くありません。助けやアイデアを教えてもらえますか?ありがとう

0 投票する
1 に答える
600 参照

fft - gnuRadio デュアル トーン検出

約 900kHz 離れた 2 つの狭帯域トーン (ベースバンドに変換された約 100kHz の 1 つと約 1MHz の 1 つ) を特徴付ける効率的な方法を考え出そうとしています。時間の経過とともに周波数が大きく変化することはありませんが、監視したい振幅の変動がある可能性があります。

各トーンの幅はおよそ 100 Hz であり、これら 2 つの獣を長時間にわたって約 0.1 Hz の分解能で特徴付ける必要があります。サンプルは、最高のトーンを適切に取得するために、2M サンプル/秒 (TBD) を超えて入ってきます。

周波数領域データを抽出するために、1 秒に 1 回、データに対して 2MSample FFT を超えるブルート フォースを実行することを (可能であれば) 回避しようとしています。効率的なアプローチはありますか?関心のあるバンドの周りで 2 つの (はるかに) 小さい FFT を実行するようなものですか? 私は Goertzel と chirp z の方法を見てきましたが、それが処理の節約に役立つかどうかはわかりません。

0 投票する
1 に答える
5505 参照

c# - WAV ファイルからの DTMF のデコード

以前の質問に続いて、私の目標は、C# から WAV ファイル内の DTMF トーンを検出することです。ただし、これを行う方法を理解するのに本当に苦労しています。

DTMF は周波数の組み合わせを使用し、Goertzel アルゴリズムを使用できることを理解しています...どういうわけか。Goertzel のコード スニペットを取得し、その中に .WAV ファイルを押し込んでみました (NAudio を使用してファイルを読み取ります。これは 8KHz モノラル 16 ビット PCM WAV です)。

私がやっていることが間違っていることはわかっています。バッファを反復処理し、一度に小さなチャンクの Goertzel 値のみを計算する必要があると想定していますが、これは正しいですか?

第二に、Goertzel メソッドの出力が何を伝えているのかよくわかりません: double (例: 210.985812) が返されますが、それをオーディオ内の DTMF トーンの存在と値と同一視する方法がわかりません。ファイル。

この回答で参照されているライブラリを含め、どこでも回答を検索しました。残念ながら、ここのコードは機能していないようです (サイトのコメントに記載されているとおり)。TAPIExが提供する商用ライブラリがあります。私は彼らの評価ライブラリを試してみましたが、まさに私が必要としているものを実行してくれました - しかし、彼らは電子メールに応答していません。

おそらく正確な質問がわからないときに答えを探していることを非常に意識していますが、最終的に必要なのは .WAV ファイルで DTMF トーンを見つける方法だけです。私は正しい方向に進んでいますか? そうでない場合、誰かが私を正しい方向に向けることができますか?

編集: @Abbondanza のコードを基礎として使用し、オーディオ ファイルの小さなセクションをドリップフィードする必要があるという (おそらく根本的に間違っている) 仮定に基づいて、これを取得しました (非常に大まかな概念実証のみ) コード:

これは、Audacity で表示されるサンプル ファイルです。押されたDTMFキープレスを追加しました-

ここに画像の説明を入力

そして...ほとんど機能します。上記のファイルから、ほぼ正確に 3 秒経過するまで DTMF が表示されないはずですが、私のコードでは次のように報告されています。

... 3 秒になるまで、それから正しい答えに落ち着き始めます: それ1は押されました:

1.2をAdjustmentFactor超えると、ほとんど検出されなくなります。

私はほとんどそこにいると感じていますが、私が見逃しているものを誰か見ることができますか?

EDIT2: 上記のテスト ファイルは、こちらから入手できます。上記adjustedMeanPowerの例の は47.6660450354638であり、累乗は次のとおりです。

ここに画像の説明を入力

0 投票する
1 に答える
678 参照

c# - NAudio WaspiLoopback Goertzel

更新 #2:

私はコードをいじり続けました.私の唯一の問題は、マイクを通して音が存在するときに周波数を検出していることですが、アルゴリズムはまったく機能していません. 500Hz を要求すると、その周波数で音がまったくないタフな出力レベルでも出力されます。以下のコード (この記事はあまり注目されていないことがわかったので、定期的に更新しています)


更新 #1:

私はコードをいじっていて、最終的にエラーなしで動作するものを手に入れることができましたが、それは非常に不正確です.誰かがそれを行うためのより良い方法を教えてもらえますか(「動作」バージョンのコードは以下にあります)?


私は、マイクを介してコンピューターで再生されている周波数パワーを取得できるソリューションを作成しようとしています (私のプロジェクトでは複数の周波数も計画しているため、これは DTMF に似ています)。

以下に、エラーメッセージを表示しているこれを試しているコードを示します。

オフセットと長さが配列の範囲外であるか、カウントがインデックスからソース コレクションの末尾までの要素数を超えています。

範囲外のエラーが発生する理由を理解できないようです-おそらく、私はDSPとNAudioに非常に慣れていないためです(私は何時間も試しました-グーグルを試し、他のstackoverflowの投稿を検索しました.少し助けになったものを見つけて、それが私が今いる場所にたどり着いた方法です)。

Audacity の WASPI 再生オプションからデフォルトのマイクで再生している 525Hz 50 秒のトーン ファイルをダウンロードするには、ここをクリックしてください

これを機能させるための助けがあれば大歓迎です。

0 投票する
3 に答える
91 参照

neural-network - サウンド入力を変更して周波数を決定する

私はプロジェクトに取り組んでいますが、私の理解を超えた障害にぶつかりました。私の目標は、サウンド ファイルから情報が供給される人工的なニューラル ネットワークを作成し、それをシステムに移植して、和音のラベル付けを行うことです。これを音楽の編曲に役立てたいと思っています。実際に編曲自体を行うのではなく、ハーモナイゼーションの面で役立つようにしたいと考えています。余談です。

Goertzel と FFT 関数についてできる限り読みましたが、これらの関数が探しているものかどうかはわかりません。サウンド サンプルの特定の周波数を探しているのではなく、サンプルの高域、中域、低域の周波数を見つけたいと考えています。

特定の周波数が見つかった場合、Goertzel アルゴリズムが高い数値を返すことは知っていますが、特定のサンプルで考えられるすべてのトーンに対してアルゴリズムを実行するのは、計算上無駄なようです。何を使用するかについてのアイデアはありますか?

または、これが不可能な場合は、この 1 つのプロジェクトに多くの時間を費やす前に、そのことも知りたいです。

お時間をいただきありがとうございます!

0 投票する
1 に答える
848 参照

c# - NAudio で C# を使用してピアノの音符を検出する

ピアノで弾く音を識別するプログラムを作成しようとしていますが、Goertzel フィルターは実装が簡単なアルゴリズムであることがわかりましたが、その使用方法がわかりません。

コードは次のとおりです。

コードが正しく動作しませんが、マイクに向かって C4 ノートを再生するたびに、コンソールに「あなたは C4 を再生しました」と書き込むにはどうすればよいですか?

0 投票する
0 に答える
1799 参照

java - Goertzel アルゴリズムを使用して周波数を検出する

Goertzel アルゴリズムを使用して周波数を検出する Android 用のプログラムを作成しようとしています。ただし、AudioRecord read() メソッドから取得したデータにアルゴリズムを適用すると、マグニチュードはターゲット周波数でピークに達しません (つまり、通常は低周波数でピークになります)。私は何か誤解していますか?

Goertzel.java

}