求一串数据中的波峰与波谷

_装甲 2013-05-27 07:48:20

足够长的一位数组中存放一些Int类型的数据,这些数值在二维坐标中画出来的曲线图有若干个波峰和波谷,

其中波峰和波谷相间存在。

请问有什么算法求出波峰和波谷的位置,直接求出波谷的位置也可以。
...全文
2056 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Isnis-fallen 2013-06-07
  • 打赏
  • 举报
回复
void PeakSearch2(int n,int m,int H,double*argA,int*argB,double C)
//n是道数
//H是峰的半宽
//m是起始道数
//两参数可指定为常数
{
	//寻峰函数
	double a=0;//argB寻峰结果数组
	int num=0;//C为预先给定的常数
	bool first=true;
	bool is=false;
	int numb=0;
	for(int i=m;i<n-m;i++)
	{
		numb++;
		double x = IsPossiblePeak(i,m,H,argA);
		if(IsPossiblePeak(i,m,H,argA)>C)
		{
			if(first==true)
			{
				first=false;
				is=true;
				a=IsPossiblePeak(i,m,H,argA);
				argB[num]=i;

			}
			else
			{
				if(a<IsPossiblePeak(i,m,H,argA))
				{
					a=IsPossiblePeak(i,m,H,argA);
					argB[num]=i;

				}
			}
		}
		else
		{
			if(is==true)
			{
				first=true;
				is=false;
				num++;
			}
		}
	}
}
Isnis-fallen 2013-05-28
  • 打赏
  • 举报
回复
之前先做数据平滑
Isnis-fallen 2013-05-28
  • 打赏
  • 举报
回复

//测试论文代码寻峰方法
double Gauss(int i,int m,int H)//高斯函数
{
	double a=i;
	double b=H;
	double c=4*log((double)2)*(a/b)*(a/b);
	return exp(-c);
}//H为半高宽,2m+1为窗宽

double SimilarGaussConstant(int m,int H)//类高斯常数
{
	double sum=0;
	for(int i=-m;i<=m;i++)
	sum+=Gauss(i,m,H);
	return sum/(2*m+1);
}

double SimilarGauss(int i,int m,int H)//类高斯函数
{
	return Gauss(i,m,H)-SimilarGaussConstant(m,H);
}

double SimilarGauss2(int i,int m,int H)//类高斯函数的平方
{
	return SimilarGauss(i,m,H)*SimilarGauss(i,m,H);
}

double IsPossiblePeak(int j,int m,int H,double*argA)
{//可能峰区判断函数
	double a=0;
	double b=0;
	for(int i=-m;i<=m;i++)
	{
		a+=SimilarGauss(i,m,H)*argA[j+i];
		b+=SimilarGauss2(i,m,H)*argA[j+i];
	}
	if(b!=0)
		return a/sqrt(b);
	else
		return 0;
}//argA为待分析数组

_装甲 2013-05-28
  • 打赏
  • 举报
回复
没人回复啊~~

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