59

データ取得カードを使用して、信号をピークまで増加させた後、元の値の近くに戻すデバイスから読み取り値を取得します。ピーク値を見つけるために、現在配列を検索して最高の読み取り値を探し、インデックスを使用して計算で使用されるピーク値のタイミングを決定します。

これは、最高値が探しているピークである場合はうまく機能しますが、デバイスが正しく機能していない場合、最初のピークよりも高い 2 番目のピークが表示される可能性があります。90 秒間に 16 台のデバイスから 1 秒間に 10 回の読み取りを行います。

私の最初の考えは、ピークを見つけてピークの配列を構築するために、前と次のポイントが現在よりも小さいかどうかを確認するために読み取りチェックを繰り返すことです。おそらく、システム内のノイズを考慮して、現在の位置の両側の多数のポイントの平均を確認する必要があります。これは続行するための最良の方法ですか、それともより良いテクニックはありますか?


私たちは LabVIEW を使用しており、LAVA フォーラムをチェックしたところ、興味深い例が数多くありました。これは私たちのテスト ソフトウェアの一部であり、非標準の VI ライブラリの使用を避けようとしているため、特定のコードではなく、関連するプロセス/アルゴリズムに関するフィードバックを期待していました。

4

9 に答える 9

86

古典的なピーク検出方法はたくさんありますが、どれでも機能する可能性があります。特に、データの品質を制限するものを確認する必要があります。基本的な説明は次のとおりです。

  1. データ内の任意の2つのポイントの間で、を合計して(x(0), y(0))これ(" travel")と呼び、適切に小さいに設定(x(n), y(n))(" rise")します。 ピークを示します。これは、ノイズによる大きな移動が発生する可能性が低い場合、またはノイズがベースカーブ形状の周りに対称的に分布している場合に問題なく機能します。アプリケーションでは、スコアが特定のしきい値を超える最も早いピークを受け入れるか、上昇あたりの移動量の曲線を分析して、より興味深いプロパティを探します。y(i + 1) - y(i)0 <= i < nTRy(n) - y(0) + kkT/R > 1

  2. 整合フィルターを使用して、標準のピーク形状との類似性をスコアリングします(基本的に、類似性のコサインメトリックを取得するには、ある形状に対して正規化された内積を使用します)

  3. 標準のピーク形状に対してデコンボリューションし、高い値をチェックします(ただし、単純な計測出力の場合、2はノイズの影響を受けにくいことがよくあります)。

  4. データを平滑化し、等間隔の点のトリプレットをチェックします。ここで、の場合x0 < x1 < x2, y1 > 0.5 * (y0 + y2)、または次のようなユークリッド距離をチェック D((x0, y0), (x1, y1)) + D((x1, y1), (x2, y2)) > D((x0, y0),(x2, y2))します。これは、三角不等式に依存します。単純な比率を使用すると、スコアリングメカニズムが再び提供されます。

  5. 非常に単純な2ガウス混合モデルをデータに適合させます(たとえば、Numerical Recipesには既製のコードのチャンクがあります)。以前のピークを取ります。これにより、重複するピークが正しく処理されます。

  6. 単純なガウス曲線、コーシー曲線、ポアソン曲線、または何を持っているかという曲線にデータから最も一致するものを見つけます。この曲線を広範囲にわたって評価し、ピーク位置に注意した後、データのコピーからそれを差し引きます。繰り返す。モデルパラメータ(おそらく標準偏差ですが、一部のアプリケーションは尖度やその他の機能を気にする場合があります)が何らかの基準を満たす最も早いピークを取ります。ピークがデータから差し引かれるときに残されるアーティファクトに注意してください。最適な一致は、上記の#2で提案された一致スコアの種類によって決定される場合があります。

私はあなたが以前やっていたことをしました:DNA配列データのピークを見つけ、測定された曲線から推定された派生物のピークを見つけ、そしてヒストグラムのピークを見つけます。

適切なベースラインに注意深く参加することをお勧めします。ウィーナーフィルタリングやその他のフィルタリング、または単純なヒストグラム分析は、ノイズが存在する場合にベースラインを作成する簡単な方法であることがよくあります。

最後に、データに通常ノイズが多く、参照されていないシングルエンド出力としてカードからデータを取得している場合(または参照されているが、差分ではない)、多くの観測値を各データポイントに平均化する場合は、それらを並べ替えてみてください観察し、最初と最後の四分位数を捨て、残っているものを平均します。本当に役立つ可能性のあるそのような外れ値除去戦術のホストがあります。

于 2008-09-04T18:07:31.570 に答える
10

信号の平均化を試すことができます。つまり、各ポイントについて、周囲の 3 つ以上のポイントで値を平均化します。ノイズ ブリップが大きい場合は、これでも役に立たないことがあります。

これは言語にとらわれなかったと思いますが、LabView を使用していると推測すると、LabView には、平滑化とノイズ削減に使用できる事前にパッケージ化された信号処理 VI がたくさんあります。NI フォーラムは、この種のことに関するより専門的なヘルプを得るのに最適な場所です。

于 2008-08-06T11:12:48.890 に答える
6

この問題はある程度詳細に研究されています。

ROOT(核/素粒子物理学分析ツール)のTSpectrum*クラスには、非常に最新の実装のセットがあります。このコードは、1次元から3次元のデータで機能します。

ROOTソースコードが利用可能であるため、必要に応じてこの実装を入手できます。

TSpectrumクラスのドキュメントから:

このクラスで使用されるアルゴリズムは、次のリファレンスで公開されています。

[1] M.Morhac etal.:多次元一致ガンマ線スペクトルのバックグラウンド除去法。物理学研究における核機器および方法A401(1997)113-132。

