0

我通过使用 dsPIC33FJ32MC204 控制器将幅度为 3V 的正弦波与 1.5V 的正弦波连接到 12 位 ADC 通道,并存储在一个数组中。我想检测每个间隔的峰值,所以请给我任何建议。我刚刚发布了五个样本中最大值检测的逻辑。我的输出为零。



void read_adc_Voltage()
{
     int arr[100];
     int arr1[100];
    int max = arr[0];
    arr[0]=0;
    int i,j=0;
    int count = 6;
     
     
       
         for (i=1;i<count;i++)
         {
             var=(ain1Buff[sampleCounter]);
             voltage=var*((float)3.3/(float)4095);
             arr[j] = voltage;
            
             if(arr[j] > max)
            {
                max = arr[j]; 
                }
             j++;
         }
             sprintf(data1,"%.2f",max);
             LCD_String_xy(1,1,data1);
             
            sampleCounter++;
            
            if(sampleCounter==6)    
            {
              sampleCounter=0;
              
            }
            
}  
 
 
4

1 回答 1

0

用峰值和间隔等各种术语定义您的意思,并询问或决定并指定您对其他条件的标准。

只要 SampleValue 大于该间隔中的前一个 MaxValue,您就可以通过更新 MaxValue 来跟踪最大值。与 MinValue 类似。

例如,您的峰值标准是 SampleValue 应该上升一定量,然后下降一定量?还是 SampleValue 应该超过某个固定的阈值?或者更复杂的东西?当信号电平随噪声波动时,它们会产生不同的后果;您可能需要设置初始条件;并且也许要考虑系统是否可以锁定到诸如阈值太高或太低之类的不良条件。解决方案越复杂,出现不良条件的机会就越多,因此 KISS。

有新间隔时的相同考虑。是固定时间吗?- 使用计时器。它与采样频率有关吗?- 计算样本数。是在每个高峰之后开始,也许以最小的间隔开始吗?- 在每个峰值之后重置您的计时或计数以及 MaxValue 和 MinValue,并禁止确定峰值,直到您的 MinTime 或 MinCount 通过。

使用最简单的解决方案来处理您的信号,同时考虑噪声等。如果你允许它可能会变得相当复杂。

于 2020-09-11T15:06:26.867 回答