Inquiry on the Meaning and Calculation of Local and Remote I/Q Values in the SDK

Certainly! Here’s a clear, natural English version of your email:


Dear Specialist,

I would like to better understand the two variables used in the SDK for calculating the phase of each channel: the local and remote (or, in version 2.9.0, the peer) I/Q values. Specifically, I am interested in how these values are obtained—are they averages over a series of measurements, or do they have some other physical significance?

  1. What do “local” and “remote” represent?
    Do they refer to the phase values measured by each device for the signals transmitted by the other? According to the description in the Bluetooth Channel Sounding technical overview, the reflector only reflects the signal and does not measure it—it simply bounces the transmitted signal back to the initiator. Based on this, it seems that “local” and “remote” might refer to the local oscillator of the transmitter and the signal eventually received by the transmitter, with their difference representing the final phase change.

    However, in the BLE 6 Core Specification, for multi-antenna measurements, the transmitter needs to send signals sequentially from multiple antennas, and only then does the reflector return each signal. This process appears to be more than just simple reflection; it suggests that the reflector is actively involved, rather than merely relaying the signal without phase measurement. If the reflector only acts as a relay without participating in phase measurement, this should happen at the hardware level, and it seems unlikely that it could wait for all transmissions to finish before retransmitting each one.

  2. If both devices are measuring the phase bidirectionally, why is there only one value reported for local and remote per channel in each subevent?
    In BLE AoA, estimating the phase of a signal requires a series of phase values sampled continuously from the CTE portion of the packet, which are then used to estimate the overall phase of the packet. In Channel Sounding, is it also the case that a series of phase values are sampled continuously from the mode-2 tone signal, and synchronization between the devices ensures that the sampling time aligns within each packet? Is the final phase value reported the average of the differences between a series of local and remote measurements?

Thank you for your help!

Best regards,
Cheng

  • Hello,

    We prefer that you just use e.g. google translate, and not chatgpt to translate your text. The reason is that we don't know whether the AI has added/removed information that is relevant for your question. 

    I believe we are talking about Channel sounding, and not Direction finding. Correct?

    If so, the "local" and "remote" refers to the one doing the measurement, which is the local, and the remote is the device that the local is measuring the distance to.

    However, in the BLE 6 Core Specification, for multi-antenna measurements, the transmitter needs to send signals sequentially from multiple antennas, and only then does the reflector return each signal. This process appears to be more than just simple reflection

    Now it sounds like you are talking about direction finding. Channel sounding doesn't require multiple antennas. Direction finding does require multiple antennas, because it measures the difference in phase to detect the angle. The channel sounding algorithm uses different channels to calculate the phase offset between different frequencies.

    Perhaps some more context can explain what you are actually looking for.

    Are you trying to combine the two technologies, Channel Sounding and Direction Finding? If so, this is not straight forward.

    Direction finding is delivered from us as an as-is-solution. We do the calculations, but we do not explain how the IQ data is being used.

    Channel sounding, as of today, is in an early stage. It is not very accurate the last time I tested, but is more a proof of concept. That we are able to measure the IQ data, but more work is required in order to crush the numbers for a better distance measurement result.

    But feel free to use google translate to explain what you are imagineing in your application. Perhaps that can give me some pointers on what information you are looking for.

    Best regards,

    Edvin

  • Thank you very much for your response—now I understand the meaning of “local” and “remote.”

    I apologize for mixing up AoA and Channel Sounding (CS) in my previous question. What I actually want to understand is why, in CS, each subevent only reports a single IQ value per channel.

    From what I know about AoA, it requires a series of phase samples over the CTE part of the packet to estimate the frequency of the whole signal, and then continues sampling on different antennas.

    However, in CS, I noticed that for each enabled channel, only one local IQ and one remote IQ are reported. It seems to me that if there is only a single measurement, the sampling time for local and remote would need to be strictly synchronized (starting from the very beginning of the signal). I’m not sure if my understanding is correct.

    For example, in the cs_de_iq_tones_t structure, the lengths of i_local, q_local, i_remote, and q_remote are all 80, which I assume corresponds to the number of channels—meaning there is only one measurement result per channel. I would like to know why there is only one local IQ and one remote IQ per channel. My intuition is that in order to obtain the phase of the received signal, it would require continuous sampling at multiple points.

    Could you please clarify this for me?

    Thank you!

  • Hi Edvin,

    I want to know how CS is implemented in the SDK.
    The following is my understanding about how CS works, could you take a look and point out what I said is wrong and help me to clarify my question below? 

    To channel sounding, specifically Phase based ranging (PBR), it measures the distance based on the phase difference slope over channels.  Assuming

    - pkt 1 is the packet sent by initiator and received by reflector,

    - pkt2 is the packet sent back by reflector, received by initiator, so I have a questions: 

    Q: To the phase difference,  when the two different phases are measured?

    - are they the difference between (A) the phase when pkt1 is received at the reflector side, and the phase (B) when pkt2 is received at initiator side?
    - or multiple phases are recorded over time when pkt is received, so there are array of these phase samples at two sides, you calculate the difference of each sample in order one by one and do an average among them?

    - or something else?

    Right now, I am suspecting the local and remote array in the screenshot Cheng provided are the phase samples measured at two side. But not 100% sure. 

    Thanks,

    Tengfei

  • I don't know the inner details on how this is implemented. But the idea is that they have some sense of a synchronized time. They don't know eachother's time, but there is a set time delay between receiving one packet before the reflector replies, so the time this takes is known.

    The distance is estimated using the phases. If you only did one channel (one frequency), you could see the phase of this signal. In an ideal world, where this is very accurate, you can use this to calculate that you are (N + phase) wawelengths away from the other device. But N is still unknown. So therefore, you do this sweep accross all channels, with different frequencies, and different wavelengths. I am not sure whether they only do one sample per channel, or multiple. When this sweep is done, the estimated distance is calculated based on the phase on all the channels, using different frequencies, and the added phase for each channel, which gives out a resulting distance. 

    Of course, in a world that is not ideal, you will have some noise in your measurements, so the result is not 100% accurate. But the sample will also contain a rating saying whether this sample is good or not. You can see this is being checked in ranging_data_get_complete_cb() in the sample.

    If the 

    cs_de_quality_t quality = cs_de_calc(&cs_de_report);

    is 

    CS_DE_QUALITY_OK

    it gives a quality stamp for that sample, but if it is not, then you can discard the sample.

    Best regards,

    Edvin

  • Thank you very much,Edvin,

    What I can confirm is that each channel indeed reports only one sample, as I noticed that in cs_de_report_t, the iq_tones field in cs_de_iq_tones_t is related to the number of antennas. That is, each antenna has up to 80 IQ data points. I believe most of the work has already been implemented in the SDK, and we only need to use a single IQ value to represent the received phase of a given signal.

    Best regards,
    Cheng

Related