paint-brush
Derin Öğrenme: mmWave FMCW Radarlarına Sahip Uç Cihazlar Bölüm 1 - Sinyal İşlemeile@owlgrey
1,417 okumalar
1,417 okumalar

Derin Öğrenme: mmWave FMCW Radarlarına Sahip Uç Cihazlar Bölüm 1 - Sinyal İşleme

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

Çok uzun; Okumak

Milimetre dalga FMCW radarı, çevre koşullarından bağımsız olarak çok yönlü algılama sunar; kamerasız insan tespiti gibi cihazlar ve uygulamalar için idealdir. Verimli ve uygun maliyetli olan bu cihaz, mesafeyi, hızı ve yönü ölçmek için cıvıltı frekansı değişikliklerini analiz ederek tüketici elektroniği ve Wi-Fi teknolojisinde önemli ilerlemeler vaat ediyor.
featured image - Derin Öğrenme: mmWave FMCW Radarlarına Sahip Uç Cihazlar Bölüm 1 - Sinyal İşleme
Dmitrii Matveichev  HackerNoon profile picture

Milimetre dalga Frekans Modülasyonlu Sürekli Dalga (FMCW) radarı, radyo frekansı (RF) elektromanyetik dalgaları yayarak ve tespit ederek çalışır. Benzersiz özellikleri nedeniyle bu teknoloji, etkileşimli sistemler ve uygulamalar için çeşitli avantajlar sunmaktadır. Aydınlatma koşullarından, çevresel gürültüden veya hava koşullarından bağımsız olarak çalışarak hızlı ve doğru algılama yetenekleri sunar.


Üstelik çeşitli malzemelere nüfuz edebiliyor, bu da onu çeşitli cihazlara ve ayarlara entegrasyon için ideal kılıyor. Sensör, milimetrik dalga RF frekanslarında küçük, katı hal yarı iletken bir ünite (esasen bir radar çipi) olarak yapılabilir. Bu çip kompakttır, az güç tüketir, hareketli parçası yoktur ve büyük miktarlarda uygun maliyetle üretilebilir.


mmWave FMCW radarı aşağıdakiler gibi birçok cihazda kullanılabilir:

  • sanal gerçeklik (VR) aygıtları
  • giyilebilir teknoloji, akıllı giyim
  • Nesnelerin İnterneti (IoT) cihazları
  • oyun kontrolörleri
  • akıllı telefonlar, tabletler ve dizüstü bilgisayarlar gibi geleneksel elektronikler.


Ayrıca mmWave FMCW radarları çeşitli görevleri çözmek için derin öğrenme modelleriyle birlikte kullanılabilir:

  • insan varlığının tespiti
  • Kişi sayma, yerelleştirme ve izleme
  • İnsan aktivitelerinin sınıflandırılması (kişi uyur/oturur/yürür/spor yapar vb.)
  • mimik tanıma
  • yer tanıma
  • Odometri ve SLAM


Tüm bu uygulamaların kameralar olmadan, çok düşük güç tüketen bir cihazla ve nispeten küçük NN'lerle çözülebileceğini unutmayın.


Önümüzdeki birkaç yıl içinde birçok tüketici elektroniği, yukarıda belirtilen sorunları çözmek için derin öğrenme algoritmalarına sahip bu tür sensörleri aktif olarak kullanmaya başlayacak gibi görünüyor. Ayrıca 2021 yılında IEEE 802.11ау Wi-Fi standardı onaylandı. Bu standart, Wi-Fi yönlendiricilerinin mmWave FMCW radarlarıyla aynı işlevselliğe erişmesine olanak tanıyan aynı radyo frekanslarını ve çalışma ilkelerini kullanır.


Bu ve sonraki iki makale şunları kapsayacaktır:

  • mmWave FMCW radar sinyali işleme - RF sinyalinden menzil, doppler ve açı nasıl elde edilir
  • FMCW radarını kullanmanın kameraya kıyasla faydaları
  • mmWave FMCW radar sinyalinin derin öğrenme uygulamaları


Bu makalede mmWave FMCW radar sinyalinin nasıl işlendiği açıklanmaktadır. Çoğu rakamı oluşturmak için kullanılan koda Google Colab'dan veya makalenin sonunda erişilebilir.

