- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

Hi,

I am using the BGT60TR13C for vital sign extraction and I saw in other questions in the forum that the BGT60TR13C only outputs the I signal of the radar.

I tried to use the progression of each complex frequency component over time (chirp-to-chirp) as an IQ signal for each frequency component, as you suggested. But it is not working and I cannot extract meaningful information. For comparison, I did manage to extract specifically respiration rate using only the amplitude data in the output.

I would like your help to better understand how to extract phase from the output data and detect small vibrations.

Thank you!

Solved! Go to Solution.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

Hello @inbar214,

Apologies for the delayed response!

In an ideal radar system, the radial movement of a target over λ/2, should result in a complete circle movement. However, due to common offset, amplitude, and phase errors, the complex representation of such a target movement is distorted to a tilted and offset ellipse. An ellipse fitting algorithm can be employed to estimate the ellipse shape and reconstruct the movement data onto the unit circle. Subsequently, arc-tangent demodulation can be used to calculate relative target displacements. Optionally, the displacement signal can be subjected to bandpass filtering. A peak search or FFT can then be applied to the filtered displacement signal for analysis.

Best Regards,

Pugitha

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

Hello @inbar214,

Here is the process for deriving the phase from BGT60TR13C: Perform the Doppler FFT analysis on the received radar signal to obtain the complex-valued FFT output, which contains both magnitude and phase details associated with the frequency components. Each complex value in the FFT output represents a frequency component and includes both magnitude and phase information in a polar representation. Extract the phase information from the complex-valued FFT output by directly computing the phase angle associated with each frequency component, representing the phase information at the frequency in the complex signal. This approach is already implemented in the distance algorithm available in the Radar Development Kit. You may refer to the same in RDK for more details.

Best Regards,

Pugitha

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

Hi @Pugitha_N ,

Thank you for your answer!

I used the rdk in python to get the rangle-doppler map for each frame.

After I use the DopplerAlgo you supplied, for a specific frame and antenna I have a matrix of range on one axis and velocity in the other axis, and I can see the target as a specific circle in the middle of the map.

You're saying that I need to take a specific range bin, then take the angle with np.angle to get the phase? and then I can plot the phase vs time (when the time is the chirp repetition time)? Or do I need to take the specific point of the target and then plot phase vs time when time is the frame rate?

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

Hello @inbar214,

Certainly, you can utilize np.angle() with the target peak as an argument to obtain the phase.

Best Regards,

Pugitha

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

Hi @Pugitha_N ,

I have tried this but the phase I am getting is very noise and has a significant drift.

I couldn't get any valuable information like this, do you have any suggestions why that might happen?

Thank you,

Inbar

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

Hi @Pugitha_N ,

I am attaching an example. I recorded data with 512 chirps and 128 samples per chirp. I used your algorithms to get the range FFT and then I found the peak distance and took the column with the specific peak distance (range bin). Then I used np.angle to calculate the phase and plot it over 10 frames (in blue). I also used np.unwrap on each frame (in orange) or on the concatenated array of 10 frames (in green).

In all of them I have these jumps and I cannot extract anything meaningful.

I would appreciate your help on this matter.

Thank you,

Inbar

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

Hello @inbar214,

I hope you have performed phase computations within the 'DopplerAlgo' class in the 'compute_doppler_map' method. If feasible, could you share the relevant code?

Best Regards,

Pugitha

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

Hi @Pugitha_N ,

Do you mean to perform np.angle and np.unwrap after the first fft (the range fft, fft1d)? and then do the doppler fft and then what?

What I did in the plot I sent you is take only the range fft (based on your provided algorithm), then take np.angle and np.unwrap of the max range column in each frame, and concatenate it for each frame to make one vector of phase vs chirps.

I can share the full code if it helps.

Thank you,

Inbar

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

Hello @inbar214,

- Utilize np.fft.fft() to produce a complex values array, containing the frequency components along with their respective phase information.
- Subsequently, apply np.angle() to the index closest to the desired frequency. I recommend directly mapping the magnitude and phase without unwrapping.

Best Regards,

Pugitha

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

Hi @Pugitha_N ,

Do you mean to do it on the raw datacube acquired from the radar or on the data after using the DopplerAlgo you provided?

Thank you,

Inbar

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

Hello @inbar214,

Following the completion of the range FFT in the Doppler algorithm, where np.fft.fft() is utilized, the next step involves incorporating np.angle().

Best Regards,

Pugitha

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

Hi @Pugitha_N ,

Yes, that is what I did. I took only your calculation of the range fft and then calculated the np.angle for the range with the max amplitude and that is the plot I attached previously.

Do I need to incorporate the doppler FFT on the angle as well? and if not, you can see in the plot that the phase without unwrapping is very noisy, I can't get any valuable information from it. All I did was to sit in front of the radar and breath, it should not be that noisy.

Thank you,

Inbar

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

Hello @inbar214,

Apologies for the delayed response!

In an ideal radar system, the radial movement of a target over λ/2, should result in a complete circle movement. However, due to common offset, amplitude, and phase errors, the complex representation of such a target movement is distorted to a tilted and offset ellipse. An ellipse fitting algorithm can be employed to estimate the ellipse shape and reconstruct the movement data onto the unit circle. Subsequently, arc-tangent demodulation can be used to calculate relative target displacements. Optionally, the displacement signal can be subjected to bandpass filtering. A peak search or FFT can then be applied to the filtered displacement signal for analysis.

Best Regards,

Pugitha

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

Hi @Pugitha_N ,

Thank you for your response.

The ellipse fitting algorithm should be employed for each frame? Meaning taking one frame, doing range fft and then one column for the appropriate range, taking the I and Q from the fft and fitting an ellipse?

Or should it be for a longer vector (column range combined to one long vector over several frames)?

I'm attaching photos of the I vs Q plot after range fft for one frame and multiple frames.

Thank you,

Inbar

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

Hello @inbar214,

The decision of whether to employ the ellipse fitting algorithm for each frame independently or for a longer vector (combining columns of range data over several frames) depends on the specific requirements. As vital signs are expected to change rapidly from frame to frame, employing the ellipse fitting algorithm for each frame can capture these dynamic changes more effectively and allows for real-time monitoring of vital signs. However, some noise may be anticipated in this approach.

Best Regards,

Pugitha