Hello All, Although the X4 chip outputs baseband data, I would like to get higher resolution measurements by demodulating the raw RF data to complex IQ form for further processing. Any ideas on how to do this? I am using an X4M300 in XEP mode, so I can already get the raw RF data. I believe it will involve a complex demodulator off-chip if the X4 can't return that data, however, I'm not too sure how to implement this with pulsed radar since most of the examples are for LFM pulsed radar. Thank you

Hi Jameson, the X4 can deliver complex baseband data. But this does not increase the resolution. It is just a way to remove redundant information from the modulated RF and to save memory. Actually the X4 samples the raw RF data and downconverts it numerically. You can do this on your own but I see no advantage in this. Cheers Georg

If there is no resolution benefit, why is the RF data provided for the X4 Chip? Are there any advantages to using it?

This should be answered by an X4 expert. The only advantage I can think of is to relieve the X4 from doing the downconversion, in order to have more capacity for other time critical tasks.

The downconversion is performed in dedicated digital logic in an asic. You cannot use the X4 to perform other tasks if relieved of the downconversion. It is easy do to downconversion yourself, we can give you the equations. What is the advantage of doing it yourself ? Well , you can choose another set of filter coefficients or another decimation ratio if desired. Some also prefer doing signal processing directly on the RF data. In the previous platforms, we only provided RF data, so there are some legacy there. Personally I would use the downconverted data, we provide the alternative so you can choose for yourself. regards, Sigurd

Hi Georg Michel, Yes you are wright, I am not an X4 expert. My apologies if my answer is wrong. B.R Chouaibou.

Thank you very much, Sigurd. That's very helpful to know. I would indeed like the equations. I greatly appreciate the work that Xethru has put into simplifying the data processing. I would just like to do a sanity check on the data I'm getting and to help better my understanding. Best, Jameson

How is the sub-mm accuracy achieved as claimed: "Novelda’s XeThru X4 is an ultra wide band (UWB) impulse radar chip. It provides product developers with sub-mm movement sensing accuracy at distances from 0 to 25 meters depending on target size" Can you explain or direct me a white paper that details how this sub-mm movement is detected using the I/Q data stream. Thanks, Jeff

I would also like to know this answer. I was only able to find this white paper directly related to Novelda's SoC: https://ieeexplore.ieee.org/document/8106658/ However, there are other research papers on IEEE Xplore that are not open access.

Hello, Is it possible to detail how to pick another filter coefficients or decimation ration? Also, how is the I/Q actually generated since there is just A/D conversion and no I/Q mixer in the X4 chip? Thanks, Jeff

Hi Jeff, The decimation factor of 8 is fixed. As Sigurd wrote, the downconvertion is done digitally by special HW. We provide filters for the supported frequency bands, which are automatically configured. Not sure what you want to achieve, but sounds like off-chip downconvertion and decimation is your option. Best, Olav

Olav, Can you provide us with algorithm or code for downconversion and decimation? Or possibly a white paper describing the method. We would like to experiment with the decimation ratio to investigate the accuracy of the phase. We have been able to quantify the phase of the I/Q signal appears to have a resolution of 20mm per 360 degrees of I/Q phase. The phase direction does correlate with the target movement and does wrap around properly. Is this in agreement with your measurements? Only problem is the phase appears noisy. Could this be improved by a boxcar average on each bin in the I/Q data? Thanks, Jeff

Here is pseudo code for this: float fc = carrierFreq; // init demodulation vectors for (uint32_t i=0; i<numSamples; i++) { demod_I_ =cos(2*pi_f* fc/Fs * i); // make i-channel demodulation vector. Must be equal to length of frame demod_Q_ = -sin(2*pi_f* fc/Fs * i); // make q-channel demodulation vector. Must be equal to length of frame } Put your i-channel rf-data in float *ichannel and qchannel in float *qchannel Now to create i-channel do ichannel * demod_I, qchannel*demod_Q If your decimation factor = 1 you dont need to worry about lowpass filter I hope you get the idea. This is just normal demodulation -sigurd-

On second thought, you must have a lowpass filter that removes the mirror band that is shifted to -2fc. You also want a Lowpass filter to remove other unwanted highfrequency characteristics that might linger. My point with the need for lowpass filter was that when doing downsampling, you also want to avoid having noise at higher frequencies being downfolded into your baseband , thus increasing the noisefloor. Sorry for the glitch in the matrix

Hi jeff, Here's another example: 1. Read RF frame 2. Multiply frame with complex sine with frequency = to transmitted pulse center frequency 3. Low pass the result Python example: Code: # frame = radar rf frame fc=7.29e9 # lower PG setting fs = 23.328e9 csine = np.exp(-1j*fc/fs*2*np.pi*np.arange(len(frame))) cframe = frame * csine # Lowpass filter the result Here's the frequency response from the different steps, I used a 26 taps hamming window for the low pass fitlering:

Thank you very much Olav and Sigurd, *With respect to Olav's post. The code shows fs=23.238e9, but in the X4 datasheet states 23.328 Ghz sampling rate. Is this an error in the code, or the datasheet? *Sigurd, what is the pi_f in your code? Is that PI * Fc, or Pi * Fs? Much Appreciated, Jameson

pi_f = float pi (as opposed to double pi). ie pi_f is a 32-bit floating point constant for pi. The pseudo code I showed you was C++ code we used for the X2 platform. With the X4 the baseband downconversion is performed in the chip itself. Olav's python code (with slight correction of the sampling rate Fs) is for the x4. If you do it in scripted language like matlab or python it is more easy to just express the complex demodulation like Olav does in his example. Have fun