paint-brush
Deep Learning: Edge-Geräte mit mmWave-FMCW-Radaren, Teil 1 – Signalverarbeitungvon@owlgrey
2,499 Lesungen
2,499 Lesungen

Deep Learning: Edge-Geräte mit mmWave-FMCW-Radaren, Teil 1 – Signalverarbeitung

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

Zu lang; Lesen

Millimeterwellen-FMCW-Radar bietet vielseitige Sensorik unabhängig von den Umgebungsbedingungen und ist ideal für Geräte und Anwendungen wie die Personenerkennung ohne Kameras. Es ist effizient und kostengünstig und analysiert Chirp-Frequenzänderungen, um Entfernung, Geschwindigkeit und Richtung zu messen. Dies verspricht bedeutende Fortschritte in der Unterhaltungselektronik und der Wi-Fi-Technologie.
featured image - Deep Learning: Edge-Geräte mit mmWave-FMCW-Radaren, Teil 1 – Signalverarbeitung
Dmitrii Matveichev  HackerNoon profile picture

Millimeterwellen-Frequenzmoduliertes Dauerstrichradar (FMCW) funktioniert durch Aussenden und Empfangen von elektromagnetischen Radiofrequenzwellen (RF). Aufgrund ihrer einzigartigen Eigenschaften bietet diese Technologie mehrere Vorteile für interaktive Systeme und Anwendungen. Sie arbeitet unabhängig von Lichtverhältnissen, Umgebungsgeräuschen oder Wetter und bietet schnelle und genaue Sensorfunktionen.


Darüber hinaus kann er verschiedene Materialien durchdringen, was ihn ideal für die Integration in verschiedene Geräte und Umgebungen macht. Der Sensor kann als kleine Festkörper-Halbleitereinheit mit Millimeterwellen-HF-Frequenzen konstruiert werden – im Wesentlichen ein Radarchip. Dieser Chip ist kompakt, verbraucht wenig Strom, hat keine beweglichen Teile und kann kostengünstig in großen Mengen hergestellt werden.


mmWave-FMCW-Radar kann in vielen Geräten verwendet werden, beispielsweise:

  • Geräte für virtuelle Realität (VR)
  • tragbare Technologie, intelligente Kleidung
  • Internet of Things (IoT)-Geräte
  • Gamecontroller
  • herkömmliche Elektronik wie Smartphones, Tablets und Laptops.


Darüber hinaus können mmWave-FMCW-Radare zusammen mit Deep-Learning-Modellen zur Lösung verschiedener Aufgaben eingesetzt werden:

  • Erkennung menschlicher Anwesenheit
  • Personenzählung, Lokalisierung und Verfolgung
  • Klassifizierung menschlicher Aktivitäten (Person schläft/sitzt/geht/treibt Sport usw.)
  • Gestenerkennung
  • Ortserkennung
  • Odometrie und SLAM


Beachten Sie, dass alle diese Anwendungen ohne Kameras, mit einem Gerät mit sehr geringem Stromverbrauch und relativ kleinen NNs gelöst werden können.


In den nächsten Jahren werden viele Verbraucherelektronikgeräte diesen Sensortyp mit Deep-Learning-Algorithmen wahrscheinlich aktiv nutzen, um die oben genannten Probleme zu lösen. Darüber hinaus wurde 2021 der Wi-Fi-Standard IEEE 802.11 verabschiedet. Dieser Standard verwendet dieselben Funkfrequenzen und Betriebsprinzipien, sodass Wi-Fi-Router auf dieselben Funktionen zugreifen können wie mmWave-FMCW-Radare.


In diesem und den nächsten beiden Artikeln geht es um:

  • mmWave FMCW-Radarsignalverarbeitung – So ermitteln Sie Reichweite, Dopplerfrequenz und Winkel aus einem HF-Signal
  • Vorteile der Verwendung eines FMCW-Radars im Vergleich zu einer Kamera
  • Deep-Learning-Anwendungen des mmWave-FMCW-Radarsignals


In diesem Artikel wird erläutert, wie ein mmWave-FMCW-Radarsignal verarbeitet wird. Der Code, der zur Generierung der meisten Abbildungen verwendet wurde, ist in Google Colab oder am Ende des Artikels verfügbar.

FMCW mmWave Radar

