返回列表 上一主題 發帖

[發問] 如何判斷週期訊號?

[發問] 如何判斷週期訊號?

我有一組數字fm1=32.2, fm2=44.3, fm3=63.0, fm4=79.1, fm5=95.2, fm6=111.3
我以陣列的型式將它寫入成
fm(0)=32.2
fm(1)=44.3
fm(2)=63.0
fm(3)=79.1
fm(4)=95.2
fm(5)=111.3
我要判斷這幾個數之間是否有一固定週期(間隔),並排除其中個別週期 例如:
fm(1)-fm(0)=12.1
fm(2)-fm(1)=18.7
fm(3)-fm(2)=16.1
fm(4)-fm(3)=16.1
fm(5)-fm(4)=16.1
所以固定週期(間隔)應為16.1, 而fm(1)=44.3這個數顯然有偏差故將它排除
以上的例子直接看很容易判斷 但是該如何讓成是來做判斷呢?
請板上的高手給個建議 謝謝

回復 2# stillfish00


原始數據為量測結果 我的程式是為了協助分析
所以有些許誤差是可接受的(+/- 1.5以內可視為相同) 但是要排除個別的雜訊

TOP

回復 4# Hsieh
我利用 n = Application.Mode(Ar) 來判斷最常出現的值
若是遇到整組數字無重複的值(無週期訊號時)程式則會出現error
這該如何修正呢?

TOP

回復 6# stillfish00
後來我把它改成這樣也可以

Sub nn()
Dim Ar()
k = 1.5 '容許誤差
fm = Array(32.2, 44.3, 63, 79.1, 95.2, 111.3) '常數陣列
Set d = CreateObject("Scripting.Dictionary")
For i = 0 To UBound(fm)
If i > 0 Then
ReDim Preserve Ar(s)
Ar(s) = fm(i) - fm(i - 1)
s = s + 1
End If
   d(i) = fm(i)
Next
n = Application.Mode(Ar) '最常出現差值
If IsNumeric(n) = False Then
    n = 0
    MsgBox "無週期訊號"
   Exit sub
End If
For i = LBound(fm) + 1 To UBound(fm) - 1
   If d(i) - d(i - 1) < n - k Or d(i + 1) - d(i) > n + k Then
   d.Remove i
   End If
Next
MsgBox Join(d.items, Chr(10))
End Sub

TOP

        靜思自在 : 欣賞別人就是莊嚴自己。
返回列表 上一主題