ノイズのある正弦波を検出する方法にはどのようなものがありますか?


7

利用可能なテクニックの種類について、幅広い分類を探しています。文献調査を開始するために使用できるもの。

いくつかの詳細:

  1. リアルタイム実装に適している必要があります。

  2. バイナリの決定です。信号を継続的に入力できるはずです。アルゴは、波形の正弦波の開始時間と停止時間を検出する必要があります。

  3. 他の信号はありません。つまり、正弦波が存在しない場合、ノイズのみになります。

  4. 入力は帯域制限されており、正弦波が存在する場合は、その帯域内にあることが保証されます。

  5. トレードオフは、速度(正弦波の出現後、アルゴがその存在を検出できるようになるまでの時間)と誤検知(最小でなければならない)の間です。

  6. 自分自身がわからないため、許容できるパフォーマンス測定値について正確な数値を示すことはできません。私は私のアプリケーションに対するすべての提案を実装し、自分自身を見つけ出すつもりです。私はこの問題に取り組むための「標準的な」テクニックを探しています。

詳細:

  1. 入力はバンドパスフィルターの出力であるため、ノイズも通過帯域でのみ重要になります。

  2. 正弦波がいつ現れるかは確実ではありません。正弦波の持続時間は50〜100 msの範囲です。正弦波の振幅は変動します。


1
おそらく、スライディング(またはウォーキング)ウィンドウのフーリエアナライザーで十分でしょう。さらに詳細が必要です。ノイズも帯域制限されていますか?入力にノイズのみが存在する場合、保証された調整時間はありますか?ノイズと正弦波の振幅は時間とともに安定していますか?
mbaitoff 2013年

私が理解している限り、ノイズの多いチャネルでビープ音を検出します。次に、ノイズの中でビープ音を区別する振幅(エネルギー)しきい値を指定する必要があります。また、ビープ音の帯域制限についても触れています。これは、ビープスペクトルが広帯域であること、またはビープスペクトルが狭いが帯域内のどこかにあることを意味しますか?また、ビープ音がどのように知覚されるかを指定する必要があります。それは、速いまたはゆっくりと上昇/下降するトーンのようなもので、ターンオン/ターンオフクリックを伴うもので、スキャンウィンドウに対してどれだけ短い/長いかを指定できます。
mbaitoff 2013年

ありがとう!これにより、問題に関する多くの情報が得られます。
Peter K.

ノイズの分布について何か知っていますか?また、正弦波の周波数をアプリオリに(もしあれば)どのくらい正確に知っていますか?
Jason R

@Jason Rノイズはガウスです。正弦波の周波数は不明です。80〜250 Hzの範囲内であることが保証されています。異なる「ビープ」は同じ中心周波数になりますが、振幅は異なる場合があります。
ankit

回答:


2

サンプリングの頻度に応じて、FFT(高速フーリエ変換)が機能します。たとえば、サンプリングレートが20ミリ秒に1回だけの場合、正弦波のサンプルは数個しか得られませんが、0.5ミリ秒ごとにサンプリングすると、さらに多くのサンプルが得られます。FFTは通常、平均化するサンプル数が多い場合に最適に機能します。その場合、信号がいくつかの正弦波の合計であっても、それらを正確に特定できます。

または、MUSICアルゴリズムを確認することもできます。実装方法の詳細についてはよくわかりませんが、いくつかのリアルタイム検出シナリオで実装されています。MUSICの代替は、Espritアルゴリズムです。

それでも、サンプルサイズが十分に大きく、ノイズが信号を完全に圧倒しない場合は、FFTが(平均して)最速のオプションになります。


2
短縮されたMUSIC実装:ここで、および。 はNxP行列で、列は自己相関行列最小のP個の固有値に対応する固有ベクトルです。Pが何であるかを決定することは簡単ではなく、Wax and Kailath(1985)によってカバーされていますが、「眼球」推定を行って信号固有値とノイズ固有値を決定することもできます。PMUSIC(ω)=1eHPnePn=EnEnHeH=[0,ejω,...,e(N1)ω]EnRxx
デイブC

