设置阈值以触发或停止对 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]
。换句话说 - 由于使用 calloc
,ch1Buffer[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
个元素,但您只使用了其中的一半。
我正在尝试模拟我的数据采集卡以数据流方式采集数据并进行数据处理。 pi16Buffer
表示混合通道1和通道2的长波形数据,所以我使用for
循环将数据de-interleave
发送到ch1Buffer[i]
和ch2Buffer[i]
。其次,将 ch1Buffer
归一化为 ch2Buffer
,称它们为 Corrected
。根据Corrected
值,用if
触发到sum
值计算出Area under curve
。但是,我得到的都是0
,请检查我的示例代码是否设置错误?我想从 AUC
.
#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]
。换句话说 - 由于使用 calloc
,ch1Buffer[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
个元素,但您只使用了其中的一半。