檢測峰值演算法
① 鎬庝箞鐢51鍗曠墖鏈 媯嫻嬪嘲鍊
瑕佹兂紜瀹氬嘲鍊煎ぇ灝忥紝灝卞繀欏誨栧姞AD妯″潡錛岀敤AD閲囬泦灝卞彲浠ユ嫻嬪嘲鍊礆紝鑻ユ槸鍙闇瑕佺煡閬撳嘲鍊肩殑鏃跺埢錛屽彧瑕佸栨帴鍒板紩鑴氫笂鍒ゆ柇灝卞ソ錛屽彧瑕佸ぇ浜庝竴涓鍥哄畾鐢靛煎氨璁や負杈懼埌浜嗗嘲鍊
② 快速查找二維數組的所有峰值,c語言實現最好,python也可以,最好能實現濾波。
#include<stdio.h>
#include<stdlib.h>
#include<limits.h>
#include<malloc.h>
#definemaxsize6//每個波形數據最大採集個數默認6
typedefstructarray1
{
int*data;
structarray1*next;
}ARR1;
ARR1*addNewArr(ARR1*arrHead,ARR1*arrTail);//插入一組波形數據節點返回尾節點
intfindMaxF(ARR1*arrHead);//查找最大峰值
intremoveMinF(ARR1*arrHead);//移除最小峰值數據組返回最小峰值
voidprintfArr(ARR1*arrHead);//列印數據鏈表
intmain()
{
ARR1*arrHead=(ARR1*)malloc(sizeof(ARR1));
arrHead->next=NULL;
ARR1*arrTail=NULL;
arrTail=addNewArr(arrHead,arrTail);//想插入幾組,就調用幾次我就測試6組
arrTail=addNewArr(arrHead,arrTail);
arrTail=addNewArr(arrHead,arrTail);
arrTail=addNewArr(arrHead,arrTail);
arrTail=addNewArr(arrHead,arrTail);
arrTail=addNewArr(arrHead,arrTail);
printf("採集的原數據組為:
");
printfArr(arrHead);
printf("最大峰值:%d,最小峰值值:%d
",findMaxF(arrHead),removeMinF(arrHead));
printf("刪除最小峰值數據組後的數據為:
");
printfArr(arrHead);
return0;
}
voidprintfArr(ARR1*arrHead)//列印數據鏈表
{
while(arrHead->next!=NULL)
{
printf("%d,%d,%d,%d,%d,%d
",arrHead->next->data[0],arrHead->next->data[1],arrHead->next->data[2],arrHead->next->data[3],arrHead->next->data[4],arrHead->next->data[5]);
arrHead=arrHead->next;
}
}
ARR1*addNewArr(ARR1*arrHead,ARR1*arrTail)//插入一組波形數據返回尾節點
{
int*data=(int*)malloc(sizeof(int)*maxsize),i;
printf("採集一組波形數據(最大採集個數%d):",maxsize);
for(i=0;i<maxsize;i++)
scanf("%d",&data[i]);
ARR1*arrNew=(ARR1*)malloc(sizeof(ARR1));
arrNew->data=data;
arrNew->next=NULL;
if(arrHead->next==NULL)//插入第一組數組作為首節點
arrHead->next=arrNew;
else
arrTail->next=arrNew;
arrTail=arrNew;
returnarrTail;
}
intfindMaxF(ARR1*arrHead)//查找最大峰值
{
inti,maxNum=0,maxf=0;
while(arrHead->next!=NULL)
{
maxNum=0;
for(i=0;i<maxsize;i++)//獲取每組數據的峰值
{
if(arrHead->next->data[i]>maxNum)
maxNum=arrHead->next->data[i];
}
if(maxNum>maxf)//獲取最大峰值
maxf=maxNum;
arrHead=arrHead->next;
}
returnmaxf;
}
intremoveMinF(ARR1*arrHead)//移除最小峰值數據組返回最小峰值
{
inti,maxNum=0,minf=INT_MAX;
ARR1*minDataSave=NULL,*arrHeadSave=arrHead;
while(arrHead->next!=NULL)
{
maxNum=0;
for(i=0;i<maxsize;i++)//獲取每組數據的峰值
{
if(arrHead->next->data[i]>maxNum)
maxNum=arrHead->next->data[i];
}
if(maxNum<minf)//獲取最小峰值
{
minDataSave=arrHead->next;
minf=maxNum;
}
arrHead=arrHead->next;
}
arrHead=arrHeadSave;
//移除最小峰值數據組
while(arrHead->next!=NULL)
{
if(arrHead->next==minDataSave)//刪除節點重組鏈表
{
arrHead->next=minDataSave->next;
minDataSave->next=NULL;
free(minDataSave->data);//釋放節點內存
free(minDataSave);
break;
}
arrHead=arrHead->next;
}
returnminf;
}
③ 鎬庢牱鐢╨abview媯嫻嬭緭鍏ョ殑娉㈠艦鏂囦歡鍦ㄦ煇棰戠巼鍖洪棿涓婃槸鍚﹀瓨鍦ㄥ嘲鍊(鎴栫敤matlab瀹炵幇涔熻)
緇欎綘涓や釜鎬濊礬鍚
1.鐢ㄢ滄嘗褰㈡嘗宄版嫻嬧濊繖涓鍑芥暟錛屽彲浠ュ湪淇″彿澶勭悊閲岄潰鎵懼埌
2.鍙浠ュ逛俊鍙峰仛棰戣氨錛岀劧鍚庣敤鏁扮粍瀛愰泦鎴鍙栬佺殑棰戞碉紝瀵歸戞靛幓宄板礆紝璁懼畾涓涓闃堝礆紝榪欎釜闃堝煎彲浠ユ槸鏁翠釜棰戣氨宄板肩殑1/2錛屽傛灉鎴鍙栭戞靛嘲鍊艱秴榪囦簡榪欎釜闃堝礆紝灝辮や負鏈夋槑鏄劇殑宄板奸戠巼