【发布时间】:2020-12-17 17:27:49
【问题描述】:
我正在使用具有数据流模式的双通道 DAQ。
输出的数据会变成一个数组,但是我只想要一个特定范围的数据并进行计算和分析,否则太多的数据点会延迟系统并导致FIFO溢出。
C代码是否有类似Matlabarray(6000:7000)的功能?
这是我获取通道 1 和通道 2 数据的代码,我想从 ch1Buffer[i] 和 ch2Buffer[i] 中选择特定范围的数据
uInt32 i, n;
uInt8* pu8Buffer = NULL;
int16* pi16Buffer = NULL;
int64 i64Sum = 0;
float max1 = 0;
float max2 = 0;
double Corrected = 0;
double AUC = 0;
int16* ch1Buffer = NULL;
int16* ch2Buffer = NULL;
double SumBufferData( void* pBuffer, uInt32 u32Size, uInt32 u32SampleBits )
{
// In this routine we sum up all the samples in the buffer. This function
// should be replaced with the user's analysys function
if ( 8 == u32SampleBits )
{
pu8Buffer = (uInt8 *)pBuffer;
for (i = 0; i < u32Size; i++)
{
i64Sum += pu8Buffer[i];
}
}
else
{
pi16Buffer = (int16 *)pBuffer;
fftw_complex(hilbertedch2[N]);
ch1Buffer = (int16*)calloc(u32Size/2, sizeof(int16));
ch2Buffer = (int16*)calloc(u32Size/2, sizeof(int16));
// Divide ch1 and ch2 data from pi16Buffer
for (i = 0; i < u32Size/2; i++)
{
ch1Buffer[i] += pi16Buffer[i*2];
ch2Buffer[i] += pi16Buffer[i*2 + 1];
}
// Here hilbert on the whole ch2
hilbert(ch2Buffer, hilbertedch2);
//Find max value in each segs of ch1 and ch2
for (i = 0; i < u32Size/2; i++)
{
if (ch1Buffer[i] > max1)
max1 = ch1Buffer[i];
if (abs(hilbertedch2[i][IMAG])> max2)
max2 = abs(hilbertedch2[i][IMAG]);
}
Corrected = (max2 / max1); // Calculate the signal correction
}
free(ch1Buffer);
free(ch2Buffer);
return Corrected;
}
【问题讨论】:
-
您可以使用memcpy,您可以在其中提及您的源地址作为要复制数据的起始地址,而不是范围,您可以提及需要从中复制的字节数起始地址,您需要提供目标地址来存储此数据。并查看手册页以查看限制(源和目标不应重叠)
-
谢谢,但它看起来像 Linux。我用的是 C 合适吗?
-
for(i = 6000; i < 7000; i++) { do_whatever_with array[i] }呢? -
这是一个
C函数 -
@Davide 看起来最简单直接的,我试试看谢谢!
标签: arrays c sorting date-range