微分計算


9

一連のデータ(単一配列)があります。このデータを取得してプロットすると、複数のピークがあることがわかります。ただし、データのセクションを拡大すると、かなりのノイズが表示されます。

CPU時間とエネルギーをほとんど使用せずに、データのピーク数を検出したい。私はこれらのピークの傾き(鋭いまたは滑らかな立ち上がりまたは立ち下がりの可能性があります)を検出し、傾きの数を見てピークの数を決定することを考えました。(2ピークはすべてのピークで正と負に傾斜します)

ノイズが存在する状態で勾配を計算する方法を教えてください。

コードは組み込みシステムに入ります。メモリが限られているため、重要なデータのコピーを必要としないものを実装したいのです。


1
必要なものを求めている店のように聞こえる

2
ノイズの周波数が比較的高い場合は、データをローパスフィルタリングできます
Paul R

4
データのプロットの例を1つ以上投稿できますか?これは、それがどのように見えるかを確認するのに役立ちます。信号の導関数の計算はノイズに非常に敏感であるため(ハイパス操作であるため)、ピーク検出は通常、導関数推定では行われません。問題の信号には、利用できる特性がある場合があります。また、ピークを正しく検出する確率と、本当に重要ではないピークを誤って宣言する確率との間には、常にトレードオフがあります。アプリケーションにとってどちらがより重要ですか?
Jason R

2
プロットを作成できる場合、それは役に立ちます。
ジェイソンR

1
ピークを検出したい場合、ピーク検出を検索したい場合があります(dsp.stackexchange.com/questions/1302/peak-detection-approachを見てください)。
Geerten

回答:


1

ノイズの種類と信号の種類によって異なります。良い答えが欲しい場合は例を示してください。ただし、一般的には、信号をローパスフィルター処理する必要があります。私があなただったら、フーリエパワースペクトルを調べて、ノイズの大部分が高周波であるかどうかを確認し、気になる信号の大部分が低い範囲にあることを確認します。それらが重なる場合、まあそれは人生です。もっと考えなければならない。

多くの場合、ノイズの多い信号に適した1つのローパスフィルターは、Savitzky-Golayフィルターです。これは数値レシピで説明されており、Pythonの場合はPython Numpy Cookbookに関数があります。小さなカーネルとのたたみ込みにすぎません。ピークまたは他の機能の幅に基づいてウィンドウサイズを選択します。これは、ノイズを取り除くのに十分な幅ですが、機能よりも広くはありません。それは小さい、例えば5ポイント、または数十のように大きく、100程度かもしれません。

多項式次数も選択します。通常、私は2または4を使用します。次数2は、ウィンドウが小さい場合、10ポイント未満、またはサイクルが半分未満の場合(信号が正弦波に類似している場合)、次数4の場合に適しています。歪んだピーク形状のマッチングは得意ですが、約9以上のポイントが必要です。しかし、多くはノイズの形状と周波数に依存します。

他のコメントで述べているように、導関数を見つけることはおそらく最善の戦略ではありませんが、とにかく導関数を見つけたい場合は、Savitzky-Golayフィルターがそれを行うことができます-信号の代わりに導関数を同時に平滑化して報告します。

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