Continue to Site

Welcome to our site!

Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

  • Welcome to our site! Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

Signal processing of an IVQ-3005 Radar Module

Status
Not open for further replies.
I'm going to use that module for detecting range, velocity and angle, for that radar.**broken link removed**

So I have read a lot of radar techniques and I'm going to use the mode FMCW, and the modulated signal will be a sawtooth (chirps).

I have 4 signals I1, Q1, I2, Q2.

I need to confirm my understanding of the signal processing algorithms

First steps.

  • I1, Q1, I2, Q2 to ADC
  • Add I1 + I2, Q2 + Q2
  • Multiply the result from 2 by conjguate of 2
  • Apply FFT on the rows of the 2D signal I/Q to get the range
  • Apply fft on the cols of the 2D signal I/Q to get the velocity
  • Apply a third FFT but don't know on which block?
  • Find peaks of each FFT block to get the Range, Velocity, Range.
Would someone tell me if the steps are correct or not? Would someone explain what considerations should I take care of?



According the answer, I wrote a basic algorithm, hope that's correct

/* FFT length must be a power of 2 */
#define FFT_LENGTH 16
#define M 4 /* must be log2(FFT_LENGTH) */
#define ECHO_SIZE 12

void main()
{
int i,j,k;
float tempflt,rin,iin,p1,p2;
static float mag[FFT_LENGTH];
static COMPLEX echos[ECHO_SIZE][FFT_LENGTH];
static COMPLEX last_echo[ECHO_SIZE];

/* read in the first echo */
for(i = 0 ; i < ECHO_SIZE ; i++) {
last_echo.real = getinput();
last_echo.imag = getinput();
}

// Read in the Second channgel
// Add first channel I/Q to second channel.


for(;;) {
for (j=0; j< FFT_LENGTH; j++){

/* remove stationary targets by subtracting pairs (highpass filter) */
for (k=0; k< ECHO_SIZE; k++){
rin = getinput();
iin = getinput();
echos[k][j].real = rin - last_echo[k].real;
echos[k][j].imag = iin - last_echo[k].imag;
last_echo[k].real = rin;
last_echo[k].imag = iin;
}
}
/* do FFTs on each range sample */
for (k=0; k< ECHO_SIZE; k++) {

fft(echos[k],M);

for(j = 0 ; j < FFT_LENGTH ; j++) {
tempflt = echos[k][j].real * echos[k][j].real;
tempflt += echos[k][j].imag * echos[k][j].imag;
mag[j] = tempflt;
}
/* find the biggest magnitude spectral bin and output */
tempflt = mag[0];
i=0;
for(j = 1 ; j < FFT_LENGTH ; j++) {
if(mag[j] > tempflt) {
tempflt = mag[j];
i=j;
}
}
/* interpolate the peak loacation */
p1 = mag - mag[i-1];
p2 = mag - mag[i+1];
sendout((float)i + (p1-p2)/(2*(p1+p2+1e-30)));
}
}
 
well, i can see from the search results that this question has been plastered all over the internet. unfortunately, i can't find a user guide for this device, which means in order to know what data to put into whatever control registers, you will likely need an NDA for them to give out anything more than the incomplete data in the "data sheet".
 
Status
Not open for further replies.

New Articles From Microcontroller Tips

Back
Top