FMCW mmDalga Radarı

mmWave FMCW radarından gelen sinyal, görüş alanındaki tüm nesnelere olan mesafeyi, hızlarını ve açısal konumlarını (azimut ve yükseklik) ölçmeyi sağlar. Radardan gelen sinyal, aşağıdaki resimde olduğu gibi görüntü eksenleri boyunca menzil/hız/açı ile çok küçük çözünürlüklü görüntüler (genellikle ~32x32 - 256x64 piksel) şeklinde işlenebilir - range-doppler (range-speed) range- açılı görüntüler.



mmWave FMCW radar sinyali, menzil doppler ve menzil açılı görüntülere ve bir kameradan alınan görünüme dönüştürüldü (Kaynak: https://github.com/ZhangAoCanada/RADDet?tab=readme-ov-file)

Sensör birkaç (1 veya daha fazla) çok yönlü verici antenden ve birkaç (1 veya daha fazla) alıcı antenden oluşur. Verici ve alıcı antenler aynı anda çalışır. Radarın görüş alanı genellikle ~120°'dir ve maksimum mesafe birkaç santimetreden onlarca metreye kadar olabilir.

Mesafe Nasıl Ölçülür?

Mesafeyi ölçmek için genellikle t1 zamanında bir sinyal göndermemiz ve t2 zamanında yansımasını almamız gerekir. Daha sonra mesafe d=(t2-t1)*c olarak hesaplanabilir; burada c , radyo dalgası ışık hızında hareket ettiğinden ışığın hızıdır.


FMCW mm-dalga radar anteni çok yönlüdür ve radar görüş alanındaki tüm nesneler için t1 ve t2 sürelerini ölçecek bir yola ihtiyaç duyar. Bunun için bir FMCW (Frekans Modülasyonlu Sürekli Dalga) sinyali kullanılır. Radarın ana bileşeni bir cıvıltıdır. Chirp, aşağıdaki şekilde gösterildiği gibi frekansı zamanla doğrusal olarak artan sinüzoidal bir radyo sinyalidir.

Cıvıltının başlangıcından sonuna kadar radyo dalgası frekansı, ilk şekilde olduğu gibi önceden belirlenmiş bir doğrusal yasaya göre modüle edilir (değiştirilir). İkinci şekil 1 ms uzunluğundaki cıvıltı örneğini göstermektedir.

Bir cıvıltı başlangıç (f_start) ve bitiş (f_end) frekansları, Bant genişliği ( B=f_end-f_start ) ve cıvıltı süresi (Tc) ile karakterize edilir. Cıvıltı süresi birkaç mikrosaniyeden birkaç milisaniyeye kadar değişir. Başlangıç frekansı, radar uygulamasına bağlı olarak genellikle ~30, 60 veya 77GHz'dir. Chirp Bant Genişliği ~0,5 GHz'den birkaç GHz'e kadar değişir.

IF sinyali, halihazırda Tx sinyali tarafından iletilen ile Rx sinyalleri tarafından alınan arasındaki farktır. (Kaynak: https://www.ti.com/content/dam/videos/external-videos/2/3816841626001/5415203482001.mp4/subassets/mmwaveSensing-FMCW-offlineviewing_0.pdf)

Alıcı (Rx) ve verici (Tx) antenler aynı anda çalışır. Sentezleyici sürekli olarak verici anten Tx'e ve miksere gönderilen bir cıvıltı üretir. Aynı zamanda Rx anteninin aldığı sinyal de miksere beslenir. Karıştırıcı, Tx'e gönderilen sinyal ile Rx tarafından alınan sinyal arasındaki farkı çıkarır.

Karıştırıcı, iki girişte sinüzoidal bir sinyal alan ve frekansı ve fazı, giriş sinyallerinin frekansları ve fazları arasındaki fark olan yeni bir sinüzoidal sinyal üreten basit bir cihazdır.

Cıvıltı sinyalinin frekansı, bilinen bir doğrusal yasaya (Eğim) göre zamanla değişir; bu, radarın önünde tek bir nesne varsa, bu nesnenin x_out sinyalini üreteceği anlamına gelir. devamlı frekans F_obj=S2d/c , burada S - cıvıltı sinyali frekansının değişim hızı (eğim), d - nesneye olan mesafe, c - ışığın hızı.

Radarın önünde tek bir nesne varsa, bu nesne sabit frekanslı F_obj=S2d/c sinyali x_out üretecektir.

Zamanı ölçmeden mikserden gelen sinyali analiz ederek radar görüş alanındaki tüm nesnelere olan mesafeyi ölçebiliriz: d=(F_obj*c)/(2*S). Literatürde x_out sinyaline 'IF sinyali' (ara frekans sinyali) adı verilir.


Sensör tasarımının ek bir avantajı: sinyalin taşıyıcı frekansı genellikle 30 GHz veya 60 GHz civarındadır. Bu frekanslardaki bir sinyali dijitalleştirmemiz gerekirse, ADC'ye yönelik çok yüksek gereksinimlerimiz olurdu. Tüm sinyal analizi, frekansı genellikle birkaç MHz civarında olan IF sinyali üzerinde yapılır ve bu, ADC gereksinimlerini önemli ölçüde rahatlatır.

Radar FoV'da Her Nesnenin Aralığını Bulmak için Fourier Dönüşümünü Kullanın

Yukarıda gösterildiği gibi, radar görüş alanındaki tüm nesnelerin mesafesini bulmak için x_out sinyalini frekans bileşenlerine ayırmamız gerekir. Fourier Dönüşümü, zaman alanı sinyalini frekans alanına dönüştüren bir algoritmadır.


IF sinyalinin Fourier Dönüşümü birden fazla tonu ortaya çıkaracaktır ve her tonun frekansı, her nesnenin radardan uzaklığıyla orantılıdır - literatürde bu Fourier dönüşümüne aynı zamanda hızlı zamanlı Fourier dönüşümü veya aralık Fourier dönüşümü de denir.

Zaman alanında bir cıvıltıya ait IF sinyali

Hızlı Fourier dönüşümünden sonra frekans alanındaki bir cıvıltıya ait IF sinyali

Sorun: Aynı mesafede birden fazla nesne varsa başımız belaya girer çünkü FFT menzili iki nesneyi ayırt etmemize izin vermez. Ancak nesneler farklı hızlarda hareket ediyorsa hızlarına göre ayrılabilirler.

Çoklu Cıvıltılarla Hız Nasıl Ölçülür?

Cıvıltılar genellikle hemen ardından veya hafif bir gecikmeyle tekrarlanır. Literatürde iki cıvıltı başlangıcı arasındaki süreye cıvıltı tekrarlama süresi denir. Birkaç cıvıltı (genellikle 16 ila 256) bir radar çerçevesi oluşturacak şekilde bir araya getirilir. A kare süresi = Cıvıltı Tekrarlama Süresi * Cıvıltı Sayısı. Tipik olarak, 1 karenin süresi onlarca mikrosaniyeden onlarca milisaniyeye kadardır.

Radar çerçevesi - birden fazla cıvıltı bir araya toplanmış. Her cıvıltı frekans modülasyonlu bir sinüzoiddir, ancak kolaylık sağlamak için her cıvıltı frekans modülasyonunun doğrusal yasası olarak tasvir edilir. Her cıvıltıdan alınan IF sinyali, FoV'deki tüm nesnelere olan mesafenin tahmin edilmesine olanak tanır

Frekans alanında görselleştirilen bir radar çerçevesi (birlikte istiflenmiş birden fazla cıvıltı). Fourier Dönüşümü her cıvıltıya ayrı ayrı uygulanır. Sarı yatay çizgiler/eğriler belirli bir aralıktaki nesneleri temsil eder; bu şekilde, ~40 ve ~50 aralığında iki nesne vardır.

Neden birden fazla cıvıltıyı bir araya getiresiniz ki? IF sinyalinin fazı, radar görüş alanındaki nesnelerin küçük ve büyük titreşimlerine karşı çok hassastır; hatta bir motorun titreşim frekansını veya bir kişinin veya hayvanın kalp atışını ölçmek için bile kullanılabilir.


Zaman içindeki faz değişikliklerini (cıvıltıdan cıvıltıya faz değişimi) analiz ederek bir nesnenin belirli bir aralıktaki hızını ölçmek mümkündür:


  • Tc zamanına göre ayrılan en az iki cıvıltıyı iletin.


  • Menzil Fourier dönüşümünden sonra, her cıvıltı aynı yerde fakat farklı aşamalarda tepe noktalarına sahip olacaktır.


  • Cıvıltı boyunca faz ω değişimi nesnenin hızına karşılık gelir.

mmWave FMCW radarıyla hızı ölçmeye yönelik algoritma çok basittir:

  1. Bir karedeki her cıvıltıya Fourier Dönüşümü uygulayın. Her frekans nesneye olan belirli bir mesafeye karşılık gelir. Bazen, her frekans belirli bir aralığa karşılık geldiğinden bu frekanslara aralık kutuları adı verilir.


  2. orijinal IF sinyali karmaşık olmayan değerlerle temsil ediliyorsa, frekansların ikinci yarısı (aralık bölmeleri) Nyquist-Shannon teoremine göre atılmalıdır.


  3. Her aralık bölmesine başka bir Fourier Dönüşümü uygulayın - zaman içindeki faz değişikliklerini, frekansın belirli bir Doppler (hız) değerlerine karşılık geleceği frekanslara ayrıştırın

Soldan sağa: Fourier dönüşümünden (menzil Fourier dönüşümü) sonra tek bir cızırtının IF sinyali, menzilden sonra radar çerçevesi Fourier dönüşümü, menzil doppler görüntüsü. Bir aralık doppler görüntüsündeki "piksellerin" değerleri, belirli bir hız ve mesafedeki genlik tepkisi ve fazdır.

Sorun: Eğer aynı mesafede, aynı hızda hareket eden iki nesne varsa, bunlar aralık doppler görüntüsünde tek bir tepe noktası oluşturacaktır. Ancak birden fazla alıcı Rx antenimiz varsa nesneleri açısal konumlarına göre ayırmak mümkün olabilir.

Açısal Konum Nasıl Ölçülür?

Daha önce açıklandığı gibi mesafedeki küçük bir değişiklik, faz değişikliğine neden olacaktır. Zaman içinde ayrılmış cıvıltılar arasındaki faz değişimi, nesnelerin hızını hesaplamak için kullanılır. Açı tahmini için uzayda ayrılan cıvıltılar (farklı Rx antenleri tarafından alınan cıvıltılar) arasındaki faz değişimi kullanılabilir.


Birden fazla alıcı anten Rx ile açı tahmin algoritması çok basittir:

  1. Bir Tx anteni ile bir cıvıltı çerçevesi iletin.


  2. Tüm Rx antenleri tarafından alınan çerçevelerin 2D Fourier Dönüşümünü (aralık doppler görüntüsü) hesaplayın. Her bir Rx anteninin aralık doppler görüntüleri aynı konumda ve dopplerde ancak farklı fazda tepe noktalarına sahip olacaktır (faz farkı, Rx antenleri arasındaki mesafeye karşılık gelir).


  3. Nesnelerin varış açısını tahmin etmek için faz farkını (ω) kullanın; üçüncü Fourier dönüşümünü tüm Rx antenlerine uygulayın.

Üçüncü Fourier Dönüşümünün tüm Rx antenlerine uygulanması, aralık doppler açılı bir küple sonuçlanacaktır. Küp, menzil-doppler, menzil-açı ve açı-hız görüntüleri olarak görselleştirilebilir.

Python ile mmWave FMCW Radar Veri İşleme

 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


RAMP-CNN projesinden mmWave FMCW radar verilerinin bir örneğini indirin.

 !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


Dosyadan veri yükleyin.

 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


Görselleştirme işlevleri.

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


Bir cıvıltıya ait bir ADC verisini gösterin.

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

Fft aralığından sonra bir cıvıltı gösterin.

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

Radar çerçevesini zaman ve frekans alanlarında gösterin.

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

Radar verilerinden menzil, doppler ve açı elde edin.

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

Daha fazla okuma

Sırada ne var?

Sonraki iki makale aşağıdakileri kapsayacaktır:

  • mmWaveFMCW radarını kameraya kıyasla kullanmanın artıları ve eksileri
  • mmWave FMCW radar sinyalinin derin öğrenme uygulamaları