Procesamiento de señal de un módulo de radar IVQ-3005

0

Voy a usar ese módulo para detectar rango, velocidad y ángulo, para ese radar. enlace

He leído muchas técnicas de radar y usaré el modo FMCW, y la señal modulada será un diente de sierra (chirridos).

Tengo 4 señales I1, Q1, I2, Q2.

Necesito confirmar mi comprensión de los algoritmos de procesamiento de señales

Primeros pasos.

  • I1, Q1, I2, Q2 a ADC
  • Agregar I1 + I2, Q2 + Q2
  • Multiplica el resultado de 2 por conjuro de 2
  • Aplique FFT en las filas de la señal 2D I / Q para obtener el rango
  • Aplique fft en las columnas de la señal 2D I / Q para obtener la velocidad
  • Aplique un tercer FFT pero no sabe en qué bloque?
  • Encuentre los picos de cada bloque FFT para obtener el Rango, Velocidad, Rango.

¿Alguien me diría si los pasos son correctos o no? ¿Alguien explicaría qué consideraciones debo tener en cuenta?

De acuerdo con la respuesta, escribí un algoritmo básico, espero que sea correcto

    /* 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[i].real = getinput();
         last_echo[i].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[i] - mag[i-1];
          p2 = mag[i] - mag[i+1];
          sendout((float)i + (p1-p2)/(2*(p1+p2+1e-30)));
        }
      }
    }
    
pregunta Ahmed Saleh

1 respuesta

2

La salida de un radar FMCW con modulación de rampa lineal (triángulo u ondas de diente de sierra) es un grupo de tonos, uno por objetivo. La frecuencia de cada tono proporciona el rango del objetivo correspondiente, y la velocidad a la que cambia la frecuencia da el rango de velocidad (velocidad radial). Para realizar estas mediciones, simplemente puede agregar los dos canales receptores juntos.

Para medir AOA (ángulo de llegada), necesita comparar los ángulos de fase de los dos canales del receptor, según se deriva de los datos I y Q. Este procesamiento también debe realizarse para cada tono de destino. Tenga en cuenta que la fase se "envuelve" en ángulos mayores de aproximadamente ± 27 °, según la hoja de datos.

Una FFT en un bloque de datos lo ayudará a identificar los tonos de destino. Pero no sé lo que tiene en mente cuando aplica una segunda FFT.

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas