paint-brush
Aprendizaje profundo: dispositivos perimetrales con radares mmWave FMCW Parte 1: Procesamiento de señalespor@owlgrey
1,456 lecturas
1,456 lecturas

Aprendizaje profundo: dispositivos perimetrales con radares mmWave FMCW Parte 1: Procesamiento de señales

por Dmitrii Matveichev 10m2024/04/10
Read on Terminal Reader

Demasiado Largo; Para Leer

El radar FMCW de ondas milimétricas ofrece una detección versátil independiente de las condiciones ambientales, ideal para dispositivos y aplicaciones como la detección humana sin cámaras. Eficiente y rentable, analiza los cambios de frecuencia de los chirridos para medir la distancia, la velocidad y la dirección, lo que promete importantes avances en la electrónica de consumo y la tecnología Wi-Fi.
featured image - Aprendizaje profundo: dispositivos perimetrales con radares mmWave FMCW Parte 1: Procesamiento de señales
Dmitrii Matveichev  HackerNoon profile picture

El radar de onda continua de frecuencia modulada de onda milimétrica (FMCW) funciona emitiendo y detectando ondas electromagnéticas de radiofrecuencia (RF). Debido a sus propiedades únicas, esta tecnología ofrece varias ventajas para sistemas y aplicaciones interactivos. Funciona independientemente de las condiciones de iluminación, el ruido ambiental o el clima, y ofrece capacidades de detección rápidas y precisas.


Además, puede penetrar diversos materiales, lo que lo hace ideal para integrarse en diversos dispositivos y entornos. El sensor puede construirse como una pequeña unidad semiconductora de estado sólido en frecuencias de RF de ondas milimétricas; esencialmente, un chip de radar. Este chip es compacto, consume poca energía, no tiene piezas móviles y puede producirse de forma rentable en grandes cantidades.


El radar mmWave FMCW se puede utilizar en muchos dispositivos, como:

  • dispositivos de realidad virtual (VR)
  • tecnología portátil, ropa inteligente
  • Dispositivos de Internet de las cosas (IoT)
  • controladores de juego
  • Electrónica convencional como teléfonos inteligentes, tabletas y computadoras portátiles.


Además, los radares mmWave FMCW se pueden utilizar junto con modelos de aprendizaje profundo para resolver diversas tareas:

  • detección de presencia humana
  • conteo, localización y seguimiento de personas
  • clasificación de las actividades humanas (la persona duerme/se sienta/camina/practica deportes, etc.)
  • reconocimiento de gestos
  • reconocimiento de lugar
  • odometria y SLAM


Tenga en cuenta que todas estas aplicaciones se pueden resolver sin cámaras, con un dispositivo de muy bajo consumo de energía y NN relativamente pequeños.


En los próximos años, es probable que muchos productos electrónicos de consumo comiencen a utilizar activamente este tipo de sensor con algoritmos de aprendizaje profundo para resolver los problemas mencionados anteriormente. Además, en 2021 se aprobó el estándar Wi-Fi IEEE 802.11а. Este estándar utiliza las mismas frecuencias de radio y principios operativos, lo que permite a los enrutadores Wi-Fi acceder a la misma funcionalidad que los radares mmWave FMCW.


Este y los dos siguientes artículos cubrirán:

  • Procesamiento de señales de radar mmWave FMCW: cómo obtener alcance, Doppler y ángulo de la señal de RF
  • Beneficios de usar el radar FMCW en comparación con una cámara
  • Aplicaciones de aprendizaje profundo de la señal de radar mmWave FMCW


Este artículo explica cómo se procesa una señal de radar mmWave FMCW. Se puede acceder al código utilizado para generar la mayoría de las cifras en Google Colab o al final del artículo.

Radar FMCW de onda milimétrica

La señal del radar mmWave FMCW permite medir la distancia a todos los objetos en su campo de visión, su velocidad y su posición angular (acimut y elevación). La señal del radar se puede procesar en forma de imágenes de resolución muy pequeña (generalmente ~32x32 - 256x64 píxeles) con rango/velocidad/ángulo a lo largo de los ejes de la imagen como en la siguiente imagen: rango-doppler (rango-velocidad) imágenes en ángulo.



