最近經常用到查詢峰值的函式
已有的函式要不**量比較大,要不就是邏輯比較複雜、設定的條件比較多,當然對於需要篩選出很合適的峰值來說,這些條件是必須的,對於紛繁複雜的波形中查詢到你想要的那個波峰,需要慧眼;
但是對於波形很多的資料,不需要那麼繁瑣的邏輯判斷,根據自己的經驗,寫了乙個**雛形,用來查詢峰值,當然後續還需要簡單的加一些其他的判斷,但對於我的功能已經完成,簡單記錄一下;主要思想是在前後一定範圍內查詢合適的波峰或波谷。 下面**無法直接執行,只是程式中的乙個函式。
**如下:
uint8_t k = 8;
static uint8_t left_k_max = 0, right_k_max = 0, left_k_min = 0, right_k_min = 0;
static uint32_t max_data_pos = -100, min_data_pos = 100;
static float max_data = 0, min_data = 0;
sen_data_swim = data; // 向外傳原始raw data
peak_index_swim = 0; // 向外傳峰值位置
valley_index_swim = 0; // 向外傳波谷值位置
//mexprintf("%d - max_data:%f, max:%d left_k_max:%d \n", g_index, max_data, max_data_pos, left_k_max);
if (max_data < data)
else
if (min_data > data)
else
if (left_k_max == 10)
if (right_k_min == 10)
簡單示意圖
優化了一些條件,將無用的波峰過濾掉
uint8_t k = 10;
static uint8_t right_k_max_ = 0, left_k_max_ = 0, left_k_min = 0, right_k_min = 0;
static uint32_t max_data_pos = -100, min_data_pos = 100;
static uint32_t pre_max_data_pos = 0;
static float max_data = 0, min_data = 0;
static float pre_max_data = 0, pre_min_data = 0;
static bool need_to_find_peak = false;
sen_data_swim = data;
peak_index_swim = 0;
valley_index_swim = 0;
//mexprintf("%d - max_data:%f, max:%d right_k_max_:%d \n", g_index, max_data, max_data_pos, right_k_max_);
if (max_data < data)
else
if (min_data > data)
else
if (right_k_max_ == k)
//max_data = data;
//right_k_max_ = 0;
}max_data = data;
right_k_max_ = 0;
}if (right_k_min == k)
mexprintf("send min pos:%d, mini:%f, pre-min:%f \n", min_data_pos, min_data, pre_min_data);
//pre_min_data = min(min_data, data);
}if (right_k_min == 20) /* can find valley*/
if (right_k_max_ == 20)
版本3,發現上面的版本還是針對某些情況不能包含,又重新寫了一版
void findpeak(float data)
if (right_k_max >= k)
else}}
if (data < pre_data) /* down */
if (left_k_max >= k)
else}}
pre_data = data;
}
效果
體積霧的一種簡單實現
場景裡面一開始加的是預設的opengl霧效,效果不太好,看起來立體感不強,然後打算加個體積霧效果,搜了一些體積霧的實現方式,發現略複雜,就想了種比較簡單的實現方式 1 在場景的垂直高度上,一般是z軸,建立若干個水平的平面,大小要比場景大,疊在一起之後看起來效果類似乙個立方體 我是從z的 5到20,建...
python呼叫c語言函式的一種簡單實現方法
這個方法是利用了python的乙個模組ctypes實現的。首先是c語言的test.c原始碼函式 include int test char a 100 然後,使用gcc命令將其打包成乙個共享庫,就可以提供給python直接使用了,命令如下 gcc test.c fpic shared o libte...
一種基於密度峰值的聚類演算法
2014年science刊發了一篇標題為clustering by fast search and find of density peaks的文章,文章中介紹了一種基於密度峰值的聚類演算法。傳統的聚類演算法k means,通常不適用於非球形的簇。這裡所謂的球形簇是根據k means演算法基本原理得...