*とりあえず検索 [#x1d669e4]
平滑化数値微分というのがあります[1]。これでもノイズが取れないときは、この数値微分の前に、生データの移動平均処理を行って、ある程度データを滑らかにしてやればいいでしょう。そのとき、移動平均のデータ数を変えて最適な値を探すのが良い思います。
-ボタンの色を元に戻すとき
 btn.BackColor = Color.FromKnownColor(KnownColor.ControlLight)

[1] PDFファイルの52ページ ​http://teils.eng.shizuoka.ac.jp/di2.pdf​
-テキストボックスの値をintに変換
 Dim num As Integer = 0
 If Integer.TryParse(TextBox1.Text, num) Then
     MessageBox.Show(String.Format("数値:{0}です", num))
 Else
     MessageBox.Show("数値ではありません")
 End If

[対策例]
(1) 単純に、f'(x)が正から負へ極性反転したらピークとみなす。
(2) #1 さんの「平滑化」処理を適用する。
(2)' あるいは、f'(x)が正から負へ極性反転したピークの高さに閾値を設定しておく。(つまり、細かなピークは無視する)
-IPアドレスかどうかチェック
 Dim ip As System.Net.IPAddress = New System.Net.IPAddress(0)
 If System.Net.IPAddress.TryParse(txt_ip.Text, ip) Then
     MessageBox.Show("正しいIP")
 Else
     MessageBox.Show("IPアドレスが不正です")
 End If

-HOST命の取得
 System.Net.Dns.GetHostName

[1] Savitzky-Golay アルゴリズム ​http://www.hulinks.co.jp/support/flexpro/v7/dataanalysis_SavitzkyGolay.html
[2] 1階微分の5点以降の係数の求め方(ANo.1の回答) ​http://okwave.jp/qa1371554.html​
[3] 平滑化の係数表(PDF 79ページ:5〜25点) ​http://www.biochem.northwestern.edu/Keck/PDF%20documents/CD/Spectra%20Manager%20Software.pdf
-HOST名からのIP取得
 Dim host As String = "hogehoge"
 Dim ip As System.Net.IPAddress = System.Net.Dns.GetHostEntry(host).AddressList(0)

Savitsky-Golayのアルゴリズムがかなり有効であることが分かりました。
-任意のIPでのTcpListener
 objTcpListener = New Net.Sockets.TcpListener(Net.IPAddress.Any, intPortNo)

avitzky-Golayの平滑化/平滑化微分"として有名なもので、例えば下記のURL(pdf)に係数の例が載っています。ちなみに、5点の場合の係数は、ご質問にある「1,-8,0,8,-1」とは異なり、「-2,-1,0,1,2」のようになります。

参考URL:http://tribo.mech.tut.ac.jp/class/SurfaceAnalysis/SavitzkyGolay.pdf

LabVIEW6にて、PeakDetecterでピーク位置を推定する機能を使っております。
Peak Detectorに関してのご質問についての回答です。

まず、配列の中にある連続した点を抽出します。

これは配列の最初から始めます。

例えば10点の点を抽出すると仮定します。

その10点の点を通る曲線に最も近い二次関数を計算し、その二次関数を微分します。

もしピークがなければ、

微分した式=0

の関係は成り立ちません。

ピークがあるときは必ず微分式=0となる解を持ちます。

その次は配列をひとつずらした10点を抽出し、また同じ作業を行います。

 

配列では整数xに対してのyの値を取りますが、ピークは小数部分まで計算されます。

配列をずらした後にもピークが確認される時は、その前までの計算結果によりさらに詳しい二次関数を作ることができ、結果の値もより詳しいものとなります。

 

データはノイズの乗っかったものになっているため、上の計算はノイズをスムーズ化してからなされます。

二次関数による近似値での算出とノイズにより、ピークの検出は必ずしも正しいものではありませんのでご了承ください。

数学的にピークを検出する一番簡単な方法はデータの中で1階微分値が0であり
2階微分値がマイナスであるデータ点がピークと判断できますので
この方法をご利用いただくことをお勧めします。

*Savitsky-Golay [#xbaa3fa1]
-Savitzky-Golay 法 http://www.empitsu.com/wp/?p=112=1
-Savitzky-Golay 平滑化フィルタ (ディジタル平滑化多項式フィルタまたは最小二乗平滑化フィルタとも言われる) は、雑音の多い信号の周波数区間が広い場合に、その信号を平滑化するために使われます。この種のアプリケーションでは、Savitzky-Golay 平滑化フィルタが、標準の平均化する FIR フィルタより効果があり、雑音を多く含んでいると思われる信号の高周波数部分からの意味のある信号を抽出する傾向があります。Savitzky- Golay フィルタは、信号の高周波数成分を保存する機能が強い反面、標準の平均化 FIR フィルタより雑音除去に関しては劣ります。Savitzky-Golay フィルタで使われる式は、ほかの平滑化法よりも様々なモーメント次数の保存に適しています。ただし、これらの平滑化法は、ピークの幅や高さの保存に関しては、Savitzky-Golay よりも優れています。
-http://www.labcognition.com/panoramaonlinehelp/Japanese/mathematics/smoothing.htm
-http://research.microsoft.com/en-us/um/people/jckrumm/SavGol/SavGol.htm


トップ   差分 バックアップ リロード   一覧 検索 最終更新   ヘルプ   最終更新のRSS