This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

IWR1843: 处理一根接收天线的rangbin数据代码部分没看懂

Part Number: IWR1843
Other Parts Discussed in Thread: IWR1443,

我用DCA1000板子采集的数据有1688帧,1帧128个chirps ,1个chirp有256采样点。(单发单收)

1个chirp 256个rang-bin数据 中能找到 1个最大幅值的rang-bin

128个chirp总共能找到128个最大幅值的rang-bin

1688帧 就可以找到 1688*128个最大幅值的rang-bin

我用这么多数据处理之后画图 很难进行下去。想问一下我这个样子找最大幅值是不是错了。

最后是ti源代码:我不太清楚的地方有:

rangeBinStartIndex 和rangeBinendIndex 分别指什么

2 做完一次循环 ,下一个rang-bin就指向了 tempPtr += obj->numChirpsPerFrame * obj->numRxAntennas; 这个不是已经到下一帧的同一位置了吗,难道不应该在该帧里面同一个chirp继续往下找吗

简单一句话就是不太清楚找 rang-bin 的流程。 毕竟采集的数据太多

for (rangeBinIndex = obj->rangeBinStartIndex; rangeBinIndex < obj->rangeBinEndIndex; rangeBinIndex++)
{
// Points towards the real part of the current range-bin i.e. rangeBinIndex
//指向当前range-bin的实部,即rangeBinIndex
pTempIndex = (uint16_t *) tempPtr;
obj->pRangeProfileCplx[2 * (rangeBinIndex - obj->rangeBinStartIndex)] = *pTempIndex;
temp_real = (int16_t) * pTempIndex;

// Points towards the imaginary part of the current range-bin i.e. rangeBinIndex
//指向当前range-bin的虚部,即rangeBinIndex
obj->pRangeProfileCplx[2 * (rangeBinIndex - obj->rangeBinStartIndex) + 1] = *(++pTempIndex);
temp_imag = (int16_t) * pTempIndex;

if (guiFlag_ClutterRemoval == 1)
{
// Clutter Removed Range Profile //杂波消除距离剖面
float tempReal_Curr,tempImag_Curr;
float alphaClutter = 0.1;
float currVal;

tempReal_Curr = (float) temp_real;
tempImag_Curr = (float) temp_imag;
uint16_t currRangeIndex;
currRangeIndex = rangeBinIndex - obj->rangeBinStartIndex;

obj->pTempReal_Prev[currRangeIndex] = alphaClutter*tempReal_Curr + (1-alphaClutter)*obj->pTempReal_Prev[currRangeIndex];
obj->pTempImag_Prev[currRangeIndex] = alphaClutter*tempImag_Curr + (1-alphaClutter)*obj->pTempImag_Prev[currRangeIndex];

currVal = sqrt((tempReal_Curr - obj->pTempReal_Prev[currRangeIndex])*(tempReal_Curr - obj->pTempReal_Prev[currRangeIndex]) + (tempImag_Curr - obj->pTempImag_Prev[currRangeIndex])*(tempImag_Curr - obj->pTempImag_Prev[currRangeIndex]));
obj->pRangeProfileClutterRemoved[rangeBinIndex - obj->rangeBinStartIndex] = currVal;

// Based on the Max value Range-bin
//基于Range-bin的Max值
if (currVal > maxValClutter)
{
maxValClutter = currVal;
rangeBinMaxClutter = rangeBinIndex;
}
}
else
{
// Magnitude of the current range-bin
//当前范围库的大小
absVal = (float) temp_real * (float) temp_real + (float) temp_imag * (float) temp_imag;
// Maximum value range-bin of the current range-profile
//当前range-profile的最大值range-bin
if (absVal > maxVal)
{
maxVal = absVal;
rangeBinMax = rangeBinIndex;
}
}
// If the Refresh button in the GUI is pressed
//如果按下GUI中的Refresh按钮
if (frameCountLocal == 1)
{
if (guiFlag_ClutterRemoval ==1)
{
rangeBinIndexPhase = rangeBinMaxClutter;
}
else
{
rangeBinIndexPhase = rangeBinMax;
}
}

// Computes the phase of the selected range-bin i.e. rangeBinIndexPhase
//计算所选range-bin的相位,即rangeBinIndexPhase
if (rangeBinIndex == (rangeBinIndexPhase))
{
rangeBinPhase = atan2(temp_imag, temp_real);
}
// Points towards the next range-bin
//指向下一个rang-bin
tempPtr += obj->numChirpsPerFrame * obj->numRxAntennas; // Chirps per Frame takes into account the numTX antennas//每帧的chirps考虑了numTX天线
} // For Loop ends