40 #include <ti/mathlib/mathlib.h> 
   81                             uint16_t numDetetectedObj,
 
   86     uint16_t *neighCurrent;
 
   89     uint16_t point, member;
 
   94     float epsilon,epsilon2, weight;
 
   95     int32_t epsilon2fixed;
 
  101     numPoints    = numDetetectedObj;
 
  104     epsilon2    =    epsilon*epsilon;
 
  114     for(point = 0; point < numPoints; point++)
 
  120             neighCurrent = neighLast = inst->
neighbors;
 
  122             memcpy(inst->
scope, inst->
visited, numPoints*
sizeof(
char));
 
  125                 detObj2D, point, neighLast, numPoints, epsilon2fixed, epsilonfixed, weight,
 
  129             if(neighCount < inst->minPointsInCluster - 1) 
 
  141                 for (ind = 0; ind < newCount; ind ++)
 
  143                     member = neighLast[ind];
 
  146                 neighLast += newCount;
 
  148                 while (neighCurrent != neighLast)               
 
  151                     member = *neighCurrent++;               
 
  156                                             detObj2D,    member, neighLast,     numPoints,
 
  157                                             epsilon2fixed, epsilonfixed, weight,
 
  158                                             vFactorfixed, inst->
scope, &newCount, 
 
  163                         int32_t speed = (int32_t) detObj2D[point].speed;
 
  167                         if (_abs(detObj2D[member].speed - speed) < vFactorfixed)
 
  169                             for (ind = 0; ind < newCount; ind ++)
 
  171                                 member = neighLast[ind];
 
  174                             neighLast += newCount;              
 
  188                     &trackingInput[clusterId - 1], obj);
 
  250                     uint16_t *restrict neigh,
 
  256                     char * restrict visited,
 
  257                     uint16_t * restrict newCount,
 
  258                     uint16_t dBScanNeighbourLim)
 
  262     int32_t sum, epsilon2WithSpeed, itemp;
 
  263     uint32_t newCounttmp = 0;
 
  265     _nassert((uint32_t)detObj2D % 8 == 0);
 
  266     int16_t x = detObj2D[point].x;
 
  267     int16_t y = detObj2D[point].y;
 
  268     int16_t speed = detObj2D[point].speed;
 
  269     uint16_t range = detObj2D[point].range;
 
  272     if (_abs(speed) < vFactor)
 
  277     epsilon2WithSpeed = (int32_t)(itemp*itemp*weight + epsilon2);
 
  279     for(i = 0; i < numPoints; i++)
 
  286         if (_abs(detObj2D[i].speed - speed) > itemp)
 
  291         if (_abs(detObj2D[i].range - range) > epsilon)
 
  296         a = detObj2D[i].x - x;
 
  297         b = detObj2D[i].y - y;
 
  298         c = detObj2D[i].speed - speed;
 
  300         sum = (a*a) + (b*b) + (int32_t)(weight*(
float)(c*c));
 
  302         if (sum < epsilon2WithSpeed)
 
  315     *newCount = (uint16_t) newCounttmp;
 
  356                             uint16_t clusterOriginator,
 
  358                             uint16_t * restrict neighStart,
 
  359                             uint16_t * restrict neighLast,
 
  364     int16_t ind, length, member, strongestMember;
 
  365     float sumx, sumy, sumVel, xCenter, yCenter, xSize, ySize, avgVel, temp;
 
  367     uint16_t strongestPeakVal;
 
  368     length = (neighLast - neighStart);
 
  370     sumx = detObj2D[clusterOriginator].x;
 
  371     sumy = detObj2D[clusterOriginator].y;
 
  372     sumVel = detObj2D[clusterOriginator].speed;
 
  374     for (ind = 0; ind < length; ind++)
 
  376         member = neighStart[ind];
 
  377         sumx += (float)(detObj2D[member].x);
 
  378         sumy += (float)(detObj2D[member].y);
 
  379         sumVel += (float)(detObj2D[member].speed);
 
  382     lengthInv = recipsp((
float)(length + 1));
 
  383     xCenter = sumx * lengthInv;
 
  384     yCenter = sumy * lengthInv;
 
  385     avgVel  = sumVel * lengthInv;
 
  389     strongestPeakVal = detObj2D[clusterOriginator].peakVal;
 
  390     strongestMember = clusterOriginator;
 
  392     temp = ( ((float)detObj2D[strongestMember].x) - xCenter);
 
  393     temp = ((temp > 0)? (temp): (-temp)); 
 
  394     xSize =(xSize > temp)? (xSize):(temp); 
 
  395     temp = ( ((float)detObj2D[strongestMember].y) - yCenter);
 
  396     temp = ((temp > 0)? (temp): (-temp)); 
 
  397     ySize = ((ySize > temp)? (ySize):(temp));
 
  399     for (ind = 0; ind < length; ind++)
 
  401         member = neighStart[ind];
 
  402         temp = ( ((float)detObj2D[member].x) - xCenter);
 
  403         temp = ((temp > 0)? (temp): (-temp)); 
 
  404         xSize =(xSize > temp)? (xSize):(temp); 
 
  405         temp = ( ((float)detObj2D[member].y) - yCenter);
 
  406         temp = ((temp > 0)? (temp): (-temp)); 
 
  407         ySize = ((ySize > temp)? (ySize):(temp));
 
  409         if(detObj2D[member].peakVal > strongestPeakVal)
 
  411             strongestPeakVal = detObj2D[member].peakVal;
 
  412             strongestMember = member;
 
  418     if ((xSize == 0) || (ySize == 0))
 
  426     report->numPoints = length + 1;
 
  427     report->xCenter = (int16_t)(xCenter); 
 
  428     report->yCenter = (int16_t)(yCenter);  
 
  429     report->xSize  = (int16_t)(xSize);     
 
  430     report->ySize  = (int16_t)(ySize);    
 
  431     report->avgVel = (int16_t)(avgVel);