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.

TDA3: AoA Radar Use Case

Part Number: TDA3

Below is a a piece of code extracted from radarDraw_priv.c in which it draws the targets on the Angle plot. We are trying to use the same plot for our LRR use case. 
I have questions in the lines highlighted below. Our angles are +-3 deg and the Range goes from 0 -> 330 meters. software angle resolution are 0.1 within the +-3 deg.
Our range resolution are 1.3m. We keep width of the V the same as in the SRR vision SDK use case.

Int32 RadarDraw_drawRadarObjects(AlgorithmFxn_RadarDrawObj *pObj) { UInt32 idx; AlgorithmFxn_RadarBeamFormBuffDescriptor *pRadarOutput; RadarDraw_targetInformation target; Int32 angle; double currAzimAngle, currRange; Int32 maxVelocityBinNum, midPoint; pRadarOutput = pObj->detectedObjs; maxVelocityBinNum = pObj->algLinkCreateParams.maxVelocityBinNum[pRadarOutput->profileId]; midPoint = maxVelocityBinNum/2; for (idx = 0; idx < pRadarOutput->numDetections; idx++) { angle = (pObj->algLinkCreateParams.numHorzAngles - 1)/2; /* Create mirror image of angle */ // Khai: angleBin of 0 equals to currAzimAngle of 6 degree. That means // angleBin 0 maps to the +3 degree angle and angleBin currAzimAngle = -(((Int32)(pRadarOutput->objBuf[idx].angleBin % pObj->algLinkCreateParams.numHorzAngles) - angle)* pObj->algLinkCreateParams.azimAngleRes[pRadarOutput->profileId]); #if defined(AWR1243_METAWAVE_LRR_CONFIG) /* Current Range is in meter */ currRange = pRadarOutput->objBuf[idx].range * pObj->algLinkCreateParams.rangeRes[pRadarOutput->profileId]; #else /* Current Range is in cm */ currRange = 100 * pRadarOutput->objBuf[idx].range * pObj->algLinkCreateParams.rangeRes[pRadarOutput->profileId]; #endif
// what does this mean to check for (currRange * 2)/pObj->scale) < pObj->radius) ??? if (((currAzimAngle < angle) && (currAzimAngle > -angle)) && (((currRange * 2)/pObj->scale) < pObj->radius) && (pRadarOutput->objBuf[idx].energy > 0)) { // Khai: multiply 10 here to place the target angle in a 10x widen AoA plot target.angle = (Int32) (currAzimAngle * 2 * 10); target.distance = (Int32) ((currRange * 2)/ pObj->scale); // Khai: why * 2 and / scale ??? if (pRadarOutput->objBuf[idx].velocity >= midPoint) { target.relSpeed = ((Int32)pRadarOutput->objBuf[idx].velocity - maxVelocityBinNum)* pObj->algLinkCreateParams.velocityRes[ pRadarOutput->profileId]; } else { target.relSpeed = pRadarOutput->objBuf[idx].velocity * pObj->algLinkCreateParams.velocityRes[ pRadarOutput->profileId]; } RadarDraw_plotTarget(pObj, pObj->centerX, pObj->centerY, pObj->radius, &target); } else { //Vps_printf("RadarDrawLink: obj [%d] is out of range for display!! ", idx); } }

  • Debugging the code in PeakDetect and BeamForm. Below are printf output. The output of PeakDetect has a list of targets. For the given target list as input to BeamForm, it outputs a list of targets along with the AoA attribute for a given target. For BeamForm the output below has been filtered to print only energy > 0 . My question is why is the BeamForm output energy for given target is different than energy from PeakDetect output? What's the unit of the PeakDetect target energy and the unit of BeamForm target energy?

    [DSP1 ] 25.934453 s: AlgorithmFxn_RadarPkDetectProcess: 0) Energy = 3069, Doppler = 0, Range = 0
    [DSP1 ] 25.934484 s: AlgorithmFxn_RadarPkDetectProcess: 1) Energy = 3415, Doppler = 0, Range = 1
    [DSP1 ] 25.934545 s: AlgorithmFxn_RadarPkDetectProcess: 2) Energy = 3140, Doppler = 0, Range = 2
    [DSP1 ] 25.934575 s: AlgorithmFxn_RadarPkDetectProcess: 3) Energy = 2497, Doppler = 0, Range = 3
    [DSP1 ] 25.934636 s: AlgorithmFxn_RadarPkDetectProcess: 4) Energy = 1913, Doppler = 0, Range = 255
    [DSP1 ] 25.934667 s: AlgorithmFxn_RadarPkDetectProcess: 5) Energy = 2798, Doppler = 1, Range = 0
    [DSP1 ] 25.934697 s: AlgorithmFxn_RadarPkDetectProcess: 6) Energy = 3135, Doppler = 1, Range = 1
    [DSP1 ] 25.934758 s: AlgorithmFxn_RadarPkDetectProcess: 7) Energy = 2854, Doppler = 1, Range = 2
    [DSP1 ] 25.934789 s: AlgorithmFxn_RadarPkDetectProcess: 8) Energy = 2205, Doppler = 1, Range = 3
    [DSP1 ] 25.934819 s: AlgorithmFxn_RadarPkDetectProcess: 9) Energy = 1599, Doppler = 1, Range = 255
    [DSP1 ] 25.934880 s: AlgorithmFxn_RadarPkDetectProcess: 10) Energy = 1917, Doppler = 2, Range = 0
    [DSP1 ] 25.934941 s: AlgorithmFxn_RadarPkDetectProcess: 11) Energy = 2254, Doppler = 2, Range = 1
    [DSP1 ] 25.934972 s: AlgorithmFxn_RadarPkDetectProcess: 12) Energy = 1967, Doppler = 2, Range = 2
    [DSP1 ] 25.935002 s: AlgorithmFxn_RadarPkDetectProcess: 13) Energy = 1405, Doppler = 97, Range = 8
    [DSP1 ] 25.935063 s: AlgorithmFxn_RadarPkDetectProcess: 14) Energy = 1362, Doppler = 2, Range = 2
    [DSP1 ] 25.935094 s: AlgorithmFxn_RadarPkDetectProcess: 15) Energy = 1896, Doppler = 2, Range = 3
    [DSP1 ] 25.935124 s: AlgorithmFxn_RadarPkDetectProcess: 16) Energy = 2220, Doppler = 97, Range = 8
    [DSP1 ] 25.935185 s: AlgorithmFxn_RadarPkDetectProcess: 17) Energy = 1937, Doppler = 98, Range = 8
    [DSP1 ] 25.935216 s: AlgorithmFxn_RadarPkDetectProcess: 18) Energy = 2785, Doppler = 126, Range = 0
    [DSP1 ] 25.935277 s: AlgorithmFxn_RadarPkDetectProcess: 19) Energy = 3140, Doppler = 126, Range = 1
    [DSP1 ] 25.935307 s: AlgorithmFxn_RadarPkDetectProcess: 20) Energy = 2849, Doppler = 126, Range = 2
    [DSP1 ] 25.935338 s: AlgorithmFxn_RadarPkDetectProcess: 21) Energy = 2216, Doppler = 126, Range = 3
    [DSP1 ] 25.935399 s: AlgorithmFxn_RadarPkDetectProcess: 22) Energy = 1599, Doppler = 127, Range = 0
    [DSP1 ] 25.935429 s: ------------------------------------------------------
    [DSP1 ] 25.935978 s: AlgorithmFxn_RadarBeamFormProcess: profileID = 0
    [DSP1 ] 25.936009 s: AlgorithmFxn_RadarBeamFormProcess: 1) Doppler = 0, Range = 2, Energy = 1, Angle = 43
    [DSP1 ] 25.936070 s: ------------------------------------------------------
    [DSP1 ] 26.000427 s: AlgorithmFxn_RadarPkDetectProcess: 0) Energy = 3069, Doppler = 0, Range = 0
    [DSP1 ] 26.000488 s: AlgorithmFxn_RadarPkDetectProcess: 1) Energy = 3410, Doppler = 0, Range = 1
    [DSP1 ] 26.000518 s: AlgorithmFxn_RadarPkDetectProcess: 2) Energy = 3135, Doppler = 0, Range = 2
    [DSP1 ] 26.000579 s: AlgorithmFxn_RadarPkDetectProcess: 3) Energy = 2493, Doppler = 0, Range = 3
    [DSP1 ] 26.000610 s: AlgorithmFxn_RadarPkDetectProcess: 4) Energy = 1765, Doppler = 0, Range = 255
    [DSP1 ] 26.000640 s: AlgorithmFxn_RadarPkDetectProcess: 5) Energy = 1913, Doppler = 1, Range = 0
    [DSP1 ] 26.000701 s: AlgorithmFxn_RadarPkDetectProcess: 6) Energy = 2776, Doppler = 1, Range = 1
    [DSP1 ] 26.000732 s: AlgorithmFxn_RadarPkDetectProcess: 7) Energy = 3135, Doppler = 1, Range = 2
    [DSP1 ] 26.000762 s: AlgorithmFxn_RadarPkDetectProcess: 8) Energy = 2864, Doppler = 1, Range = 3
    [DSP1 ] 26.000823 s: AlgorithmFxn_RadarPkDetectProcess: 9) Energy = 2244, Doppler = 1, Range = 255
    [DSP1 ] 26.000854 s: AlgorithmFxn_RadarPkDetectProcess: 10) Energy = 1466, Doppler = 2, Range = 0
    [DSP1 ] 26.000915 s: AlgorithmFxn_RadarPkDetectProcess: 11) Energy = 1599, Doppler = 2, Range = 1
    [DSP1 ] 26.000945 s: AlgorithmFxn_RadarPkDetectProcess: 12) Energy = 1909, Doppler = 2, Range = 2
    [DSP1 ] 26.001006 s: AlgorithmFxn_RadarPkDetectProcess: 13) Energy = 2216, Doppler = 2, Range = 3
    [DSP1 ] 26.001037 s: AlgorithmFxn_RadarPkDetectProcess: 14) Energy = 1967, Doppler = 126, Range = 0
    [DSP1 ] 26.001067 s: AlgorithmFxn_RadarPkDetectProcess: 15) Energy = 1437, Doppler = 126, Range = 1
    [DSP1 ] 26.001128 s: AlgorithmFxn_RadarPkDetectProcess: 16) Energy = 1874, Doppler = 126, Range = 2
    [DSP1 ] 26.001159 s: AlgorithmFxn_RadarPkDetectProcess: 17) Energy = 2237, Doppler = 127, Range = 0
    [DSP1 ] 26.001189 s: AlgorithmFxn_RadarPkDetectProcess: 18) Energy = 1937, Doppler = 127, Range = 1
    [DSP1 ] 26.001250 s: AlgorithmFxn_RadarPkDetectProcess: 19) Energy = 2789, Doppler = 127, Range = 2
    [DSP1 ] 26.001281 s: AlgorithmFxn_RadarPkDetectProcess: 20) Energy = 3125, Doppler = 127, Range = 3
    [DSP1 ] 26.001342 s: AlgorithmFxn_RadarPkDetectProcess: 21) Energy = 2849, Doppler = 127, Range = 255
    [DSP1 ] 26.001372 s: AlgorithmFxn_RadarPkDetectProcess: 22) Energy = 2230, Doppler = 126, Range = 2
    [DSP1 ] 26.001403 s: AlgorithmFxn_RadarPkDetectProcess: 23) Energy = 1480, Doppler = 126, Range = 3
    [DSP1 ] 26.001464 s: AlgorithmFxn_RadarPkDetectProcess: 24) Energy = 1599, Doppler = 127, Range = 0
    [DSP1 ] 26.001494 s: ------------------------------------------------------
    [DSP1 ] 26.002043 s: AlgorithmFxn_RadarBeamFormProcess: profileID = 0
    [DSP1 ] 26.002074 s: AlgorithmFxn_RadarBeamFormProcess: 1) Doppler = 0, Range = 2, Energy = 1, Angle = 43
    [DSP1 ] 26.002135 s: ------------------------------------------------------

  • So, I was able to change the EnergyScaling factor for BeamForm from 15 to 1 and below is what I got for each Peak Detected target. There are 42 targets input to BeamForm from Peak Detection. Obviously there are the corresponding 42 target output from BeamForm with the Angle info. Now, if you go down the list and compare target Range, Doppler from output of PeakDetect and BeamForm, they don't agree. Why?

    I would expect BeamForm will take the Peak Detected targets and calculated their Angle. Why does BeamForm alter the Range Doppler info of the targets?

    [DSP1 ] 32.025712 s: AlgorithmFxn_RadarBeamFormProcess ------------------------------------------------------
    [DSP1 ] 32.088147 s: AlgorithmFxn_RadarPkDetectProcess: 0) Energy = 3878, Doppler = 0, Range = 1
    [DSP1 ] 32.088208 s: AlgorithmFxn_RadarPkDetectProcess: 1) Energy = 3281, Doppler = 0, Range = 2
    [DSP1 ] 32.088269 s: AlgorithmFxn_RadarPkDetectProcess: 2) Energy = 3051, Doppler = 0, Range = 3
    [DSP1 ] 32.088299 s: AlgorithmFxn_RadarPkDetectProcess: 3) Energy = 2798, Doppler = 0, Range = 4
    [DSP1 ] 32.088330 s: AlgorithmFxn_RadarPkDetectProcess: 4) Energy = 2937, Doppler = 0, Range = 6
    [DSP1 ] 32.088391 s: AlgorithmFxn_RadarPkDetectProcess: 5) Energy = 3637, Doppler = 0, Range = 7
    [DSP1 ] 32.088421 s: AlgorithmFxn_RadarPkDetectProcess: 6) Energy = 3094, Doppler = 0, Range = 8
    [DSP1 ] 32.088452 s: AlgorithmFxn_RadarPkDetectProcess: 7) Energy = 3035, Doppler = 0, Range = 19
    [DSP1 ] 32.088513 s: AlgorithmFxn_RadarPkDetectProcess: 8) Energy = 3265, Doppler = 1, Range = 1
    [DSP1 ] 32.088543 s: AlgorithmFxn_RadarPkDetectProcess: 9) Energy = 2647, Doppler = 1, Range = 2
    [DSP1 ] 32.088574 s: AlgorithmFxn_RadarPkDetectProcess: 10) Energy = 2445, Doppler = 1, Range = 3
    [DSP1 ] 32.088635 s: AlgorithmFxn_RadarPkDetectProcess: 11) Energy = 2177, Doppler = 1, Range = 4
    [DSP1 ] 32.088665 s: AlgorithmFxn_RadarPkDetectProcess: 12) Energy = 2298, Doppler = 1, Range = 6
    [DSP1 ] 32.088696 s: AlgorithmFxn_RadarPkDetectProcess: 13) Energy = 3016, Doppler = 1, Range = 7
    [DSP1 ] 32.088757 s: AlgorithmFxn_RadarPkDetectProcess: 14) Energy = 2472, Doppler = 1, Range = 8
    [DSP1 ] 32.088787 s: AlgorithmFxn_RadarPkDetectProcess: 15) Energy = 2404, Doppler = 1, Range = 19
    [DSP1 ] 32.088818 s: AlgorithmFxn_RadarPkDetectProcess: 16) Energy = 1524, Doppler = 20, Range = 8
    [DSP1 ] 32.088879 s: AlgorithmFxn_RadarPkDetectProcess: 17) Energy = 1389, Doppler = 21, Range = 8
    [DSP1 ] 32.088909 s: AlgorithmFxn_RadarPkDetectProcess: 18) Energy = 2673, Doppler = 0, Range = 20
    [DSP1 ] 32.088940 s: AlgorithmFxn_RadarPkDetectProcess: 19) Energy = 2705, Doppler = 0, Range = 255
    [DSP1 ] 32.089001 s: AlgorithmFxn_RadarPkDetectProcess: 20) Energy = 1414, Doppler = 0, Range = 9
    [DSP1 ] 32.089031 s: AlgorithmFxn_RadarPkDetectProcess: 21) Energy = 2096, Doppler = 1, Range = 20
    [DSP1 ] 32.089092 s: AlgorithmFxn_RadarPkDetectProcess: 22) Energy = 2081, Doppler = 1, Range = 255
    [DSP1 ] 32.089123 s: AlgorithmFxn_RadarPkDetectProcess: 23) Energy = 1302, Doppler = 20, Range = 9
    [DSP1 ] 32.089184 s: AlgorithmFxn_RadarPkDetectProcess: 24) Energy = 1819, Doppler = 30, Range = 249
    [DSP1 ] 32.089214 s: AlgorithmFxn_RadarPkDetectProcess: 25) Energy = 1584, Doppler = 30, Range = 250
    [DSP1 ] 32.089245 s: AlgorithmFxn_RadarPkDetectProcess: 26) Energy = 1362, Doppler = 31, Range = 249
    [DSP1 ] 32.089306 s: AlgorithmFxn_RadarPkDetectProcess: 27) Energy = 1869, Doppler = 97, Range = 8
    [DSP1 ] 32.089336 s: AlgorithmFxn_RadarPkDetectProcess: 28) Energy = 1541, Doppler = 98, Range = 7
    [DSP1 ] 32.089397 s: AlgorithmFxn_RadarPkDetectProcess: 29) Energy = 2248, Doppler = 98, Range = 8
    [DSP1 ] 32.089428 s: AlgorithmFxn_RadarPkDetectProcess: 30) Energy = 1459, Doppler = 99, Range = 8
    [DSP1 ] 32.089458 s: AlgorithmFxn_RadarPkDetectProcess: 31) Energy = 3247, Doppler = 127, Range = 1
    [DSP1 ] 32.089519 s: AlgorithmFxn_RadarPkDetectProcess: 32) Energy = 2642, Doppler = 127, Range = 2
    [DSP1 ] 32.089550 s: AlgorithmFxn_RadarPkDetectProcess: 33) Energy = 2445, Doppler = 127, Range = 3
    [DSP1 ] 32.089580 s: AlgorithmFxn_RadarPkDetectProcess: 34) Energy = 2152, Doppler = 127, Range = 4
    [DSP1 ] 32.089641 s: AlgorithmFxn_RadarPkDetectProcess: 35) Energy = 2301, Doppler = 127, Range = 6
    [DSP1 ] 32.089672 s: AlgorithmFxn_RadarPkDetectProcess: 36) Energy = 3005, Doppler = 127, Range = 7
    [DSP1 ] 32.089702 s: AlgorithmFxn_RadarPkDetectProcess: 37) Energy = 2476, Doppler = 127, Range = 8
    [DSP1 ] 32.089763 s: AlgorithmFxn_RadarPkDetectProcess: 38) Energy = 2400, Doppler = 127, Range = 19
    [DSP1 ] 32.089794 s: AlgorithmFxn_RadarPkDetectProcess: 39) Energy = 1693, Doppler = 98, Range = 9
    [DSP1 ] 32.089855 s: AlgorithmFxn_RadarPkDetectProcess: 40) Energy = 2064, Doppler = 127, Range = 20
    [DSP1 ] 32.089885 s: AlgorithmFxn_RadarPkDetectProcess: 41) Energy = 2064, Doppler = 127, Range = 255
    [DSP1 ] 32.089916 s: AlgorithmFxn_RadarPkDetectProcess ------------------------------------------------------
    [DSP1 ] 32.090556 s: AlgorithmFxn_RadarBeamFormProcess: profileID = 0
    [DSP1 ] 32.090617 s: AlgorithmFxn_RadarBeamFormProcess: 0) Energy = 43265, Doppler = 0, Range = 1, Angle = 46
    [DSP1 ] 32.090648 s: AlgorithmFxn_RadarBeamFormProcess: 1) Energy = 11263, Doppler = 0, Range = 3, Angle = 23
    [DSP1 ] 32.090709 s: AlgorithmFxn_RadarBeamFormProcess: 2) Energy = 4105, Doppler = 0, Range = 6, Angle = 30
    [DSP1 ] 32.090739 s: AlgorithmFxn_RadarBeamFormProcess: 3) Energy = 2113, Doppler = 0, Range = 8, Angle = 17
    [DSP1 ] 32.090800 s: AlgorithmFxn_RadarBeamFormProcess: 4) Energy = 5263, Doppler = 1, Range = 1, Angle = 5
    [DSP1 ] 32.090831 s: AlgorithmFxn_RadarBeamFormProcess: 5) Energy = 33025, Doppler = 1, Range = 3, Angle = 4
    [DSP1 ] 32.090892 s: AlgorithmFxn_RadarBeamFormProcess: 6) Energy = 7353, Doppler = 1, Range = 6, Angle = 59
    [DSP1 ] 32.090922 s: AlgorithmFxn_RadarBeamFormProcess: 7) Energy = 5749, Doppler = 1, Range = 8, Angle = 47
    [DSP1 ] 32.090983 s: AlgorithmFxn_RadarBeamFormProcess: 8) Energy = 8290, Doppler = 20, Range = 8, Angle = 46
    [DSP1 ] 32.091014 s: AlgorithmFxn_RadarBeamFormProcess: 9) Energy = 2017, Doppler = 0, Range = 20, Angle = 23
    [DSP1 ] 32.091075 s: AlgorithmFxn_RadarBeamFormProcess: 10) Energy = 825, Doppler = 0, Range = 9, Angle = 30
    [DSP1 ] 32.091105 s: AlgorithmFxn_RadarBeamFormProcess: 11) Energy = 449, Doppler = 1, Range = 255, Angle = 18
    [DSP1 ] 32.091166 s: AlgorithmFxn_RadarBeamFormProcess: 12) Energy = 969, Doppler = 30, Range = 249, Angle = 4
    [DSP1 ] 32.091227 s: AlgorithmFxn_RadarBeamFormProcess: 13) Energy = 6169, Doppler = 31, Range = 249, Angle = 4
    [DSP1 ] 32.091258 s: AlgorithmFxn_RadarBeamFormProcess: 14) Energy = 1357, Doppler = 98, Range = 7, Angle = 59
    [DSP1 ] 32.091319 s: AlgorithmFxn_RadarBeamFormProcess: 15) Energy = 1117, Doppler = 99, Range = 8, Angle = 47
    [DSP1 ] 32.091349 s: AlgorithmFxn_RadarBeamFormProcess: 16) Energy = 43, Doppler = 127, Range = 2, Angle = 9
    [DSP1 ] 32.091410 s: AlgorithmFxn_RadarBeamFormProcess: 17) Energy = 33, Doppler = 127, Range = 4, Angle = 11
    [DSP1 ] 32.091441 s: AlgorithmFxn_RadarBeamFormProcess: 18) Energy = 2210, Doppler = 127, Range = 7, Angle = 46
    [DSP1 ] 32.091502 s: AlgorithmFxn_RadarBeamFormProcess: 19) Energy = 1963, Doppler = 127, Range = 19, Angle = 45
    [DSP1 ] 32.091532 s: AlgorithmFxn_RadarBeamFormProcess: 20) Energy = 82, Doppler = 127, Range = 20, Angle = 23
    [DSP1 ] 32.091593 s: AlgorithmFxn_RadarBeamFormProcess: 21) Energy = 451, Doppler = 127, Range = 20, Angle = 47
    [DSP1 ] 32.091624 s: AlgorithmFxn_RadarBeamFormProcess: 22) Energy = 373, Doppler = 127, Range = 255, Angle = 45
    [DSP1 ] 32.091685 s: AlgorithmFxn_RadarBeamFormProcess: 23) Energy = 29, Doppler = 127, Range = 255, Angle = 52
    [DSP1 ] 32.091746 s: AlgorithmFxn_RadarBeamFormProcess: 24) Energy = 87, Doppler = 0, Range = 0, Angle = 26
    [DSP1 ] 32.091776 s: AlgorithmFxn_RadarBeamFormProcess: 25) Energy = 43, Doppler = 0, Range = 0, Angle = 29
    [DSP1 ] 32.091807 s: AlgorithmFxn_RadarBeamFormProcess: 26) Energy = 23, Doppler = 0, Range = 0, Angle = 0
    [DSP1 ] 32.091868 s: AlgorithmFxn_RadarBeamFormProcess: 27) Energy = 99, Doppler = 0, Range = 0, Angle = 10
    [DSP1 ] 32.091898 s: AlgorithmFxn_RadarBeamFormProcess: 28) Energy = 37, Doppler = 0, Range = 0, Angle = 44
    [DSP1 ] 32.091959 s: AlgorithmFxn_RadarBeamFormProcess: 29) Energy = 253, Doppler = 0, Range = 0, Angle = 12
    [DSP1 ] 32.091990 s: AlgorithmFxn_RadarBeamFormProcess: 30) Energy = 31, Doppler = 0, Range = 0, Angle = 40
    [DSP1 ] 32.092051 s: AlgorithmFxn_RadarBeamFormProcess: 31) Energy = 7909, Doppler = 0, Range = 0, Angle = 46
    [DSP1 ] 32.092081 s: AlgorithmFxn_RadarBeamFormProcess: 32) Energy = 1972, Doppler = 0, Range = 0, Angle = 23
    [DSP1 ] 32.092142 s: AlgorithmFxn_RadarBeamFormProcess: 33) Energy = 813, Doppler = 0, Range = 0, Angle = 29
    [DSP1 ] 32.092203 s: AlgorithmFxn_RadarBeamFormProcess: 34) Energy = 383, Doppler = 0, Range = 0, Angle = 17
    [DSP1 ] 32.092234 s: AlgorithmFxn_RadarBeamFormProcess: 35) Energy = 949, Doppler = 0, Range = 0, Angle = 5
    [DSP1 ] 32.092295 s: AlgorithmFxn_RadarBeamFormProcess: 36) Energy = 5994, Doppler = 0, Range = 0, Angle = 5
    [DSP1 ] 32.092325 s: AlgorithmFxn_RadarBeamFormProcess: 37) Energy = 1365, Doppler = 0, Range = 0, Angle = 59
    [DSP1 ] 32.092386 s: AlgorithmFxn_RadarBeamFormProcess: 38) Energy = 1109, Doppler = 0, Range = 0, Angle = 47
    [DSP1 ] 32.092417 s: AlgorithmFxn_RadarBeamFormProcess: 39) Energy = 65, Doppler = 0, Range = 0, Angle = 28
    [DSP1 ] 32.092478 s: AlgorithmFxn_RadarBeamFormProcess: 40) Energy = 421, Doppler = 0, Range = 0, Angle = 47
    [DSP1 ] 32.092508 s: AlgorithmFxn_RadarBeamFormProcess: 41) Energy = 31, Doppler = 0, Range = 0, Angle = 40
    [DSP1 ] 32.092569 s: AlgorithmFxn_RadarBeamFormProcess ------------------------------------------------------

  • If you have any documents explaining what each control parameters to each processing link in the radar chain, that would cut down on the number of questions and E2E tickets I open.
  • Khai,

    The output you have shared from the beam forming is not correct. As part of our testing we have always seen the range and doppler values to be unchanged by the beam forming algorithm.

    Couple of things to check. Is the number of objects detected the same between beam forming and peak detection. Check for numDetections at output of both beam forming and peak detection.

    The parameters are described in eve_sw_XX_XX_00_00\apps\docs\EVE_Applets_UserGuide.pdf for each of the FFT, peak detection and beam forming algorithms.

    Thanks and Regards,
    Piyali
  • Also, what modifications have you made to the peak detection and beam forming input parameters?

    Thanks and Regards,
    Piyali
  • Hi Piyali,

    I did not change anything much. The first dump of the print out was simply printing the list of BeamForm target that has energy value greater than 0. Then I made change to the energyScaling factor from 15 to 1 in the BeamForm input data structure. The result was the second print out dump in this thread.

    The number detected targets are the same from Peak Detect and from BeamForm also can be seen in the second printout dump above. However, BeamForm seemed to change/group the targets that are next to each other and declared them as a single target. The output list of BeamForm targets although matched that of Peak Detected, the result of that list has most target energy set to 0. Thus, the remaining list of targets plotted are much smaller than the list in Peak Detect as it filtered and plotted only targets with great than 0 energy.

    Thanks,

    --Khai

  • If this is what you mean. The control data structure for PeakDetect and BeamForm in chains_common_radar.c

    Void ChainsCommon_ar12xxSetPkDetectParams(AlgorithmFxn_RadarPkDetectCreateParams *pPkDetParams,
    ChainsCommon_Ar12xxConfigOut *pAr12xxCfg)
    {
    UInt32 i = 0U;
    AlgorithmFxn_RadarPkDetect_Init(pPkDetParams);
    pPkDetParams->maxNumAntenna = 12U;
    pPkDetParams->maxNumTx = 3U;
    pPkDetParams->maxRangeDimension = 1024U; // Khai: why 1024?
    pPkDetParams->maxDopplerDimension = 512U; // Khai: why 512?
    pPkDetParams->detectionMethod = PEAK_DETECTION_TI_METHOD_CFARCA_DB;
    pPkDetParams->enableAntennaDataOut = 1;
    pPkDetParams->algoCreateParams.cfarCaDb.maxNoiseLen = 16;
    pPkDetParams->algoCreateParams.cfarCaDb.maxGaurdLen = 16;

    #if defined(AWR1243_METAWAVE_LRR_CONFIG)
    pPkDetParams->cfarCaDb.noiseLen = 8;
    pPkDetParams->cfarCaDb.gaurdLen = 4;
    pPkDetParams->cfarCaDb.constant1 = 256; // Khai: CUT > AverageNoiseFloor * C1/2^C2
    pPkDetParams->cfarCaDb.constant2 = 3; // Khai: change from 3 to 2. This raises the threshold to reduce the number of detected targets
    #else
    pPkDetParams->cfarCaDb.noiseLen = 8;
    pPkDetParams->cfarCaDb.gaurdLen = 4;
    pPkDetParams->cfarCaDb.constant1 = 256;
    pPkDetParams->cfarCaDb.constant2 = 3;
    #endif
    if (pAr12xxCfg->radarParams[0].bpmEnabled == 1U)
    {
    pPkDetParams->enableTxDecoding = 1;
    }
    else
    {
    pPkDetParams->enableTxDecoding = 0;
    }
    memset(pPkDetParams->txDecodingCoefficients, 0, RADAR_PKDETECT_MAX_TX * RADAR_PKDETECT_MAX_TX);
    ((Int16*)pPkDetParams->txDecodingCoefficients)[0] = 16384; /* 1 */
    ((Int16*)pPkDetParams->txDecodingCoefficients)[1] = 16384; /* 1 */
    ((Int16*)pPkDetParams->txDecodingCoefficients)[2] = 16384; /* 1 */
    ((Int16*)pPkDetParams->txDecodingCoefficients)[3] = -16384;/* -1 */
    pPkDetParams->numProfiles = pAr12xxCfg->radarParams[0].numProfiles;
    for (i = 0U; i < pAr12xxCfg->radarParams[0].numProfiles; i++)
    {
    pPkDetParams->numTx[i] = pAr12xxCfg->radarParams[0].numTxAntenna[i];
    pPkDetParams->numRx[i] = pAr12xxCfg->radarParams[0].numRxAntenna[i];
    pPkDetParams->rangeDim[i] = pAr12xxCfg->radarParams[0].radarWidth[i];
    pPkDetParams->dopplerDim[i] = pAr12xxCfg->radarParams[0].radarHeight[i];
    // Khai: generate the phase compensation vector to compensate for the phase
    // difference in distance (meter)for RX1 with respect to RX0. For 77GHz,
    // lambda = 0.00389 meters
    pPkDetParams->rangeRes[i] = pAr12xxCfg->radarParams[0].rangeRes[i];
    // int v = 0;
    // float lambda = 0.00389;
    // for(v = 0U; v < pPkDetParams->maxRangeDimension; v++)
    // pPkDetParams->phaseUnwrapVector[i][v] = v*(20*lambda);
    }
    }

    /**
    *******************************************************************************
    *
    * \brief Function to Set up the beam forming parameters
    *
    * \param pBeamFormParams Beam Forming create time parameters
    * \param pAr12xxCfg AR12 configuration obtained from
    * #ChainsCommon_ar12xxConfig
    *
    * \return None
    *
    *******************************************************************************
    */
    Void ChainsCommon_ar12xxSetBeamFormParams(
    AlgorithmFxn_RadarBeamFormCreateParams *pBeamFormParams,
    ChainsCommon_Ar12xxConfigOut *pAr12xxCfg)
    {
    UInt32 i = 0U;
    UInt32 maxAnt = 0U;
    AlgorithmFxn_RadarBeamForm_Init(pBeamFormParams);

    // Khai: this is where we initialize our Angle map parameters (ie: maxNumDetection, maxNumAngle, numAngles, etc..)
    pBeamFormParams->maxNumDetection = RADAR_BEAMFORM_MAX_DETECTED_OBJS; // 2048
    pBeamFormParams->maxNumAngle = (unsigned short)(2 * CHAINS_RADAR_MAX_HORZ_ANGLE/CHAINS_RADAR_HORZ_RES + 1) *
    (2 * CHAINS_RADAR_MAX_VERT_ANGLE/CHAINS_RADAR_VERT_RES + 1); // 7 bin angle @ 1 deg res
    // Khai: We want BEAM_FORMING_TI_COORDINATE_BUF_FORMAT_1
    //pBeamFormParams->coordinateBufFormat = BEAM_FORMING_TI_COORDINATE_BUF_FORMAT_2;
    pBeamFormParams->coordinateBufFormat = BEAM_FORMING_TI_COORDINATE_BUF_FORMAT_1;
    pBeamFormParams->numAngles = pBeamFormParams->maxNumAngle;
    // Khai: Check the data to confirm if this scaling values don't saturate the 16 bit data
    pBeamFormParams->beamFormingScaling = 15; // Khai: does beamFormingScaling need to be different for LRR?
    pBeamFormParams->energyScaling = 15; // Khai: does beamFormingScaling need to be different for LRR?
    for (i = 0U; i < pAr12xxCfg->radarParams[0].numProfiles; i++)
    {
    pBeamFormParams->numAntennas[i] = pAr12xxCfg->radarParams[0].numTxAntenna[i] * pAr12xxCfg->radarParams[0].numRxAntenna[i];
    if (maxAnt < pBeamFormParams->numAntennas[i])
    {
    maxAnt = pBeamFormParams->numAntennas[i];
    }
    pBeamFormParams->steeringBuf[i] = (UInt8*) Utils_memAlloc(UTILS_HEAPID_DDR_CACHED_SR,
    pBeamFormParams->maxNumAngle * pBeamFormParams->numAntennas[i] * 4, 128);
    Chains_RadarCalculateSteeringMatrix((Int16*)pBeamFormParams->steeringBuf[i],
    CHAINS_RADAR_HORZ_RES, pAr12xxCfg->radarParams[0].numRxAntenna[i],
    CHAINS_RADAR_VERT_RES, pAr12xxCfg->radarParams[0].numTxAntenna[i],
    CHAINS_RADAR_ANT_SEPARATION, CHAINS_RADAR_MAX_HORZ_ANGLE, CHAINS_RADAR_MAX_VERT_ANGLE);
    }
    pBeamFormParams->maxNumAntenna = maxAnt;
    }
  • Hi Piyali,

    I also have question about the radarDraw_priv.c code snippet in RED below that you didn't answer. Thank you, Khai

    Int32 RadarDraw_drawRadarObjects(AlgorithmFxn_RadarDrawObj *pObj)

    {

       UInt32 idx;

       AlgorithmFxn_RadarBeamFormBuffDescriptor *pRadarOutput;

       RadarDraw_targetInformation target;

       Int32 angle;

       double currAzimAngle, currRange;

       Int32 maxVelocityBinNum, midPoint;

    //    pBeamFormcreateParams = &pObj->pCreateInArgs->beamFormcreateParams;

    //

    //    // 864 pixels / 333 meters = 2.6 pixels/meter. That mean, each range bin of 1.3 m = 2.6 pixels

    //    // or each pixel = 0.5 meter

    //    // Khai: This draws the range labels on the Angle plot

    //    /* By default, 1 pixel = 1 centermeter with scale = 1. */

    //    // Khai: I need to know my range bins and bin resolution here to get correct range dimension.

    //    // Need to figure out what the scale is from number of range pixels and range bins and bin res

    //    AlgorithmFxn_RadarDrawCreateParams *drawParam = &pObj->algLinkCreateParams;

    //    Int32 nRangeBins = drawParam->numRangeBin[pObj->currProfileId];

    //    Vps_printf("nRangeBins = %d", nRangeBins);

       pRadarOutput = pObj->detectedObjs;

       maxVelocityBinNum =

           pObj->algLinkCreateParams.maxVelocityBinNum[pRadarOutput->profileId];

       midPoint = maxVelocityBinNum/2;

       for (idx = 0; idx < pRadarOutput->numDetections; idx++)

       {

           angle = (pObj->algLinkCreateParams.numHorzAngles - 1)/2;

           /* Create mirror image of angle */

           // Khai: currAzimAngle is the actual angle of arrival in degrees.

           // angleBin 0 maps to the +3 degree of the V, angleBin 30 maps to center of the V, angleBin 60 maps to -3 deg

           currAzimAngle = -(((Int32)(pRadarOutput->objBuf[idx].angleBin % pObj->algLinkCreateParams.numHorzAngles) - angle)*

                        pObj->algLinkCreateParams.azimAngleRes[pRadarOutput->profileId]);

    #if defined(AWR1243_METAWAVE_LRR_CONFIG)

           // Khai: multiply 10 here to place the target angle in a 10x widen AoA plot

           currAzimAngle *= 10;

           /* Current Range is the actual target range in meter */

           currRange = pRadarOutput->objBuf[idx].range * pObj->algLinkCreateParams.rangeRes[pRadarOutput->profileId];

    #else

           /* Current Range is in cm */

           currRange = 100 * pRadarOutput->objBuf[idx].range

                       * pObj->algLinkCreateParams.rangeRes[pRadarOutput->profileId];

    #endif

           if (((currAzimAngle < angle) && (currAzimAngle > -angle)) &&

                    // Khai; Why checking for this condition?

                   (((currRange * 2)/pObj->scale) < pObj->radius) && (pRadarOutput->objBuf[idx].energy > 0))

           {

                // Khai: I am suspecting I place the target at the wrong angle bin and range bin

               target.angle = (Int32) (currAzimAngle * 2);                          // Khai: why  * by 2 ???

               target.distance = (Int32) ((currRange * 2)/ pObj->scale);   // Khai: why * 2 and / scale ???

               if (pRadarOutput->objBuf[idx].velocity >= midPoint)

               {

                   target.relSpeed = ((Int32)pRadarOutput->objBuf[idx].velocity -

                                      maxVelocityBinNum)*

                                     pObj->algLinkCreateParams.velocityRes[

                                     pRadarOutput->profileId];

               }

               else

               {

                   target.relSpeed = pRadarOutput->objBuf[idx].velocity *

                                     pObj->algLinkCreateParams.velocityRes[

                                     pRadarOutput->profileId];

               }

               RadarDraw_plotTarget(pObj,

                                        pObj->centerX,

                                        pObj->centerY,

                                        pObj->radius,

                                        &target);

           }

           else

           {

               //Vps_printf("RadarDrawLink: obj [%d] is out of range for display!! ", idx);

           }

       }

  • Khai,

    The below lines:

    // Khai; Why checking for this condition?

    (((currRange * 2)/pObj->scale) < pObj->radius) && (pRadarOutput->objBuf[idx].energy > 0))

    {

    // Khai: I am suspecting I place the target at the wrong angle bin and range bin

    target.angle = (Int32) (currAzimAngle * 2); // Khai: why * by 2 ???

    target.distance = (Int32) ((currRange * 2)/ pObj->scale); // Khai: why * 2 and / scale ???

    come from the offset label matcing with the object location.

    The offset labels are plotted in the function as below:

    Void RadarDraw_drawLabels(AlgorithmFxn_RadarDrawObj *pObj,
    UInt32 centerX,
    UInt32 centerY,
    UInt32 radius,
    UInt32 degrees)

    {
    ...
    /* By default, 1 pixel = 1 centermeter with scale = 1. */
    offset = 200U;
    for (radius=offset, range=1; radius < pObj->radius; radius+=offset, range++)
    {
    sprintf(label, "%dm", (range * pObj->scale));
    RadarDraw_drawLabel(pObj,
    centerX + RadarDraw_calcX(radius, 2*pObj->angle+2),
    centerY - RadarDraw_calcY(radius, 2*pObj->angle+2),
    label, 2);
    }
    ...
    }

    Here offset is incremented by 200 for every 1 m (100 cm). This creates an additional scale factor of 2 for the plotting.

    Similarly there is factor of 2 when we plot the angle labels as well.

    angle = (Int32) pObj->angle;
    while(angle > 0)
    {
    deltaX = RadarDraw_calcX(radius + 1, angle * 2);
    deltaY = RadarDraw_calcY(radius + 1, angle * 2);
    sprintf(label, "%ddeg", angle);
    RadarDraw_drawLabel(pObj,
    centerX + deltaX,
    centerY - deltaY,
    label, 2);
    sprintf(label, "-%ddeg", angle);
    RadarDraw_drawLabel(pObj,
    centerX - deltaX,
    centerY - deltaY,
    label, 2);
    angle -= 10;
    }

    Thanks and Regards,
    Piyali