2

正弦波を検出する1つの方法は、Goertzelアルゴリズムを使用することですRick Lyonsは、検出のためにそれを使用する方法について、ここに素晴らしい記事を書いています

その2番目のリンクには、着信信号をフィルタリングして「決定統計」を計算するための次の方程式があります。

ここに画像の説明を入力してください


Goertzelアルゴリズムは、単一周波数共振検出器のようです。これは、元のポスタータスクのブロードバンドトーンに対してどのように機能しますか?
mbaitoff 2013年

OPは「広帯域」ではなく「帯域制限」を望んでいるようです。Goertzelの長さを適切に選択すると、「帯域制限された」正弦波に対応できるはずです。私はトレードオフがあることに同意します。正確にゲルツェル中心周波数の正弦波は、異なる周波数で同じ振幅の1つより高い測定値を提供します。ほとんどのFFTベースのアプローチには同じ問題があります。これが問題である場合、中心周波数が異なる2つまたは3つのGoertzel検出器をいつでも実行できます。
ピーターK

@PeterK、なぜ単純に複雑なDFTトーンのファミリーを使用してダウンミックスしないのですか?(つまり、GAは前者の手法よりもどのような利点がありますか?)。ところで興味深い答え。
Spacey

@Mohammad:複雑なDFTトーンのファミリーは、Goertzelアルゴリズムが実装しているものにすぎません(複数の周波数オフセットGoertzelフィルターを実装する場合)。
Peter K.

1
Goertzelアルゴリズムのファミリーは、同じ指数関数ジェネレーターを使用して複雑なダウンミックスの大きさを取得するのと同じ、複雑な指数/正弦波ジェネレーターとベクトルドット積の単純な計算の融合と考えることができます(数値の安定性と動的を除く)範囲の問題)。
hotpaw2 2013年

2

すべてはSNRに依存します。SNRが低いほど、信号をノイズから分離するために必要な処理が多くなります。私は過去に同様の問題を解決しましたが、かなり広い範囲の周波数にわたって断続的で低SNRの正弦波信号を探していました。これは私のために働いたものです:

  1. システムのノイズのオフライン特性評価を実行します(周波数領域で)。周囲のノイズレベルが時間とともに変化する場合は、対象の信号が存在しないというアルゴリズムの信頼性が高いときに、定期的にオンラインでこのノイズレベルを更新してください。ノイズがあまり定常的でない場合、これはあまり役に立たない可能性があります(そして害を及ぼす可能性があります)。
  2. 離散時間ウィンドウでスライディングFFTを実行します。バックグラウンドノイズを超えるしきい値のエネルギーを持つ周波数を探します。関心のある信号である可能性のある候補「ピーク」のリストを取得します。FFTの周波数分解能が向上するように、以前の時間ウィンドウのサンプルを含むデータの循環バッファーを保持することを選択しました。
  3. FFTで識別された対象のピーク周波数に対して正弦波整合フィルターを作成します。あるしきい値を超える応答を探します。一致フィルター(自己相関関数とも呼ばれます)はノイズを非常によく減衰させることができます。私のシステムでは、一見すると絶望的なデータのように見えたものから検出をプルするのに非常に優れていました。タイムドメインフィルターとして、マッチドフィルターは信号がいつ現れ、いつ消えるかを知ることもできます。

他の人が勧めたように、私はMUSICアルゴリズムを実験して信号とノイズを分離しました。私の問題では、FFTよりもSNRの低い候補信号を見つける方がわずかに優れていましたが、計算の負荷が非常に高かったため(そしてアルゴリズムが弱点の固定小数点DSPで実行されていたため)、使用しないことにしました。FFTを使用して検出しきい値を低く設定し、より多くのスプリアスピークを検出して、整合フィルターステージでそれらを排除する方が簡単でした。低SNRの検出は少し暗いかもしれませんが、システムについて十分に理解していれば、周囲のノイズレベルよりも低い振幅の信号を確実に検出できます。それはすべて、システムについて知っているどの情報を利用できるかに依存します。


