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.

Compiler/CC2640R2F: AoA sampling sequece diagram

Part Number: CC2640R2F

Tool/software: TI C/C++ Compiler

Hi R.M

 this is Leison . here one concerns need your help regarding the AoA packet sampling sequence diagram.

above diagram is my understanding for the IQ capaturing diagram .

1.Black draw is the theory time line for every switch when the AoA toggling.

2.Blue draw is the actual time line for every switch when the AoA toggling . and the switch settle down time is accomplished within the 400ns ( DMA9 trigger to GPIO registor 's time). and this 400ns is also included in the every 4us sampling time ?

 if my understanding is not correct .can you pls draw a clear understanding sampling sequence diagram ?

many thanks

Leison

  • Hi,
    I am assigning an expert to help you out.
  • thank you .
    Leison
  • Dear Leison,

    Your black diagram look correct. Each 4us time slot consist of two parts, one switch slot and one sample slot. In our examples we use 2us switch slot and 2us sample slot. The 2us switch slot includes the time it take from the switching to start until it has settled down.

    Below you see an example with three antennas:

    Best Regards,

    R.M

  • 相位分析报告.xlsx

    Hi。 thank you for detail explaintation .

    here is the phase information after converting from IQ data. after checking i found never get the close phase between A1.1 and A1.17 . because of the all the 16 sampling IQs from A1.1 ,the angle coverage for these A1.1 16 IQs is equal to 300 degree more or less. for A1.2 will be 280 degree ,but for A1.3 that will more 420 degree. that caused the phase *** always.

    can you help check and suggest what is that reason ?

    Leison

  • Dear Leison,

    Can you please provide the raw IQ data for this data set? It's difficult for me to analyze without the raw IQ data.

    Best Regards,
    R.M
  • 2746.IQ.xlsx

    Hi R.M

    here with the raw IQ data , pls check.  

    many thanks

    Leison

  • Hi Leison,

    I have looked at your data and can't find anything wrong with it. It looks like your valid samples are sample[0] to sample[7] in each slot (16 samples per slot). When I compare A1.1 sample[0] with A1.1 sample[16] (v11) I get an average phase of -33 degrees and A1.2 sample[0] with A1.2 sample[16] (v22) I get an average phase of -32 degrees. This is all normal values.

    How you get >> 200 degrees is difficult for me to say without knowing your calculations.

    I have attached the data-file including the calculated values.

    2746.IQ_withCalc.csv

    Best Regards,

    R.M

  • Hi R.M

     understand your calculation ,that is the way what we are doing right now !

    ----regarding the theta issues:   the theta value for A1.1 normally equal to 300degree. not 360 degree or close 360? (e.g. sampling starting point from A1.1[0] to A1.1[16] , the sampling pointer will clockwise run 300 degree to sample these 16  the Polar coordinates points). and so on A1.2 will be  280 degree. but A1.3 over 400 degree. is that sampling way right ??    ---we think that could some issues that will caused the phase diff error.

    --- regarding the raw data IQ data . is there any Gauss filter function to process these data before modulation into LE PHY ?

    Leison

  • Hi R.M.
    your diagram i really don't understanding :
    if the sampling duration is 4us with 1/4 us per IQ . there should be another DMA to control the RF switch inside the 4us to prepare for the next antenna 's sampling starting . am I right ?
    if so this DMA work before first 2 us or after 2us donw to start?
    if so this activity will affect the sampling signal ?
    Leison
  • Hi  R.M.

      attached is the pic that guildline for the actual angle vs phase difference between our AoA project .but actully when i calculated the phase difference between A1.1&A1.2 . A1.2&A1.3 . it seems the raw IQ we collected is not completely correct: it shows:

      1. A1.1 &A1.2 phase difference  is not close to A 1.2&A1.3.  normally has 20-30 degree gap.what is the reason ?

      2. the phase difference is far away from the standard value of the guildline i attached here . IQ data can't be used directly ?

      3. the raw IQ data should be filterred by some digital signal tools ??

     thanks

    Leison

  • Hi Leison,

    Please find answers to your questions below:

    - The theta values for A1.1 will vary for each sample (typically increase 360degrees/16 per sample). This is the same for A1.2 and A1.3 too. I don't understand you point about 280degrees for A1.2 and how you get 400degrees for A1.3 (max is 360 degrees).  

    - LE PHY is using GFSK so the data symbols are filtered with a Gaussian filter but since the CTE tone is a constant 1 symbol this filter do not affect the raw IQ capture. 

    -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    - It's the GP Timer that gives trigger every 4us (compare match). This compare match triggers the DMA to write the next antenna switch pattern to the GPIOs. This happens as explained earlier every 4us in the beginning of the switch slot until done with the entire antenna switch sequence.    

    -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    No, the raw IQ data can't be used directly. I suggest that you take a look at this SLA:

    dev.ti.com/.../ble_aoa.html

    Best Regards,

    R.M

  • Hi  RM

    The  compare match triggers the DMA to start the antenna switching following the GPIO registratiom at tHe every ealier of 4us.

    1.if so .for version 2.3 SDK we should discard the first 8 IQs,why we keep them here?

    2. if it is possible .we add one GPtimer to control each 3antennas switching time within 250ns?

    if can .any instruction process to follow to modify the  SDK?

    Leison

  • Hi Leison,

    1. On 2.30 SDK the antenna switch start time was tuned so that first valid sample was sample[0] while on 2.40 SDK it's tuned so that first valid sample was sample[8]. Basically the switching starts 2us earlier in 2.30 SDK compared to 2.40 SDK.
    2. I still don't fully understand what you want to do here. Do you want the antennas to start switching 250ns earlier? If so then you can reduce the AOA_SIGNAL_DELAY_TIME value with 12. Keep in mind that then your last sample [15] is not longer valid and you need to use sample[7] to sample[14] instead.

    Best Regards,
    R.M
  • Hi R.M

     Can I get your formular to calcuate the V11's phase difference ? when I verify the A1.1[0] theata and A1.1[16] theata phase difference ,can't get the -36 degrees. what is your calculation formular? can you suggest ?

    thanks

    Leison

  • Hi Leison,

    V11 (Paa_rel below) is calculates the same way as for V12/V23 (Pab_rel below) using the AOA_AngleComplexProductComp function found in AoA.C (2.40 SDK):

            // Calculate the phase drift across one antenna repetition (X * complex conjugate (Y))
            int16_t Paa_rel = AOA_AngleComplexProductComp(gAoaReport.samples[32 + r*numAnt*gAoaNumSamplesPerBlock     + a*gAoaNumSamplesPerBlock + i].i,
                                                          gAoaReport.samples[32 + r*numAnt*gAoaNumSamplesPerBlock     + a*gAoaNumSamplesPerBlock + i].q,
                                                          gAoaReport.samples[32 + (r-1)*numAnt*gAoaNumSamplesPerBlock + a*gAoaNumSamplesPerBlock + i].i,
                                                          gAoaReport.samples[32 + (r-1)*numAnt*gAoaNumSamplesPerBlock + a*gAoaNumSamplesPerBlock + i].q);
    
            // Calculate phase difference between antenna a vs. antenna b
            int16_t Pab_rel = AOA_AngleComplexProductComp(gAoaReport.samples[32 + r*numAnt*gAoaNumSamplesPerBlock + a*gAoaNumSamplesPerBlock + i].i,
                                                          gAoaReport.samples[32 + r*numAnt*gAoaNumSamplesPerBlock + a*gAoaNumSamplesPerBlock + i].q,
                                                          gAoaReport.samples[32 + r*numAnt*gAoaNumSamplesPerBlock + b*gAoaNumSamplesPerBlock + i].i,
                                                          gAoaReport.samples[32 + r*numAnt*gAoaNumSamplesPerBlock + b*gAoaNumSamplesPerBlock + i].q);
    

    Best Regards,

    R.M

  • Hi Leison,

    I haven’t heard from you for two weeks, so I’m assuming you were able to resolve your issue. If this isn’t the case, please click the "This did NOT resolve my issue" button and reply to this thread with more information. If this thread locks, please click the "Ask a related question" button and in the new thread describe the current status of your issue and any additional details you may have to assist us in helping to solve your issues.

    Regards,
    R.M
  • Hi RM

     Can you leave your calculation formular inisde the CSV file for reference ??

    thanks

  • Hi Leison,

    I do not do the calculation inside the csv. I read the file containing the IQ data in python, do the calculation and then export it to a new csv file.
    The calculation done in python is exact the same as done in the c-file (AOA_AngleComplexProductComp function found in AoA.C, 2.40 SDK )

    Best Regards,
    R.M