Is there a way of outputting the sampling rate from the X2M200 module? If not, what's an approximate value of the X2 chip sampling rate?

Found it, it's around 39 GSps. How would one go about calculating the minimum detectable difference in range? I came up with the formula \Delta d_{min} = c / (2 f_s), but this gives a value of around 4mm, but as demonstrated in the respiration demos, the sensor is able to detect sub-millimeter movement. How is this possible?

Hi David, First of all, I think you are making a confusion between sampling rate of the RF signal and the UWB pulse width. The sampling rate will help in the correct signal sampling based on the Nyquist criteria, the pulse with will give you time of flight. The minimum detectable range is based on the Heisenberg's uncertainty (You can't simultaneouly be well localized both in time and frequency). As you pulse is UWB, your minimum pulse widht is based on this principle. for 1ns pulse you will have a minimum of 30 cm between your radar and your target to prevent range ambiguty problem. Best regards, Chouaibou.

I was actually trying to calculate the minimum differential range that the radar can detect. For example, if you have an obstacle 1m from the radar, what's the minimum distance by which you can move the obstacle before the radar will detect that it moved?

Hi Davide, The range accuracy is mainly dependent on the SNR. The pulse is sampled at higher frequencies than the Nyquist criterion. I will not go into theory or detection methods at this time, but i made a small example in python for you. I will sample two pulses, where the second one is delayed by 20 ps, which is less than this system's sampling rate, fs = 23.238 GHz. Consider the following python code: Code: from pylab import * ## Pulse generator # Center frequency fc = 7.29e9 # Pulse duration tau = 0.67e-9 ## Sampler # Sampling rate fs = 23.238e9 # Number of bins in frame nbins = 64 # delay to pulse t0 = 1.3e-9 t1 = t0 + 20e-12 # Time array t = np.arange(0, nbins / fs, 1 / fs) # Sample frames frame1 = exp(-((t - t0) / tau) ** 2) * cos(2 * pi * fc * (t - t0)) frame2 = exp(-((t - t0) / tau) ** 2) * cos(2 * pi * fc * (t - t1)) # Plot frames plot(t*1e9, frame1, 'b-x', label='t0') plot(t*1e9, frame2, 'r-x', label = 't0 + %g ns'%((t1-t0)*1e9)) legend() grid() xlabel("Time (ns)") ylabel("Amplitude") _=xticks(t[1::2]*1e9) The time difference of the two pulses can be used to calculate the distance or to analyze movement of the object. One example of calculating the distance is to downconvert and use the amplitude + phase difference.

Hi Olav, Following your answer to Davide post, I would like to know why have choosen 64 bins in your example as X2 radar chip has 256 samplers for a default distance of 1 meter. B.R Chouaibou.

Simply for visibility in the plot, you can change the parameters in the script if you need the parameters to be similar to X2 or X4.

Hello all, How can I calculate the breath frequency to give me a number through X2M200 ? If anyone can submit for me a code for that, I will be so thankful for him. Regards ,

Hi MohammadHajj, Please find below the link for the latest CPP/PYTHON/MATLAB examples for ModuleConnector based XeThru moudule development : https://github.com/xethru/ModuleConnector-Examples You can modify python by loadin respiration profile (x2m200.load_profile(XTS_ID_APP_RESPIRATION_2)), and reading respiration data message (rdata = x2m200.read_message_respiration_sleep()) and then retrieve the RPM or disdance from the message. BR, Chouaibou.