Señal de radar mmWave FMCW procesada en imágenes de rango Doppler y ángulo de rango y la vista desde una cámara (Fuente: https://github.com/ZhangAoCanada/RADDet?tab=readme-ov-file)

El sensor consta de varias (1 o más) antenas transmisoras omnidireccionales y varias (1 o más) antenas receptoras. Las antenas transmisora y receptora funcionan simultáneamente. El campo de visión del radar suele ser de ~120° y la distancia máxima puede ser desde un par de centímetros hasta decenas de metros.

Cómo se mide la distancia

Normalmente necesitamos emitir una señal en el momento t1 y recibir su reflejo en el momento t2 para medir la distancia. Luego, la distancia se puede calcular como d=(t2-t1)*c , donde c es la velocidad de la luz porque la onda de radio viaja a la velocidad de la luz.


La antena de radar de onda mm FMCW es omnidireccional y necesita una forma de medir los tiempos t1 y t2 para todos los objetos en el campo de visión del radar. Para ello se utiliza una señal FMCW (onda continua de frecuencia modulada). El componente principal del radar es un chirrido. Chirp es una señal de radio sinusoide cuya frecuencia aumenta linealmente con el tiempo, como se muestra en la siguiente figura.

Desde el principio hasta el final del chirrido, la frecuencia de la onda de radio se modula (cambia) de acuerdo con una ley lineal predeterminada, como en la primera figura. La segunda figura muestra un ejemplo de un chirrido de 1 ms de duración.

Un chirrido se caracteriza por las frecuencias de inicio (f_start) y final (f_end), el ancho de banda ( B=f_end-f_start ) y el tiempo de chirrido (Tc). El tiempo del chirrido varía desde unos pocos microsegundos hasta unos pocos milisegundos. La frecuencia de inicio suele ser ~30, 60 o 77 GHz, según la aplicación del radar. El ancho de banda de Chirp oscila entre ~0,5 GHz y varios GHz.

La señal IF es una diferencia entre la señal transmitida actualmente por la señal Tx y la recibida por las señales Rx. (Fuente: https://www.ti.com/content/dam/videos/external-videos/2/3816841626001/5415203482001.mp4/subassets/mmwaveSensing-FMCW-offlineviewing_0.pdf)

Las antenas receptora (Rx) y transmisora (Tx) funcionan simultáneamente. El sintetizador genera continuamente un chirrido que se envía a la antena transmisora Tx y al mezclador. Al mismo tiempo, la señal recibida por la antena Rx también se envía al mezclador. El mezclador genera la diferencia entre la señal enviada a Tx y la señal recibida por Rx.

Un mezclador es un dispositivo simple que recibe una señal sinusoidal en dos entradas y produce una nueva señal sinusoidal cuya frecuencia y fase son la diferencia entre las frecuencias y fases de las señales de entrada.

La frecuencia de la señal chirrido cambia en el tiempo según una ley lineal conocida (Pendiente), lo que significa que si hay un solo objeto delante del radar, este objeto generará una señal x_out con una constante frecuencia F_obj=S2d/c , donde S - tasa de cambio de la frecuencia de la señal chirrido (pendiente), d - distancia al objeto, c - velocidad de la luz.

Si hay un solo objeto frente al radar, este objeto generará una señal x_out con una frecuencia constante F_obj=S2d/c

Podemos medir la distancia a todos los objetos en el campo de visión del radar simplemente analizando la señal del mezclador sin medir el tiempo: d=(F_obj*c)/(2*S). En la literatura, la señal x_out se denomina 'señal IF' (señal de frecuencia intermedia).


Una ventaja adicional del diseño del sensor: la frecuencia portadora de la señal suele rondar los 30GHz o 60Ghz. Si necesitáramos digitalizar una señal de tales frecuencias, tendríamos requisitos muy altos para el ADC. Todo el análisis de la señal se realiza en señal IF cuya frecuencia suele rondar un par de MHz, lo que relaja significativamente los requisitos para el ADC.

Utilice la transformada de Fourier para encontrar el alcance de cada objeto en el campo de visión del radar

Como se mostró arriba, para encontrar la distancia a todos los objetos en el FoV del radar, necesitamos descomponer la señal x_out en sus componentes de frecuencia. La Transformada de Fourier es un algoritmo que convierte una señal en el dominio del tiempo al dominio de la frecuencia.


La transformada de Fourier de la señal IF revelará múltiples tonos, y la frecuencia de cada tono es proporcional al alcance de cada objeto desde el radar; en la literatura, esta transformada de Fourier también se denomina transformada de Fourier de tiempo rápido o transformada de Fourier de rango.

Señal IF de un chirrido en el dominio del tiempo.

Señal IF de un chirrido en el dominio de la frecuencia después de la transformada rápida de Fourier

Problema: si hay varios objetos a la misma distancia estamos en problemas porque el rango FFT no nos permitirá diferenciar entre dos objetos. Pero si los objetos se mueven a diferentes velocidades, pueden separarse según la velocidad.

Cómo medir la velocidad con múltiples chirridos

Los chirridos suelen repetirse inmediatamente uno después del otro o con un ligero retraso. En la literatura, el tiempo entre el comienzo de dos chirridos se llama tiempo de repetición de chirridos. Varios chirridos (generalmente de 16 a 256) se apilan para formar un marco de radar. Un tiempo de fotograma = Tiempo de repetición de chirridos * Número de chirridos. Normalmente, el tiempo de 1 fotograma es de decenas de microsegundos a decenas de milisegundos.

Marco de radar: múltiples chirridos apilados. Cada chirrido es una sinusoide modulada en frecuencia, pero por conveniencia, cada chirrido se representa como la ley lineal de la modulación de frecuencia. La señal IF recibida de cada chirrido permite estimar la distancia a todos los objetos en el FoV

Un cuadro de radar (múltiples chirridos apilados) visualizado en el dominio de la frecuencia. La Transformada de Fourier se aplica a cada chirrido por separado. Las líneas/curvas horizontales amarillas representan objetos en un rango particular; en esta figura, hay dos objetos en el intervalo de rango ~40 y ~50.

¿Por qué apilar varios chirridos juntos? La fase de la señal IF es muy sensible a las vibraciones pequeñas y grandes de los objetos en el campo de visión del radar; incluso se puede utilizar para medir la frecuencia de vibración de un motor o los latidos del corazón de una persona o un animal.


Es posible medir la velocidad de un objeto en un rango particular analizando los cambios de fase a lo largo del tiempo (cambio de fase de chirrido a chirrido):


  • Transmitir al menos dos chirridos separados por el tiempo Tc.


  • Después de la transformada de Fourier de rango, cada chirrido tendrá picos en los mismos lugares pero con diferentes fases.


  • El cambio de fase ω a través de los chirridos corresponde a la velocidad del objeto.

El algoritmo para medir la velocidad con el radar mmWave FMCW es muy sencillo:

  1. Aplique la Transformada de Fourier a cada chirrido en un cuadro. Cada frecuencia corresponde a una distancia específica al objeto. A veces, estas frecuencias se denominan intervalos de rango, ya que cada frecuencia corresponde a un rango específico.


  2. Si la señal IF original se representa con valores no complejos, la segunda mitad de las frecuencias (contenedores de rango) debe descartarse según el teorema de Nyquist-Shannon.


  3. Aplique otra transformada de Fourier en cada rango de rango: descomponga los cambios de fase a lo largo del tiempo en frecuencias donde la frecuencia corresponderá a valores Doppler (velocidad) específicos

De izquierda a derecha: señal IF de un solo chirrido después de la transformada de Fourier (transformada de Fourier de rango), cuadro de radar después de la transformada de Fourier de rango, imagen Doppler de rango. Los valores de los "píxeles" en una imagen Doppler de rango son la respuesta de amplitud y la fase a una velocidad y distancia específicas.

Problema: si hay dos objetos a la misma distancia moviéndose a la misma velocidad, producirán un único pico en la imagen de rango Doppler. Pero si tenemos varias antenas receptoras Rx, es posible que se puedan separar objetos por su posición angular.

Cómo medir la posición angular

Como se explicó anteriormente, un pequeño cambio en la distancia resultará en un cambio de fase. El cambio de fase entre chirridos separados en el tiempo se utiliza para calcular la velocidad de los objetos. El cambio de fase entre chirridos separados en el espacio (chirridos recibidos por diferentes antenas Rx) se puede utilizar para estimar el ángulo.


El algoritmo de estimación de ángulos con múltiples antenas receptoras Rx es muy simple:

  1. Transmite un cuadro de chirridos con una antena Tx.


  2. Calcule la transformada de Fourier 2D (imagen de rango Doppler) de los fotogramas recibidos por todas las antenas Rx. Las imágenes Doppler de rango de cada antena Rx tendrán picos en la misma ubicación y Doppler pero con diferente fase (la diferencia de fase corresponde a la distancia entre las antenas Rx).


  3. Utilice la diferencia de fase (ω) para estimar el ángulo de llegada de los objetos; aplique la tercera transformada de Fourier en todas las antenas Rx.

La aplicación de la tercera transformada de Fourier en todas las antenas Rx dará como resultado un cubo de rango-ángulo Doppler. El cubo se puede visualizar como imágenes de rango-doppler, rango-ángulo y ángulo-velocidad.

Procesamiento de datos de radar mmWave FMCW con Python

 import os import numpy as np import scipy import scipy.io as spio import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec import math


Descargue un ejemplo de datos de radar mmWave FMCW del proyecto RAMP-CNN .

 !pip uninstall gdown -y && pip install gdown !gdown -V !gdown --folder https://drive.google.com/drive/folders/1Eg-8R45RPvifNf2VYI_MG-LRjdkLOHTf -O /content/sample_slice_data


Cargue datos del archivo.

 file_name = '/content/sample_slice_data/2019_04_30/2019_04_30_pbms002/2019_04_30_pbms002_000000.mat' mat = spio.loadmat(file_name, squeeze_me=True) adc_data = np.asarray(mat["adc_data"]) print(adc_data.shape) # ADC samples, vRx, chirps - (128, 8, 255) print(adc_data.dtype) # complex128


Funciones de visualización.

 def show_one_chirp(one_chirp_data, y_label='amplitude', x_label='One chirp'): plt.figure(figsize=[5, 4]) plt.plot(one_chirp_data) plt.xlabel(x_label) plt.ylabel(y_label) plt.show() def show_image(image_data, image_name, x_label='', y_label=''): plt.imshow(image_data) plt.title(image_name) plt.xlabel(x_label) plt.ylabel(y_label) plt.show() def show_3_images(img_data1, img_data2, img_data3): plt.figure(figsize=(10, 8)) plt.subplot(2, 2, 1) plt.imshow(img_data1[0], aspect=1.44) plt.title(img_data1[1]) plt.xlabel(img_data1[2]) plt.ylabel(img_data1[3]) plt.subplot(2, 2, 2) plt.imshow(img_data2[0], aspect=1.0) plt.title(img_data2[1]) plt.xlabel(img_data2[2]) plt.ylabel(img_data2[3]) plt.subplot(2, 2, 3) plt.imshow(img_data3[0], aspect=1.0) plt.title(img_data3[1]) plt.xlabel(img_data3[2]) plt.ylabel(img_data3[3]) plt.show()


Muestra los datos de un ADC de un chirrido.

 show_one_chirp(np.absolute(adc_data[:,0,0]), x_label='IF signal of a chirp') 

Muestra un chirrido después del alcance fft.

 chirp_fft = np.fft.fft(adc_data[:,0,0]) show_one_chirp(np.absolute(chirp_fft), x_label='IF signal amplitude (range)', y_label='Amplitude') 

Mostrar el cuadro de radar en los dominios de tiempo y frecuencia.

 # show all chirps show_one_chirp(np.absolute(adc_data[:,0,:]), x_label='IF signal of frame chirps') show_image(np.absolute(np.fft.fft(adc_data[:,:,:], axis=0).mean(1)), 'range FFT', x_label='Chirps', y_label='Range') 

Obtenga alcance, Doppler y ángulo a partir de datos de radar.

 def get_range_doppler_angle(adc_data_in): # adc_data_in - ADC samples, vRx, chirps samples_in = adc_data_in.shape[0] range_window = np.hamming(samples_in).reshape(-1,1,1) range_data = np.fft.fft(adc_data_in*range_window, samples_in, axis=0) # chirps_in = range_data.shape[2] doppler_window = np.hamming(chirps_in).reshape(1,1,-1) range_doppler_data = np.fft.fftshift(np.fft.fft(range_data*doppler_window, chirps_in, axis=2), axes=2) # # samples, vRx, chirps angle_window = np.hamming(range_doppler_data.shape[1]).reshape(1,-1,1) angle_bins=180 rda_data = np.fft.fftshift(np.fft.fft(range_doppler_data*angle_window, angle_bins, axis=1), axes=1) return range_data, range_doppler_data, rda_data
 range_image, range_doppler_image, rda_cube = get_range_doppler_angle(adc_data)
 show_3_images([np.absolute(range_image.mean(axis=1)), 'range doppler', 'Doppler', 'Range'], [np.absolute(rda_cube.mean(axis=2)), 'range angle', 'Angle', 'Range'], [np.absolute(rda_cube.mean(axis=0)), 'angle doppler', 'Doppler', 'Angle'] ) 

Otras lecturas

¿Lo que sigue?

Los próximos dos artículos cubrirán:

  • Pros y contras de usar el radar mmWaveFMCW en comparación con una cámara
  • Aplicaciones de aprendizaje profundo de la señal de radar mmWave FMCW.