这是我不成熟的暂时作为寻峰的代码,偶然性较大。还请大神指教新法。我的思路:第一个循环:找最大值 。第二个循环:从这个最大值后面第200个数开始往后找,再找一个最大值 。第三个循环:从这个最大值前面第200个数开始往前找,再找一个最大值。 最后判断一下:确定第二个峰,但是判断的方法不好确定(一种思路是拿阈值卡,一种思路是比较他们两个的大小,但是这都不是绝对的,万无一失的,因为很多组(1000多)数据的变化是很多样的。总之,这种方法的偶然性较大(全看这个波形是怎么变的),所以不大成熟
程序代码:
#include <iostream>
#include <math.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char** argv)
{
double a[3000];
double peak1,peak2,peak3,min=a[0];
int i,p1,p2,p3,b,life;
char filename[1000]={0};
FILE *fp=NULL;
FILE *fpp=NULL;
for(b=100000;b<100854;b++)
{
sprintf(filename,"F:\\uz\\new\\data%d.txt",b);
fp=fopen(filename,"r");
for(i=0;i<2500;i++)
{
fscanf(fp,"%lf",&a[i]);
}
for(i=1;i<2500;i++)
{
if(min>a[i])
{
min=a[i];
peak1=a[i];
p1=i+1;
}
}//找最小值
for(i=p1+300,min=a[p1+300];i<2500;i++)
{
if(min>a[i])
{
min=a[i];
peak2=a[i];
p2=i+1;
}
}//找第二个峰值
for(i=p1-300,min=a[p1-300];i>0;i--)
{
if(min>a[i])
{
min=a[i];
peak3=a[i];
p3=i+1;
}
}//找第三个峰值
/* printf("%lf %d\n",peak1,p1);
printf("%lf %d\n",peak2,p2);
printf("%lf %d\n",peak3,p3);*/
if(peak2>peak3)
{
life=abs(p2-p1);
//printf("%d\n",life);
}
else
{
life=abs(p2-p1);
//printf("%d\n",life);
}
fpp=fopen("F:\\uz\\life1.txt","a");
if(fpp==NULL)
{
printf("wrong");
}
fprintf(fpp,"%d\n",life);
fclose(fp);
fclose(fpp);
}
return 0;
}