Announcements

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
lock attach
Attachments are accessible only for community members.
Frank-W
Level 2
Level 2
25 sign-ins 10 replies posted 5 questions asked

Hello,

I just did a simple test of BGT60TR13C with me sitting still right in front of the radar sensor (~50 cm). I have collected the data for 1 min and I took a window of 3000 consecutive chirps for a show in the attachment. The chirp repitition time is 5 ms.

I did range FFT on the fast time and then calculated the phase diff along the slow time for the target range bin (the highest peak) for one of the Rx antennas. What I found is that the range fft ampltiude is changing significantly over the chirps. 

1) With both me and the radar being static and well aligned , theoretically the range fft amplitude of the target/peak range bin should be quite stable, right? 

2) Theoretically the phase diff should also be relatively stable between different chirps. But you can see that there are a bunch of spikes in the phase diff plot. Interestingly, the spikes locate exactly at where the range fft amplitude is relatively low (down to 0.002 almost close to noise level). So my hypothesis is that some chirps didn't capture the target and its motion at all ( the ones with low range fft amplitude) even though the sensor's boresight points to my body. Therefore, the phase information they carries is quite random that leads to the phase diff spikes... Have you also observed that in your internal test? What can we do to avoid that?

Note that I have done the tests many times with different distances...And we've observed the same pattern for all Rx antennas.

Look forward to your insights.

0 Likes
1 Solution
Honey_D
Moderator
Moderator
Moderator
5 comments on blog 50 likes received 250 replies posted

Hello @Frank-W ,

  1. The board is equipped with advanced capabilities that allow it to detect even the smallest movements, such as eye blinking or chest movement due to breathing rate. As a result, even submillimeter motions can be detected. The BGT60TR13C is specifically designed to ensure the accurate detection of these types of movements, which result in spikes on the amplitude of the range bin. Reference: https://www.infineon.com/cms/en/product/evaluation-boards/demo-bgt60tr13c/#!?fileId=5546d4627a5b3d08... 

  2. The E-Plane radiation pattern exhibits an inherent phase shift of 25-30 degrees, which is more prominent for electric fields than for magnetic fields. This is due to the close proximity of the antennas in the package. However, this effect can be corrected by using a calibration matrix that can be generated using a method described in an article.

    Analysis of the magnitude spectrum of the IF signal will reveal multiple tones, with each frequency being proportional to the range of the target from the radar. Essentially, the location of the peaks in the spectrum corresponds directly to the range of the targets. Additionally, by measuring the phase difference across two consecutive chirps, the velocity of the targets can be estimated.

    For more information on phase noise observed in the plot, please refer to Section 5.1 of the app note. Section 5.2 of the same document provides an explanation of the radiation pattern and the field of view of the sensor.

Hope this helps!

Best Regards,
Honey

View solution in original post

0 Likes
12 Replies
Honey_D
Moderator
Moderator
Moderator
5 comments on blog 50 likes received 250 replies posted

Hello @Frank-W ,

  1. The board is equipped with advanced capabilities that allow it to detect even the smallest movements, such as eye blinking or chest movement due to breathing rate. As a result, even submillimeter motions can be detected. The BGT60TR13C is specifically designed to ensure the accurate detection of these types of movements, which result in spikes on the amplitude of the range bin. Reference: https://www.infineon.com/cms/en/product/evaluation-boards/demo-bgt60tr13c/#!?fileId=5546d4627a5b3d08... 

  2. The E-Plane radiation pattern exhibits an inherent phase shift of 25-30 degrees, which is more prominent for electric fields than for magnetic fields. This is due to the close proximity of the antennas in the package. However, this effect can be corrected by using a calibration matrix that can be generated using a method described in an article.

    Analysis of the magnitude spectrum of the IF signal will reveal multiple tones, with each frequency being proportional to the range of the target from the radar. Essentially, the location of the peaks in the spectrum corresponds directly to the range of the targets. Additionally, by measuring the phase difference across two consecutive chirps, the velocity of the targets can be estimated.

    For more information on phase noise observed in the plot, please refer to Section 5.1 of the app note. Section 5.2 of the same document provides an explanation of the radiation pattern and the field of view of the sensor.