「低いSNR検出は少し暗い芸術になる場合があります」非常に本当です。私は好奇心旺盛です、あなたはFFTで偽のピークを取得し、整合フィルターを構築し(どのように長さを選択しましたか)、次に相互相関し、そして時々答えを拒否しますか?そもそもどうして、そもそも偽のピークがあったのでしょうか。
Spacey 2013年

サンプリングレートと候補ピークの周波数を知ることで、マッチドフィルターの長さがわかります。1つの完全な正弦波を構成し、時間領域データの現在のウィンドウで、構成された正弦波の相関をチェックします。ただし、FFTで候補ピークとして決定された周波数でのみ整合フィルターを作成します。マッチドフィルターは、FFTよりも低いSNR検出を見つけることができ、検証として機能します。SNRが高い場合、FFTピークは追加の検証を必要としませんが、SNRが低い場合、FFTは誤ったピークを与える傾向があります。
ボブダゴスティーノ2013年

ボブ、なるほど。そして、最初にFFTにピークが存在するとどのように判断しますか?(それを計算するためにどのメトリックを使用しますか?)max overのようなものは平均ですか?
Spacey 2013年

@ BobD'Agostino:DFTは、それぞれが複雑な指数関数であるインパルス応答を持つクリティカルサンプリングフィルターのバンクと見なすことができます。「対象のピーク周波数」がフラクショナルDFTビンオフセットで測定され、フィルターが対象のトーンにより適切に集中できるようにならない限り、これが提案するアプローチとどのように大きく異なるかは明確ではありません。ただし、SNRが低い場合は、正確なピーク位置を特定することが難しい場合があります。
Jason R

0

次のことを提案します
。1.信号の全帯域(最低周波数信号の少なくとも数周期)を含むのに十分な幅のスライディングウィンドウを編成します
。2.現在ウィンドウ内にあるサンプルのFFTを実行します。それからのパワースペクトル。
3.既知の帯域制限でスペクトルをクロップします。
4.残りのパワースペクトル値を降順で並べ替えます。ノイズはガウスであるため、ノイズスペクトルは帯域内で平均的にフラットになり、単調なビープ音がウィンドウ内に存在すると、スパイクが発生します。
5.典型的なスパイク帯域幅を特定します。トリミングされたソート済みパワースペクトルから最大振幅サンプルを取得し、平均を取得します。それは潜在的な「ビープ」エネルギーです。
6.ノイズエネルギーとなる残りのバンドサンプルの平均も取得します。
7.(5)と(6)で得られたエネルギーの比率を計算します。比率が所定のしきい値を超える場合は、ビープ音が見つかったことを示すフラグを設定します。そうでない場合は、現在ビープ音がないことを示すフラグを設定します。
8.ウィンドウを次のフレームに移動します(サンプルごと、またはより大きなステップごと)。


これは興味深いと思いますが、平均化と並べ替えの部分で私を失いました。手順を明確にしていただけませんか?ありがとう。
Spacey

実際には、パワーサンプルを並べ替える必要はありません。周波数のピークを検索し、ピーク周辺のいくつかのサンプルを取得して、それらを平均化することができます。中央値を検索する場合を除いて、おそらくここでは並べ替えは必要ありません。
mbaitoff 2013年

0

これは統計上の問題です。ノイズを特徴付けることができれば、ノイズにランダムに現れる確率(必要な誤検出エラー率)を下回る可能性がある対象信号の特定の特性を探すことができます。

対象の正弦波の最小持続時間(たとえば50ミリ秒)がわかっている場合は、その持続時間の長さの重複したスライディングFFTウィンドウを試し、ノイズを特徴付けることによって計算されたしきい値を超えるスペクトルピークを探すことができます。ノイズフロアの上の同じピークが連続する複数のFFTウィンドウに表示される場合、FFTフレームの長さとオーバーラップによっては、正弦波の長さがより長く対応している可能性があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.