我使用dsPIC33FJ32MC204控制器连接了一个振幅为3V的正弦波,该正弦波在0到12位模数转换通道上偏移了1.5V,并存储在一个数组中。我想要检测每个间隔的峰值,所以请给我任何建议。我刚刚发布了五个样本中最大值检测的逻辑。我得到的输出为零。
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;
}
} 发布于 2020-09-11 23:06:27
定义像峰值和间隔这样的各种术语的意思,并询问或决定,并指定其他条件的标准。
只要MaxValue大于该时间间隔内的前一个MaxValue,您就可以通过更新SampleValue来跟踪最大值。MinValue也是如此。
例如,你的峰值标准是SampleValue应该上升一定的量,然后下降一定的量吗?或者,SampleValue应该超过某个固定的阈值?或者更复杂的东西?当信号电平随噪声波动时,它们将产生不同的结果;您可能需要设置初始条件;可能还需要考虑系统是否会锁定在不希望的条件中,如阈值太高或太低。解决方案越复杂,出现不利条件的机会就越多。
当有新的间隔时,也要考虑同样的问题。时间是固定的吗?-用计时器。与采样频率有关吗?-计算采样数量。是否在每个峰值之后开始,可能间隔最小?-重置计时或计数以及在每个峰值之后的MaxValue和MinValue,并禁止确定峰值,直到您的MinTime或MinCount通过。
使用最简单的解决方案来处理你的信号,考虑到噪音等因素。如果你听之任之可能会变得很复杂。
https://stackoverflow.com/questions/63830657
复制相似问题