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

Arrays 设置阈值以触发或停止对C中的数据点求和,arrays,c,sum,threshold,Arrays,C,Sum,Threshold,我试图模仿我的数据采集卡以数据流模式采集数据并进行数据处理。pi16Buffer表示混合通道1和通道2的长波数据,因此我使用for循环de interleave将数据传输到ch1Buffer[I]和ch2Buffer[I]。其次,通过ch2Buffer对ch1Buffer进行规范化,将其称为Corrected。根据校正后的值,使用if触发求和值以计算曲线下的面积。但是,我得到的都是0,请检查我的示例代码是否有任何设置错误?我想从AUC中得到3个求和值 #include <iostream&

我试图模仿我的数据采集卡以数据流模式采集数据并进行数据处理。
pi16Buffer
表示混合通道1和通道2的长波数据,因此我使用
for
循环
de interleave
将数据传输到
ch1Buffer[I]
ch2Buffer[I]
。其次,通过
ch2Buffer
ch1Buffer
进行规范化,将其称为
Corrected
。根据
校正后的
值,使用
if
触发
求和
值以计算曲线下的
面积
。但是,我得到的都是
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;
}
#包括
#包括
#包括
#包括
float*ch1Buffer=NULL;
float*ch2Buffer=NULL;
浮动AUC;
int main()
{
int i;
常数int u32Size=62;
浮动校正;
//int pBuffer[]={10,2,10,2,10,5,10,5,0};
int pBuffer[]={0,10,1,10,10,0,10,2,10,3,10,4,10,5,10,4,10,3,10,2,10,1,10,0,10,0,0,10,1,10,2,10,3,10,10,10,10,4,10,10,3,10,10,0,10,2,10,10,3,4,10,10,10,10,10,10,10};
int*pi16Buffer=pBuffer;
ch1Buffer=(float*)calloc(u32Size,sizeof*ch1Buffer);
ch2Buffer=(float*)calloc(u32Size,sizeof*ch2Buffer);
//将数据解交织到ch1Buffer和ch2Buffer
对于(i=0;i0.1)
对于(i=0;i
此部分中存在一个错误:

// 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 ...
此外,此代码

    for (i = 0; i < u32Size; i++) {
        AUC += Corrected;
    }
for(i=0;i
真奇怪。。在循环中不断添加相同的值

可能是这样一行:
Corrected=ch1Buffer[i]/ch2Buffer[i]应该在for循环中


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

这部分有一个bug:

// 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 ...
此外,此代码

    for (i = 0; i < u32Size; i++) {
        AUC += Corrected;
    }
for(i=0;i
真奇怪。。在循环中不断添加相同的值

可能是这样一行:
Corrected=ch1Buffer[i]/ch2Buffer[i]应该在for循环中


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

但是我用
print
检查了
ch1Buffer[I]
ch2Buffer[I]
这两个元素都保留了我期望的值。你为什么说它们是
0
?好吧,我明白你的意思了,我应该把
Corrected=ch1Buffer[I]/ch2Buffer[I]
进入
for
循环。我更新了代码。
AUC
值现在不再是
0
,而是
2.4
,这不是我所期望的
2.3
。也许我设置的阈值机制不正确?但是我用
print
检查了
ch1Buffer[I]
ch2Buffer[I]
这两个选项都保持了我期望的值。你为什么说它们是
0
?好吧,我明白你的意思了,我应该把
Corrected=ch1Buffer[I]/ch2Buffer[I]
进入
for
循环。我更新了代码。
AUC
值现在不再是
0
,而是
2.4
,这不是我所期望的
2.3
。也许我设置的阈值机制不正确?在发布答案后不要更改代码。它使答案无效。如果答案对你有帮助,接受它并投票。然后用更新后的代码问一个新问题。在发布答案后不要更改代码。它使答案无效。如果答案对你有帮助,接受它并投票。然后用更新的代码问一个新问题。