[2] M.Morhac etal.:効率的な1次元および2次元の金のデコンボリューションとそのガンマ線スペクトル分解への応用。物理学研究における核機器および方法A401(1997)385-408。

[3] M.Morhac etal.:多次元一致ガンマ線スペクトルのピークの同定。原子核物理学における核機器と方法A443(2000)、108-125。

論文は、NIMオンラインサブスクリプションをお持ちでない方のために、クラスのドキュメントからリンクされています。


行われることの短いバージョンは、ノイズを除去するためにヒストグラムが平坦化され、次に局所的な最大値が平坦化されたヒストグラムのブルートフォースによって検出されることです。

于 2008-08-23T14:28:23.130 に答える
6

私は自分で開発したアルゴリズムをこのスレッドに投稿したいと思います:

これは、分散の原則に基づいています。新しいデータポイントが、移動平均から所定の x 数の標準偏差だけ離れている場合、アルゴリズムはシグナル ( z-scoreとも呼ばれます) を通知します。このアルゴリズムは、信号がしきい値を破損しないように、個別の移動平均と偏差を構築するため、非常に堅牢です。したがって、将来のシグナルは、以前のシグナルの量に関係なく、ほぼ同じ精度で識別されます。lag = the lag of the moving windowこのアルゴリズムは、 、threshold = the z-score at which the algorithm signalsおよびの 3 つの入力を受け取りますinfluence = the influence (between 0 and 1) of new signals on the mean and standard deviation。たとえば、a lagof 5 は、最後の 5 つの観測値を使用してデータを平滑化します。3.5の Athresholdは、データポイントが移動平均から 3.5 標準偏差離れている場合に通知します。そして、influence0.5 の an は信号を半分にします通常のデータポイントが持つ影響の。同様に、influence0 の場合、新しいしきい値を再計算するために信号が完全に無視されます。したがって、0 の影響が最も堅牢なオプションです。

次のように機能します。

疑似コード

# Let y be a vector of timeseries data of at least length lag+2
# Let mean() be a function that calculates the mean
# Let std() be a function that calculates the standard deviaton
# Let absolute() be the absolute value function

# Settings (the ones below are examples: choose what is best for your data)
set lag to 5;          # lag 5 for the smoothing functions
set threshold to 3.5;  # 3.5 standard deviations for signal
set influence to 0.5;  # between 0 and 1, where 1 is normal influence, 0.5 is half

# Initialise variables
set signals to vector 0,...,0 of length of y;   # Initialise signal results
set filteredY to y(1,...,lag)                   # Initialise filtered series
set avgFilter to null;                          # Initialise average filter
set stdFilter to null;                          # Initialise std. filter
set avgFilter(lag) to mean(y(1,...,lag));       # Initialise first value
set stdFilter(lag) to std(y(1,...,lag));        # Initialise first value

for i=lag+1,...,t do
  if absolute(y(i) - avgFilter(i-1)) > threshold*stdFilter(i-1) then
    if y(i) > avgFilter(i-1)
      set signals(i) to +1;                     # Positive signal
    else
      set signals(i) to -1;                     # Negative signal
    end
    # Adjust the filters
    set filteredY(i) to influence*y(i) + (1-influence)*filteredY(i-1);
    set avgFilter(i) to mean(filteredY(i-lag,i),lag);
    set stdFilter(i) to std(filteredY(i-lag,i),lag);
  else
    set signals(i) to 0;                        # No signal
    # Adjust the filters
    set filteredY(i) to y(i);
    set avgFilter(i) to mean(filteredY(i-lag,i),lag);
    set stdFilter(i) to std(filteredY(i-lag,i),lag);
  end
end

デモ

堅牢なしきい値処理アルゴリズムのデモンストレーション

>詳しくは、元の回答を参照してください

于 2015-11-03T21:46:15.990 に答える
4

この方法は、基本的には David Marr の本「Vision」から引用しています。

ガウスは、ピークの予想される幅で信号をぼかします。これにより、ノイズ スパイクが取り除かれ、位相データは損傷を受けません。

次に、エッジ検出 (LOG で行います)

次に、エッジは機能のエッジでした(ピークなど)。エッジ間でピークを探し、ピークをサイズで並べ替えれば完了です。

私はこれにバリエーションを使用しましたが、それらは非常にうまく機能します。

于 2008-09-02T01:00:13.913 に答える
2

信号を予想される模範的な信号と相互相関させたいと思います。でも、信号処理の勉強を始めてから随分経ちましたが、それまであまり気にしていませんでした。

于 2008-08-06T11:38:05.393 に答える
0

目的のピークと不要な 2 番目のピークの間に質的な違いはありますか? 両方のピークが「鋭い」場合 (つまり、持続時間が短い場合)、周波数領域で信号を見ると (FFT を実行して)、ほとんどの帯域でエネルギーが得られます。しかし、「良い」ピークが「悪い」ピークに存在しない周波数に確実に存在するエネルギーを持っている場合、またはその逆の場合、それらをそのように自動的に区別できる場合があります。

于 2008-09-02T12:33:16.163 に答える
0

ロジックに標準偏差を適用し、x% を超えるピークに注目することができます。

于 2008-08-06T11:17:29.240 に答える
0

私は計装についてあまり知らないので、これはまったく実用的ではないかもしれませんが、別の方向に役立つかもしれません。読み取り値がどのように失敗するかを知っていて、そのような失敗を考慮してピーク間に特定の間隔がある場合は、各間隔で勾配降下を実行してみませんか。降下によって、以前に検索したエリアに戻ってきた場合は、そのエリアを放棄できます。サンプリングされた表面の形状によっては、検索よりも速くピークを見つけるのに役立つ場合もあります。

于 2008-08-06T11:38:37.607 に答える