检测峰值算法
① 镐庝箞鐢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锛屽傛灉鎴鍙栭戞靛嘲鍊艰秴杩囦简杩欎釜阒埚硷纴灏辫や负链夋槑鏄剧殑宄板奸戠巼