c#求波形的极大值,思想是在上升沿和下降沿之间各取一点,在这两点范围之间取最大值。
int[] frontIndex = new int[9];//存放刚刚大于等于1000的索引
int[] backIndex = new int[9];//存放刚刚小于1000的索引
int[] peakValuex = new int[9];//峰值x轴坐标
int maxDataCnt = 0; //
bool maxFlag = false;//标志位
变量定义如上
private void searchExtremum(object sender, RoutedEventArgs)
{
double peakValue = ADData[0];
string strLong = "";
for(int i=1;i<=512;i++)
{
if(maxFlag)//标之位maxFlag能够控制是在上升沿还是下降沿取值
{
if(ADData[i]<=1000)//数据存储在ADData[i]数组中,,取点的范围是1000左右那个点
{
backIndex[maxDataCnt] = i;//下降沿的那个点,并保存在backIndex[maxDataCnt]这个数组中
maxFlag = false;
maxDataCnt+=1;
}
}
else
{
if(ADData[i]>=1000)
{
frontIndex[maxDataCnt] = i;;//上降沿的那个点,并保存在frontIndex[maxDataCnt]这个数组中
maxFlag = true;//相当于变轨,上升沿取到这个点之后,能够确保下次能够去去取下降沿那个点。
}
}
}
以上就是选择点
for(maxDataCnt = 0;maxDataCnt<9;maxDataCnt++)
{
for(int i = frontIndex[maxDataCnt];i<=backIndex[maxDataCnt];i++)
{
if (ADData[i] > peakValue)
{
peakValuex[maxDataCnt] = i;
peakValue = ADData[i];
}
}
peakValue = 0;//注意,这一步非常重要。如果有3个极大值7,9,7那么第三个极大值7不会显示,应为9比7大。
}
以上是在上升沿和下降沿的范围内取最大值。