⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 peakvalue.txt

📁 一维序列中峰值提取//Data为待分析的数组;peak为排序后的数组; //m 为Data数组大小;n 为peak数组的大小。 //m_Min 为Data数组中最小值 //假设峰值个数PN
💻 TXT
字号:
PeakValue(double* Data,double* peak,int m,int n)
{
	//Data为待分析的数组;peak为排序后的数组;
	//m 为Data数组大小;n 为peak数组的大小。
	//m_Min 为Data数组中最小值
	//假设峰值个数PN>n;	
	double* In;
	double* Out;
	int* Flag;
	int PN=0;
	double m_Min=Data[0];
	In=(double*) calloc(m+2,sizeof(double));
	Out=(double*) calloc(n,sizeof(double));
	Flag=(int*) calloc(m,sizeof(int));
	In[0]=Data[0]-1;
	for (int k=0;k<m;k++) 
	{
		In[k+1]=Data[k];
		Flag[k]=0;
	}
	In[m+1]=Data[m]-1;
	for (int i=1;i<m+1;i++)
	{
		if (In[i]<m_Min) 
		{
			m_Min=In[i];
		}
		if ((In[i]>In[i-1])&&(In[i]>In[i+1]))//判断中间点是否比两边点的值大
		{	
			Flag[PN]=i;
			PN++;
		}	
	}
	for (int j=0;j<n;j++)
	{
		Out[j]=m_Min;
		peak[j]=0;
	}
	for (int f=0;f<PN;f++)
	{
		for (int g=0;g<n;g++)
		{
			if(In[Flag[f]]>=Out[g])	
			{
				for (int h=0;h<n-g-1;h++)
				{
					Out[n-h-1]=Out[n-h-2];
					peak[n-h-1]=peak[n-h-2];
				}
				Out[g]=In[Flag[f]];
				peak[g]=Flag[f]-1;          //最大值下标   
				break;						//跳出这个for循环!
			}			
		}
	}

	free(In);
	free(Out);
	free(Flag);
	return ;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -