paint-brush
Apprentissage profond : appareils Edge avec radars mmWave FMCW, partie 1 - Traitement du signalpar@owlgrey
2,716 lectures
2,716 lectures

Apprentissage profond : appareils Edge avec radars mmWave FMCW, partie 1 - Traitement du signal

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

Trop long; Pour lire

Le radar FMCW à ondes millimétriques offre une détection polyvalente indépendante des conditions environnementales, idéale pour les appareils et les applications telles que la détection humaine sans caméras. Efficace et rentable, il analyse les changements de fréquence des gazouillis pour mesurer la distance, la vitesse et la direction, promettant des avancées significatives en matière d'électronique grand public et de technologie Wi-Fi.
featured image - Apprentissage profond : appareils Edge avec radars mmWave FMCW, partie 1 - Traitement du signal
Dmitrii Matveichev  HackerNoon profile picture

Le radar à ondes continues modulées en fréquence (FMCW) à ondes millimétriques fonctionne en émettant et en détectant des ondes électromagnétiques de radiofréquence (RF). En raison de ses propriétés uniques, cette technologie offre plusieurs avantages pour les systèmes et applications interactifs. Il fonctionne indépendamment des conditions d'éclairage, du bruit ambiant ou des conditions météorologiques, offrant des capacités de détection rapides et précises.


De plus, il peut pénétrer dans divers matériaux, ce qui le rend idéal pour s’intégrer dans divers appareils et environnements. Le capteur peut être construit comme une petite unité semi-conductrice à semi-conducteurs à des fréquences RF d’ondes millimétriques – essentiellement une puce radar. Cette puce est compacte, consomme peu d’énergie, ne comporte aucune pièce mobile et peut être produite de manière rentable en grande quantité.


Le radar mmWave FMCW peut être utilisé dans de nombreux appareils, tels que :

  • gadgets de réalité virtuelle (VR)
  • technologie portable, vêtements intelligents
  • Appareils Internet des objets (IoT)
  • contrôleurs de jeu
  • les appareils électroniques conventionnels comme les smartphones, les tablettes et les ordinateurs portables.


De plus, les radars mmWave FMCW peuvent être utilisés avec des modèles d'apprentissage profond pour résoudre diverses tâches :

  • détection de présence humaine
  • comptage, localisation et suivi de personnes
  • classification des activités humaines (la personne dort/s'assoit/marche/fait du sport, etc.)
  • reconnaissance gestuelle
  • reconnaissance de lieu
  • odométrie et SLAM


Notez que toutes ces applications peuvent être résolues sans caméras, avec un dispositif à très faible consommation d'énergie et des NN relativement petits.


Dans les prochaines années, de nombreux appareils électroniques grand public commenceront probablement à utiliser activement ce type de capteur avec des algorithmes d’apprentissage profond pour résoudre les problèmes mentionnés ci-dessus. De plus, en 2021, la norme Wi-Fi IEEE 802.11 a été approuvée. Cette norme utilise les mêmes fréquences radio et principes de fonctionnement, permettant aux routeurs Wi-Fi d'accéder aux mêmes fonctionnalités que les radars mmWave FMCW.


Cet article et les deux suivants couvriront :

  • Traitement du signal radar mmWave FMCW - comment obtenir la portée, le doppler et l'angle du signal RF
  • avantages de l'utilisation du radar FMCW par rapport à une caméra
  • Applications d'apprentissage en profondeur du signal radar mmWave FMCW


Cet article explique comment un signal radar mmWave FMCW est traité. Le code utilisé pour générer la plupart des figures est accessible dans Google Colab ou en fin d'article.

Radar FMCW à ondes millimétriques

Le signal du radar mmWave FMCW permet de mesurer la distance à tous les objets dans son champ de vision, leur vitesse et leur position angulaire (azimut et élévation). Le signal du radar peut être traité sous la forme d'images de très petite résolution (généralement ~ 32x32 - 256x64 pixels) avec une portée/vitesse/angle le long des axes de l'image comme dans l'image ci-dessous - portée-doppler (portée-vitesse) - images angulaires.



Signal radar mmWave FMCW traité en images distance-doppler et angle de distance et vue d'une caméra (Source : https://github.com/ZhangAoCanada/RADDet?tab=readme-ov-file)

Le capteur se compose de plusieurs (1 ou plusieurs) antennes d'émission omnidirectionnelles et de plusieurs (1 ou plus) antennes de réception. Les antennes d'émission et de réception fonctionnent simultanément. Le champ de vision du radar est généralement d'environ 120° et la distance maximale peut aller de quelques centimètres à plusieurs dizaines de mètres.

Comment la distance est mesurée

Nous devons généralement émettre un signal au temps t1 et recevoir sa réflexion au temps t2 pour mesurer la distance. La distance peut alors être calculée comme d=(t2-t1)*c , où c est la vitesse de la lumière car l'onde radio se déplace à la vitesse de la lumière.


L'antenne radar à ondes millimétriques FMCW est omnidirectionnelle et nécessite un moyen de mesurer les temps t1 et t2 pour tous les objets dans le champ de vision du radar. Un signal FMCW (Frequency Modulated Continu Wave) est utilisé à cet effet. Le composant principal du radar est un gazouillis. Chirp est un signal radio sinusoïdal dont la fréquence augmente linéairement avec le temps, comme le montre la figure ci-dessous.

Du début à la fin du chirp, la fréquence des ondes radio est modulée (modifiée) selon une loi linéaire prédéterminée, comme sur la première figure. La deuxième figure montre un exemple de bip d'une durée de 1 ms.

Un chirp est caractérisé par les fréquences de début (f_start) et de fin (f_end), la bande passante ( B=f_end-f_start ) et la durée du chirp (Tc). Le temps de chirp varie de quelques microsecondes à quelques millisecondes. La fréquence de démarrage est généralement d'environ 30, 60 ou 77 GHz, selon l'application radar. La bande passante Chirp varie de ~0,5 GHz à plusieurs GHz.

Le signal IF est une différence entre le signal actuellement transmis par le signal Tx et celui reçu par les signaux Rx. (Source : https://www.ti.com/content/dam/videos/external-videos/2/3816841626001/5415203482001.mp4/subassets/mmwaveSensing-FMCW-offlineviewing_0.pdf)

Les antennes de réception (Rx) et d'émission (Tx) fonctionnent simultanément. Le synthétiseur génère en continu un gazouillis qui est envoyé à l'antenne émettrice Tx et au mélangeur. Dans le même temps, le signal reçu par l’antenne Rx est également transmis au mélangeur. Le mélangeur produit la différence entre le signal envoyé à Tx et le signal reçu par Rx.

Un mélangeur est un appareil simple qui reçoit un signal sinusoïdal sur deux entrées et produit un nouveau signal sinusoïdal dont la fréquence et la phase sont la différence entre les fréquences et les phases des signaux d'entrée.

La fréquence du signal chirp change dans le temps selon une loi linéaire connue (Pente) ce qui signifie que s'il y a un seul objet devant le radar, cet objet générera un signal x_out avec un constante fréquence F_obj=S2d/c , où S - taux de changement de fréquence du signal chirp (pente), d - distance à l'objet, c - vitesse de la lumière.

S'il y a un seul objet devant le radar, cet objet générera un signal x_out de fréquence constante F_obj=S2d/c

Nous pouvons mesurer la distance à tous les objets dans le champ de vision du radar simplement en analysant le signal du mélangeur sans mesurer le temps : d=(F_obj*c)/(2*S). Dans la littérature, le signal x_out est appelé « signal IF » (signal à fréquence intermédiaire).


Un avantage supplémentaire de la conception du capteur : la fréquence porteuse du signal est généralement d'environ 30 GHz ou 60 GHz. Si nous avions besoin de numériser un signal de telles fréquences, nous aurions des exigences très élevées pour l'ADC. Toute analyse de signal est effectuée sur un signal IF dont la fréquence est généralement d'environ quelques MHz, ce qui assouplit considérablement les exigences de l'ADC.

Utilisez la transformation de Fourier pour trouver la portée de chaque objet dans le FoV du radar

Comme indiqué ci-dessus, pour trouver la distance à tous les objets dans le FoV du radar, nous devons décomposer le signal x_out en ses composantes de fréquence. La transformée de Fourier est un algorithme qui convertit un signal dans le domaine temporel en domaine fréquentiel.


La transformée de Fourier du signal IF révélera plusieurs tonalités, et la fréquence de chaque tonalité est proportionnelle à la portée de chaque objet depuis le radar - dans la littérature, cette transformée de Fourier est également appelée transformée de Fourier à temps rapide ou transformée de Fourier à distance.

SI signal d'un gazouillis dans le domaine temporel

Signal IF d'un gazouillis dans le domaine fréquentiel après la transformée de Fourier rapide

Problème : s'il y a plusieurs objets à la même distance, nous avons des problèmes car la distance FFT ne nous permettra pas de différencier deux objets. Mais si les objets se déplacent à des vitesses différentes, ils peuvent être séparés par la vitesse.

Comment mesurer la vitesse avec plusieurs gazouillis

Les gazouillis sont généralement répétés immédiatement les uns après les autres ou avec un léger retard. Dans la littérature, le temps entre le début de deux gazouillis est appelé Chirp Repetition Time. Plusieurs gazouillis (généralement 16 à 256) sont empilés pour former une trame radar. Une durée d'image = Temps de répétition des gazouillis * Nombre de gazouillis. En règle générale, la durée d'une image varie de dizaines de microsecondes à des dizaines de millisecondes.

Cadre radar - plusieurs gazouillis empilés ensemble. Chaque gazouillis est une sinusoïde modulée en fréquence, mais pour plus de commodité, chaque gazouillis est représenté comme la loi linéaire de la modulation de fréquence. Le signal IF reçu de chaque chirp permet d'estimer la distance jusqu'à tous les objets dans le FoV

Une trame radar (plusieurs gazouillis empilés) visualisée dans le domaine fréquentiel. La transformée de Fourier est appliquée à chaque gazouillis séparément. Les lignes/courbes horizontales jaunes représentent les objets situés à une distance particulière. Dans cette figure, il y a deux objets situés à des plages ~40 et ~50.

Pourquoi empiler plusieurs gazouillis ensemble ? La phase du signal IF est très sensible aux petites et grandes vibrations des objets dans le champ de vision du radar - elle peut même être utilisée pour mesurer la fréquence de vibration d'un moteur ou le battement de coeur d'une personne ou d'un animal.


Il est possible de mesurer la vitesse d'un objet à une distance particulière en analysant les changements de phase au fil du temps (changement de phase de chirp à chirp) :


  • Transmettez au moins deux gazouillis séparés par le temps Tc.


  • Après la transformée de Fourier, chaque gazouillis aura des pics aux mêmes endroits mais avec des phases différentes.


  • Le changement de phase ω à travers les gazouillis correspond à la vitesse de l'objet.

L'algorithme de mesure de la vitesse avec le radar mmWave FMCW est très simple :

  1. Appliquez la transformation de Fourier à chaque gazouillis dans une image. Chaque fréquence correspond à une distance spécifique à l'objet. Parfois, ces fréquences sont appelées plages de plage puisque chaque fréquence correspond à une plage spécifique.


  2. si le signal IF d'origine est représenté avec des valeurs non complexes, la seconde moitié des fréquences (intervalles de plage) doit être écartée selon le théorème de Nyquist-Shannon


  3. Appliquez une autre transformée de Fourier sur chaque plage - décomposez les changements de phase au fil du temps en fréquences où la fréquence correspondra à des valeurs Doppler (vitesse) spécifiques.

De gauche à droite : signal IF d'un seul gazouillis après transformée de Fourier (transformation de Fourier à distance), image radar après transformée de Fourier à distance, image distance-doppler. Les valeurs des « pixels » dans une image distance-doppler sont la réponse en amplitude et la phase à une vitesse et une distance spécifiques.

Problème : s'il y a deux objets à la même distance se déplaçant à la même vitesse, ils produiront un seul pic dans l'image distance-doppler. Mais si nous disposons de plusieurs antennes de réception Rx, il peut être possible de séparer les objets par leur position angulaire

Comment mesurer la position angulaire

Comme expliqué précédemment, un petit changement de distance entraînera un changement de phase. Le changement de phase entre des gazouillis séparés dans le temps est utilisé pour calculer la vitesse des objets. Le changement de phase entre des gazouillis séparés dans l’espace (gazouillis reçus par différentes antennes Rx) peut être utilisé pour l’estimation de l’angle.


L'algorithme d'estimation d'angle avec plusieurs antennes de réception Rx est très simple :

  1. Transmettez une trame de gazouillis avec une antenne Tx.


  2. Calculez la transformée de Fourier 2D (image range-doppler) des images reçues par toutes les antennes Rx. Les images Range-Doppler de chaque antenne Rx auront des pics au même endroit et au même Doppler mais avec une phase différente (la différence de phase correspond à la distance entre les antennes Rx).


  3. Utilisez la différence de phase (ω) pour estimer l'angle d'arrivée des objets - appliquez la troisième transformée de Fourier sur toutes les antennes Rx.

L'application de la troisième transformée de Fourier sur toutes les antennes Rx entraînera un cube portée-doppler-angle. Le cube peut être visualisé sous forme d'images distance-doppler, distance-angle et angle-vitesse.

Traitement des données radar mmWave FMCW avec 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


Téléchargez un exemple de données radar mmWave FMCW du projet 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


Chargez les données du fichier.

 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


Fonctions de visualisation.

 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()


Afficher les données ADC d'un gazouillis.

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

Afficher un gazouillis après la portée 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') 

Afficher l'image radar dans les domaines temporel et fréquentiel.

 # 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') 

Obtenez la portée, le Doppler et l'angle à partir des données 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'] ) 

Lectures complémentaires

Quelle est la prochaine?

Les deux prochains articles porteront sur :

  • avantages et inconvénients de l'utilisation du radar mmWaveFMCW par rapport à une caméra
  • applications d'apprentissage en profondeur du signal radar mmWave FMCW