Das Signal des mmWave-FMCW-Radars ermöglicht die Messung der Entfernung zu allen Objekten in seinem Sichtfeld, ihrer Geschwindigkeit und Winkelposition (Azimut und Höhe). Das Signal des Radars kann in Form von Bildern mit sehr geringer Auflösung (normalerweise ~32x32 - 256x64 Pixel) mit Entfernung/Geschwindigkeit/Winkel entlang der Bildachsen verarbeitet werden, wie im Bild unten - Entfernungs-Doppler- (Entfernungs-Geschwindigkeits-) Entfernungs-Winkel-Bilder.



mmWave-FMCW-Radarsignal, verarbeitet zu Range-Doppler- und Range-Angle-Bildern und der Ansicht einer Kamera (Quelle: https://github.com/ZhangAoCanada/RADDet?tab=readme-ov-file)

Der Sensor besteht aus mehreren (1 oder mehr) omnidirektionalen Sendeantennen und mehreren (1 oder mehr) Empfangsantennen. Die Sende- und Empfangsantennen arbeiten gleichzeitig. Das Radarsichtfeld beträgt normalerweise ~120° und die maximale Entfernung kann von einigen Zentimetern bis zu mehreren zehn Metern betragen.

Wie die Entfernung gemessen wird

Normalerweise müssen wir zum Zeitpunkt t1 ein Signal aussenden und zum Zeitpunkt t2 dessen Reflexion empfangen, um die Distanz zu messen. Die Distanz kann dann als d=(t2-t1)*c berechnet werden, wobei c die Lichtgeschwindigkeit ist, da sich die Radiowelle mit Lichtgeschwindigkeit bewegt.


Die FMCW-Millimeterwellenradarantenne ist omnidirektional und benötigt eine Möglichkeit, die Zeiten t1 und t2 für alle Objekte im Radarsichtfeld zu messen. Hierzu wird ein FMCW-Signal (Frequency Modulated Continuous Wave) verwendet. Die Hauptkomponente des Radars ist ein Chirp. Chirp ist ein sinusförmiges Funksignal, dessen Frequenz mit der Zeit linear zunimmt, wie in der folgenden Abbildung dargestellt.

Vom Anfang bis zum Ende des Chirps wird die Radiowellenfrequenz gemäß einem vorgegebenen linearen Gesetz moduliert (geändert), wie in der ersten Abbildung. Die zweite Abbildung zeigt ein Beispiel für einen 1 ms langen Chirp.

Ein Chirp ist durch Startfrequenzen (f_start) und Endfrequenzen (f_end), Bandbreite ( B=f_end-f_start ) und Chirp-Zeit (Tc) gekennzeichnet. Die Chirp-Zeit reicht von einigen Mikrosekunden bis zu einigen Millisekunden. Die Startfrequenz beträgt je nach Radaranwendung normalerweise ~30, 60 oder 77 GHz. Die Chirp-Bandbreite reicht von ~0,5 GHz bis zu mehreren GHz.

Das IF-Signal ist eine Differenz zwischen dem aktuell vom Tx-Signal gesendeten und dem vom Rx-Signal empfangenen Signal. (Quelle: https://www.ti.com/content/dam/videos/external-videos/2/3816841626001/5415203482001.mp4/subassets/mmwaveSensing-FMCW-offlineviewing_0.pdf)

Die Empfangsantenne (Rx) und die Sendeantenne (Tx) arbeiten gleichzeitig. Der Synthesizer erzeugt kontinuierlich einen Chirp, der an die Sendeantenne Tx und den Mischer gesendet wird. Gleichzeitig wird das von der Rx-Antenne empfangene Signal auch an den Mischer weitergeleitet. Der Mischer gibt die Differenz zwischen dem an Tx gesendeten Signal und dem von Rx empfangenen Signal aus.

Ein Mischer ist ein einfaches Gerät, das an zwei Eingängen ein sinusförmiges Signal empfängt und ein neues sinusförmiges Signal erzeugt, dessen Frequenz und Phase die Differenz zwischen den Frequenzen und Phasen der Eingangssignale sind.

Die Frequenz des Chirp-Signals ändert sich mit der Zeit nach einem bekannten linearen Gesetz (Steigung), was bedeutet, dass, wenn sich ein einzelnes Objekt vor dem Radar befindet, dieses Objekt ein Signal x_out mit einem Konstante Frequenz F_obj=S2d/c , wobei S die Änderungsrate der Chirp-Signalfrequenz (Steigung), d die Entfernung zum Objekt und c die Lichtgeschwindigkeit ist.

Befindet sich ein einzelnes Objekt vor dem Radar, erzeugt dieses Objekt ein Signal x_out mit einer konstanten Frequenz F_obj=S2d/c

Wir können die Entfernung zu allen Objekten im Radarsichtfeld einfach durch Analyse des Signals vom Mischer messen, ohne die Zeit zu messen: d=(F_obj*c)/(2*S). In der Literatur wird das x_out- Signal als „IF-Signal“ (Zwischenfrequenzsignal) bezeichnet.


Ein zusätzlicher Vorteil des Sensordesigns: Die Trägerfrequenz des Signals liegt normalerweise bei 30 GHz oder 60 GHz. Wenn wir ein Signal mit solchen Frequenzen digitalisieren müssten, hätten wir sehr hohe Anforderungen an den ADC. Die gesamte Signalanalyse erfolgt anhand eines IF-Signals, dessen Frequenz normalerweise bei einigen MHz liegt, was die Anforderungen an den ADC erheblich verringert.

Verwenden Sie die Fourier-Transformation, um die Reichweite jedes Objekts im Radar-Sichtfeld zu ermitteln

Wie oben gezeigt, müssen wir das Signal x_out in seine Frequenzkomponenten zerlegen, um die Entfernung zu allen Objekten im Radar-Sichtfeld zu ermitteln. Die Fourier-Transformation ist ein Algorithmus, der ein Zeitbereichssignal in den Frequenzbereich umwandelt.


Die Fourier-Transformation des IF-Signals zeigt mehrere Töne und die Frequenz jedes Tons ist proportional zur Entfernung jedes Objekts vom Radar – in der Literatur wird diese Fourier-Transformation auch „Fast Time Fourier-Transformation“ oder „Reichweiten-Fourier-Transformation“ genannt.

ZF-Signal eines Chirps im Zeitbereich

ZF-Signal eines Chirps im Frequenzbereich nach der Fast Fourier Transformation

Problem: Wenn sich mehrere Objekte in derselben Entfernung befinden, haben wir ein Problem, da wir mit der Entfernungs-FFT nicht zwischen zwei Objekten unterscheiden können. Wenn sich Objekte jedoch mit unterschiedlicher Geschwindigkeit bewegen, können sie anhand der Geschwindigkeit getrennt werden.

So messen Sie die Geschwindigkeit mit mehreren Chirps

Chirps werden normalerweise unmittelbar hintereinander oder mit einer leichten Verzögerung wiederholt. In der Literatur wird die Zeit zwischen dem Beginn zweier Chirps als Chirp-Wiederholungszeit bezeichnet. Mehrere Chirps (normalerweise 16 bis 256) werden zu einem Radar-Frame zusammengefügt. Frame-Zeit = Chirp-Wiederholungszeit * Chirp-Anzahl. Normalerweise beträgt die Zeit eines Frames einige zehn Mikrosekunden bis einige zehn Millisekunden.

Radarbild – mehrere übereinander gestapelte Chirps. Jeder Chirp ist eine frequenzmodulierte Sinuskurve, der Einfachheit halber wird jeder Chirp jedoch als lineares Gesetz der Frequenzmodulation dargestellt. Das empfangene IF-Signal von jedem Chirp ermöglicht die Schätzung der Entfernung zu allen Objekten im Sichtfeld.

Ein Radarbild (mehrere übereinander gestapelte Chirps), visualisiert im Frequenzbereich. Die Fourier-Transformation wird auf jeden Chirp einzeln angewendet. Gelbe horizontale Linien/Kurven stellen Objekte in einer bestimmten Entfernung dar – in dieser Abbildung gibt es zwei Objekte im Entfernungsbereich ~40 und ~50.

Warum mehrere Chirps übereinander stapeln? Die Phase des IF-Signals reagiert sehr empfindlich auf kleine und große Vibrationen von Objekten im Radarsichtfeld. Damit lässt sich sogar die Vibrationsfrequenz eines Motors oder der Herzschlag eines Menschen oder Tieres messen.


Es ist möglich, die Geschwindigkeit eines Objekts in einer bestimmten Entfernung zu messen, indem man Phasenänderungen über die Zeit analysiert (Phasenänderung von Chirp zu Chirp):


  • Übertragen Sie mindestens zwei Chirps im Abstand von der Zeit Tc.


  • Nach der Bereichs-Fourier-Transformation weist jeder Chirp Spitzen an den gleichen Stellen, jedoch mit unterschiedlichen Phasen auf.


  • Die Änderung der Phase ω über die Chirps hinweg entspricht der Geschwindigkeit des Objekts.

Der Algorithmus zur Geschwindigkeitsmessung mit mmWave FMCW Radar ist sehr einfach:

  1. Wenden Sie die Fourier-Transformation auf jeden Chirp in einem Frame an. Jede Frequenz entspricht einer bestimmten Entfernung zum Objekt. Manchmal werden diese Frequenzen als Entfernungsbereiche bezeichnet, da jede Frequenz einem bestimmten Bereich entspricht.


  2. Wenn das ursprüngliche ZF-Signal mit nicht komplexen Werten dargestellt wird, muss die zweite Hälfte der Frequenzen (Bereichsbereiche) gemäß dem Nyquist-Shannon-Theorem verworfen werden.


  3. Wenden Sie eine weitere Fourier-Transformation auf jeden Bereichsabschnitt an - zerlegen Sie Phasenänderungen im Zeitverlauf in Frequenzen, wobei die Frequenz einem bestimmten Dopplerwert (Geschwindigkeitswert) entspricht.

Von links nach rechts: IF-Signal eines einzelnen Chirps nach Fourier-Transformation (Range-Fourier-Transformation), Radarbild nach Range-Fourier-Transformation, Range-Doppler-Bild. Die Werte der „Pixel“ in einem Range-Doppler-Bild sind die Amplitudenantwort und Phase bei einer bestimmten Geschwindigkeit und Entfernung.

Problem: Wenn sich zwei Objekte in gleicher Entfernung und mit gleicher Geschwindigkeit bewegen, erzeugen sie einen einzigen Peak im Entfernungs-Doppler-Bild. Wenn wir jedoch mehrere Empfangsantennen haben, ist es möglicherweise möglich, Objekte anhand ihrer Winkelposition zu trennen.

So messen Sie die Winkelposition

Wie bereits erläutert, führt eine kleine Änderung der Entfernung zu einer Phasenänderung. Phasenänderungen über zeitlich getrennte Chirps werden zur Berechnung der Objektgeschwindigkeit verwendet. Phasenänderungen über räumlich getrennte Chirps (Chirps, die von verschiedenen Rx-Antennen empfangen werden) können zur Winkelschätzung verwendet werden.


Der Algorithmus zur Winkelschätzung mit mehreren Empfangsantennen Rx ist sehr einfach:

  1. Übertragen Sie mit einer Tx-Antenne einen Rahmen aus Chirps.


  2. Berechnen Sie die 2D-Fourier-Transformation (Reichweiten-Doppler-Bild) der von allen Rx-Antennen empfangenen Frames. Die Reichweiten-Doppler-Bilder jeder Rx-Antenne weisen Spitzen an derselben Stelle und im selben Doppler auf, jedoch mit unterschiedlicher Phase (Phasendifferenz entspricht der Entfernung zwischen den Rx-Antennen).


  3. Verwenden Sie die Phasendifferenz (ω), um den Ankunftswinkel von Objekten zu schätzen – wenden Sie die dritte Fourier-Transformation auf alle Rx-Antennen an.

Wenn Sie die dritte Fourier-Transformation auf alle Rx-Antennen anwenden, erhalten Sie einen Entfernungs-Doppler-Winkel-Würfel. Der Würfel kann als Entfernungs-Doppler-, Entfernungs-Winkel- und Winkel-Geschwindigkeits-Bild visualisiert werden.

mmWave FMCW Radardatenverarbeitung mit 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


Laden Sie ein Beispiel für mmWave-FMCW-Radardaten aus dem RAMP-CNN-Projekt herunter.

 !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


Daten aus der Datei laden.

 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


Visualisierungsfunktionen.

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


Zeigt die ADC-Daten eines Chirps an.

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

Zeigen Sie nach der Bereichs-FFT einen Chirp an.

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

Radarrahmen im Zeit- und Frequenzbereich anzeigen.

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

Ermitteln Sie Reichweite, Doppler-Effekt und Winkel aus den Radardaten.

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

Weitere Informationen

Was kommt als nächstes?

Die nächsten beiden Artikel behandeln:

  • Vor- und Nachteile der Verwendung von mmWaveFMCW-Radar im Vergleich zu einer Kamera
  • Deep-Learning-Anwendungen des mmWave-FMCW-Radarsignals