Hope this helps!

Best Regards,
Honey

0 Likes
Frank-W
Level 2
Level 2
25 sign-ins 10 replies posted 5 questions asked

Hello Honey,

The materials that you put up above are already known to me. I am aware of a phase shift of 25 degrees on E plane. I took that into the consideration when performing DBF. But what I showed in my previous post is a different story and it involved only with one antenna. The phase diff is the difference between phases of two consecutive chirps at the target range bin, along the slow time axis. To me, it doesn't make sense to see such big spikes in phase diff plot given that both the sensor and the target are stationary. Somehow, these phase diff spikes are strongly correlated to the low range fft amplitude (at the target range bin).

With respect to section 5.1 and 5.2, I don't see that explain the issue. The center frequency in my waveform configuration is 59 GHz and bandwidth is 1 GHz. 

Best regards,

/Frank

 

0 Likes
Honey_D
Moderator
Moderator
Moderator
5 comments on blog 50 likes received 250 replies posted

Hello Frank,

Could you provide additional information about the testing environment and setup to help me better understand your issue?

Best regards,
Honey

0 Likes
lock attach
Attachments are accessible only for community members.

Hello Honey, 

The configuration is as below and the test environment is illustrated as the attached picture. Basically the radar points to the chest of a person that is 0.5 m away. Both the sensor and the person are stationary. I did a log for over a min and get the ADC data for post-processing.

My processing steps are 

  1. stack up all chirps data. As you know the ADC raw data is like 3(antennas)*30(frames)*256(chirps)*100(samples) and I reshaped it to be 3*7680*100 as my duration between chirps is fixed (5 ms)
  2. Take a window of 3000 chirps for one of the antennas. The dimension of array becomes 1*3000(chirps)*100(samples per chirp)
  3. Apply range fft and get the peak range bin at bin 7 (for example)
  4. Take out all the phase information of bin 7 along the slow time axis. The array shape is 3000. Each element contains the amplitude and phase information of the target range bin/frequency.
  5. Then I calculate the phase diff between adjacent chirps. the array dimension is 2999
  6. Plot out phase diff and amplitude in one plot.
            cfg = {
                'sample_rate_Hz'1_000_000,       # 1MHZ
                'rx_mask'7,                # activate all rx antennas
                'tx_mask'1,                      # activate TX1
                'if_gain_dB': 33,                  # gain of 33dB
                'tx_power_level'31,              # TX power level of 31
                'start_frequency_Hz'58.5e9
                'end_frequency_Hz': 59.5e9,          
                'num_chirps_per_frame'256,       # 256 chirps per frame
                'num_samples_per_chirp'100,      # 100 samples per chirp
                'chirp_repetition_time_s'5e-3,   # 5ms
                'frame_repetition_time_s'1.28,  
                'mimo_mode''off'                 # MIMO disabled
            }
 
For the issue description, please check my first post. Hopefully my description is clear enough.
0 Likes
Honey_D
Moderator
Moderator
Moderator
5 comments on blog 50 likes received 250 replies posted

Hello @Frank-W ,

The phase disturbance can be caused by any surrounding object or anything present in the actual environment, please make sure that there are no disturbance.  Additionally, can you confirm whether or not you made any changes in the code? If yes, can you share the code? Also, please check out the RDK code examples about processing the raw data 

Best regards,
Honey

0 Likes
lock attach
Attachments are accessible only for community members.

Hello Honey,

Yes. I am quite familiar with your RDK python examples. I did logging first and then I do postprocessing afterwards. It is a bit cumbersome to share the code here.

It seems your Infineon team is currently developing a vital sign demo based on the information in the forum. Did you notice anything similar to what I presented above? Regarding your suspect of phase disturbance by surrounding objects, I would say it is both yes and no. Please note that the fft amplitude for the target bin is so low when the phase diff peak occurs. It implicates that it detects something with very weak reflection rather than my body, even though my body is right in front of the radar sensor.

