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
。也许我设置的阈值机制不正确?在发布答案后不要更改代码。它使答案无效。如果答案对你有帮助,接受它并投票。然后用更新后的代码问一个新问题。在发布答案后不要更改代码。它使答案无效。如果答案对你有帮助,接受它并投票。然后用更新的代码问一个新问题。