求取數據變化的斜率

各位好,想請問我在擷取一筆即時數據時,要用什麼方法可以求取這筆數據的斜率
已經用過的方法有(1)對數據用derivative x(t).vi 還有 (2)對數據先用poly fitting再用derivative x(t).vi

但是這兩種方法得到的數據顯示在waveform chart 、waveform graph、XY graph上都和預期的有很大落差
想請問若是想要得到數據變化的反曲點,應該用什麼功能比較適合
謝謝各位前輩

如果你的資料點是透過DAQ取樣得到的類比資料(譬如電壓值),其實會受到雜訊和ADC解析度影響,所以相鄰兩個數值會在很小的範圍內上下跳動,所以幾乎無法找到一階導數為0的局部最大/最小值。

你可以用Peak Detector這個函數,它會自動幫你curve fitting,找出具有最小平方誤差的二次曲線,再自動輸出多個符合條件的局部最大/最小值。
https://zone.ni.com/reference/en-XX/help/371361R-01/lvanls/peak_detector/

關鍵是,有兩個參數會影響結果,一個是width,最低是3,但通常要跟著取樣頻率增加,至少等於取樣頻率的0.01倍(如果取樣率是1000HZ,width就要設為10,不能只設為3);另一個是threshold,如果找局部最大值(peaks),就要篩掉太小的peak(譬如threshold設定為1,那麼電壓低於1V的局部最大值都會被忽略),如果找局部最小值(valleys)就要篩掉太大的值(譬如threshold設定為5,那麼電壓大於5V的局部最小值都會被忽略)。

最後他輸出的Locations通常都不是整數,因為是內部那條擬和曲線函數的x值,所以要自己把它四捨五入,當作index值,再去原始輸入資料陣列取值,才能得到最接近的局部最大最小值。

1個讚

謝謝SKYBOW你的解答,非常詳細明確