Two of your colleagues wrote a paper named "Improved Contactless Heartbeat Estimation in FMCW Radar via Kalman Filter Tracking" where they showed the quality data and bad data examples in IQ (see the attachment). In my test, most time it shows bad data example as the FFT amplitude (sqrt(I*I + Q*Q)) fluctuates a lot. Only occasionally I got one quality data where I positioned my heart position exactly aligned with the radar in quite close distance...This kind of setup doesn't sound promising in any of the practical application.  I want to get some advice to address this issue before switching to another hardware supplier.

Best,

/Frank

0 Likes
Honey_D
Moderator
Moderator
Moderator
5 comments on blog 50 likes received 250 replies posted

Hello @Frank-W ,

Can you please provide the IQ plot of the shown measurement sequence?

Best regards,
Honey

0 Likes
lock attach
Attachments are accessible only for community members.
Frank-W
Level 2
Level 2
25 sign-ins 10 replies posted 5 questions asked

Hello Honey,

With the below configuration and me being stationary and super close to the radar (like 12 cm ish), I got attached range fft heat map and IQ plot for 10 frames. As you can see, the fft amplitude at peak bin is not that consistent. For some segments, it is strong. But there are also segments with very weak energy. If you look at the attached IQ plot, it implicates the same information that the ampltiude is not consistent at all. The radius of circles are changing over time...With a farther distance, the IQ plot is even worse like a ball of wool.

