设置阈值以触发或停止对 C 中的数据点求和

Set threshold to trigger or stop summing the data points in C

我正在尝试模拟我的数据采集卡以数据流方式采集数据并进行数据处理。 pi16Buffer表示混合通道1和通道2的长波形数据,所以我使用for循环将数据de-interleave发送到ch1Buffer[i]ch2Buffer[i]。其次,将 ch1Buffer 归一化为 ch2Buffer,称它们为 Corrected。根据Corrected值,用if触发到sum值计算出Area under curve。但是,我得到的都是0,请检查我的示例代码是否设置错误?我想从 AUC.

中得到 3 个求和值
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
float* ch1Buffer = NULL;
float* ch2Buffer = NULL;
float AUC;

int main()
{
    int i;
    const int u32Size = 62;
    float Corrected;
    
    
    //int pBuffer[] = { 10,2,10,2,10,5,10,5,0};
    int pBuffer[] = { 0,10,1,10,1,10,0,10,2,10,3,10,4,10,5,10,4,10,3,10,2,10,1,10,0,10,0,10,1,10,2,10,3,10,4,10,5,10,4,10,3,10,2,10,0,10,2,10,3,10,4,10,5,10,4,10,3,10,2,10,1,10};
    int* pi16Buffer = pBuffer;


    
    
    ch1Buffer = (float*)calloc(u32Size, sizeof* ch1Buffer);
    ch2Buffer = (float*)calloc(u32Size, sizeof* ch2Buffer);
    
    

    // De-interleave the data to ch1Buffer and ch2Buffer
    for (i = 0; i < u32Size/2; i++)
    {
        ch1Buffer[i] += pi16Buffer[i * 2];
        ch2Buffer[i] += pi16Buffer[i * 2 + 1];
    }

    
    


    
    Corrected = ch1Buffer[i] / ch2Buffer[i];
    
    if (Corrected > 0.1)
        for (i = 0; i < u32Size; i++) {
            AUC += Corrected;
        }
    else
        AUC = 0;


    for (i = 0; i < u32Size/2; i++) {
        printf("%f ", AUC);
    }

    free(ch1Buffer);
    free(ch2Buffer);
    return 0;
}

这部分有错误:

// De-interleave the data to ch1Buffer and ch2Buffer
for (i = 0; i < u32Size/2; i++)
{
    ch1Buffer[i] += pi16Buffer[i * 2];
    ch2Buffer[i] += pi16Buffer[i * 2 + 1];
}

Corrected = ch1Buffer[i] / ch2Buffer[i];  // not good ...

当循环完成时,i 的值为 u32Size/2,并且没有任何内容分配给 ch1Buffer[i]。换句话说 - 由于使用 callocch1Buffer[i] 为零。同样适用于 ch2Buffer[i].

所以你在做:

Corrected = 0.0 / 0.0;  // not good

此外,这段代码

    for (i = 0; i < u32Size; i++) {
        AUC += Corrected;
    }

很奇怪..你一直在循环中添加相同的值。

也许行:Corrected = ch1Buffer[i] / ch2Buffer[i]; 应该在 for 循环中。

顺便说一句:您为数组分配了 u32Size 个元素,但您只使用了其中的一半。