I believe I've so far provided enough information for your team to reproduce the issue. My questions are quite simple. Is it reproducible? Is what I've observed above the expected performance of this radar?

 

 
    chirp = FmcwSequenceChirp(
            start_frequency_Hz=59_133_931_281,  # start frequency: 59.133931281 GHz
            end_frequency_Hz=61_133_931_281,  
            sample_rate_Hz=1e6,  # ADC sample rate of 1MHz
            num_samples=100,  # 100 samples per chirp
            rx_mask=7,  # RX antenna 1 activated
            tx_mask=1,  # TX antenna 1 activated
            tx_power_level=31,  # TX power level of 31
            lp_cutoff_Hz=500000,  # Anti-aliasing cutoff frequency of 500kHz
            hp_cutoff_Hz=80000,  # 80kHz cutoff frequency for high-pass filter
            if_gain_dB=33,  # 33dB if gain
        )
   
    num_chirps=256
   
    config = FmcwSimpleSequenceConfig(
        frame_repetition_time_s=1.28,  # Frame repetition time
        chirp_repetition_time_s=0.005,  # Chirp repetition time
        num_chirps=num_chirps,  
        tdm_mimo=False,  # MIMO disabled
        chirp=chirp
    )

    with DeviceFmcw() as device:
        print(f"Radar SDK Version: {get_version_full()}")
        print("Sensor: " + str(device.get_sensor_type()))

        # set device config for presence sensing
        sequence = device.create_simple_sequence(config)
        device.set_acquisition_sequence(sequence)
 

        cfg = {'sample_rate_Hz': chirp.sample_rate_Hz,
                   'rx_mask': chirp.rx_mask,
                   'tx_mask': chirp.tx_mask,
                   'if_gain_dB': chirp.if_gain_dB,
                   'tx_power_level': chirp.tx_power_level,
                   'start_frequency_Hz': chirp.start_frequency_Hz,
                   'end_frequency_Hz': chirp.end_frequency_Hz,
                   'num_chirps_per_frame': sequence.loop.sub_sequence.contents.loop.num_repetitions,
                   'num_samples_per_chirp': chirp.num_samples,
                   'chirp_repetition_time_s': sequence.loop.sub_sequence.contents.loop.repetition_time_s,
                   'frame_repetition_time_s': sequence.loop.repetition_time_s,
                   'mimo_mode': 'off',
                   'lp_cutoff_Hz': chirp.lp_cutoff_Hz,
                   'hp_cutoff_Hz': chirp.hp_cutoff_Hz}
       
        chirp_loop = sequence.loop.sub_sequence.contents
        metrics_d = device.metrics_from_sequence(chirp_loop)

        metrics = {'range_resolution_m': metrics_d.range_resolution_m,
                       'max_range_m': metrics_d.max_range_m,
                       'max_speed_m_s': metrics_d.max_speed_m_s,
                       'speed_resolution_m_s': metrics_d.speed_resolution_m_s,
                       'frame_repetition_time_s': sequence.loop.repetition_time_s,
                       'center_frequency_Hz': metrics_d.center_frequency_Hz}
       
        log_path = 'log/test_3.h5'

        if os.path.exists(log_path😞
            os.remove(log_path)
        handle = RadarLogHandle(log_path, cfg, metrics)

        for frame_number in range(20😞  # for each frame
            frame_contents = device.get_next_frame()
            frame_data = frame_contents[0]

            distance_data_all_antennas = []
            distance_peak_m_4_all_ant = []

            antenna_samples = frame_data[:, :, :]
            handle.add(antenna_samples)

            print(device.get_temperature())
       
        handle.save_log()
0 Likes
Honey_D
Moderator
Moderator
Moderator
5 comments on blog 50 likes received 250 replies posted

Hello @Frank-W ,

Thanks for sharing the information, we will get back to you as soon as possible about the query in detail

Best regards,
Honey

0 Likes
Honey_D
Moderator
Moderator
Moderator
5 comments on blog 50 likes received 250 replies posted

Hello @Frank-W ,

A minimum distance of around 30 cm should be kept, as for closer ranges, multipath and double reflections have more impact and disturb the signal. In principle the shown IQ data doesn't look bad. The IQ data as shown in the paper should be part of a circle. For an accurate phase/arc-tangent evaluation, it's important that this circle is centered around the origin. For IQ offset compensation please refer to other relevant paper as well on similar topic.

It seems that the example provided in the data was not entered, but that may not be an issue if subsequent signal processing takes care of it. However, since the complete data for longer measurement durations is not a perfect circle, we suggest processing the data in sliding windows and applying circle fit and correction on individual data segments. This step is crucial for accurate data analysis.

The reasons for such a changing behavior over time leading to the "non-empty" circle as shown in the provided IQ plot are diverse (like the above mentioned multipath and double reflections, varying phase noise of the chip) and come from slight position changes of the target. If then part of the IQ data is within the ideal circle close to the origin or even "going through the origin", the amplitude is obviously minimal and the phase jumps simultaneously quite high. Thus, the circle has to be re-fitted and data corrected for each data window, and if in a window the data is still too far off the ideal circle or even close to the origin, we identify this data window/segment as "bad data" in our paper and discard this data part.

Hope this helps!

Best regards,
Honey

0 Likes
lock attach
Attachments are accessible only for community members.

Hello Honey,

Thank you for the long reply.

I agree with your statement of the close range disturbance. The new attached images is plotted from a log where the target is around 68 cm from the radar. It is common to see a ghost peak around bin 4.

Yes, in our processing pipeline, we do have the steps like data in sliding windows, applying circle fit and correction on individual data segments...However, those didn't help in mitigating the instability issues in vital sign detection. Thus, we turned our suspicion to the low range fft ampltiude segments and started this conversation.

In the last part, you stated  "if in a window the data is still too far off the ideal circle or even close to the origin, we identify this data window/segment as "bad data" in our paper and discard this data part.". The problem is that 95% of the data needs to be discarded by this criteria. If you take a second look on the newly attached image,  amplitude at the peak bin 18 column is not very stable/consistent by any means even though I have leaned against the chair to ensure my body is as stationary as possible. In some segments like 500 th chirp or 1800th chirp ish, the amplitude is very strong (IQ radius is quite large). But in others like 2500th, it almost detects nothing (close to IQ origin). It is very fluctuating and inconsistent...And this is what I've observed the "common behavior" in more than 40 logs (with different distance)... Have you done any sensor test recently to verify my observations? (I only have one sensor at hand and I am not sure if it is related to any hardware flaws. But it seems less likely )

Best regards,

/Frank

 

0 Likes
Honey_D
Moderator
Moderator
Moderator
5 comments on blog 50 likes received 250 replies posted

Hello @Frank-W ,

Based on the information provided, it appears that investigating the issue solely from the plot may be challenging. It would be helpful to have IQ plots of the full data set at bin 18, as well as the circle-compensated plot of the "bad segment" and a good segment. Generally, bad segments should be the exception rather than the norm. It's unlikely that there is a hardware issue as everything else seems to be functioning properly.  The measurement scenario also seems to be correct here.

Best regards,
Honey

0 Likes