Радиолокатор непрерывного действия с частотной модуляцией миллиметрового диапазона (FMCW) работает путем излучения и обнаружения радиочастотных (РЧ) электромагнитных волн. Благодаря своим уникальным свойствам эта технология предлагает ряд преимуществ для интерактивных систем и приложений. Он работает независимо от условий освещения, шума окружающей среды или погоды, обеспечивая быстрое и точное обнаружение.
Более того, он может проникать в различные материалы, что делает его идеальным для интеграции в различные устройства и настройки. Датчик может быть выполнен в виде небольшого твердотельного полупроводникового блока, работающего на радиочастотах миллиметрового диапазона — по сути, радиолокационного чипа. Этот чип компактен, потребляет мало энергии, не имеет движущихся частей и может экономично производиться в больших количествах.
Радар mmWave FMCW может использоваться во многих устройствах, таких как:
Более того, радары mmWave FMCW могут использоваться вместе с моделями глубокого обучения для решения различных задач:
Обратите внимание, что все эти приложения можно решить без камер, с устройством с очень низким энергопотреблением и относительно небольшими NN.
В ближайшие несколько лет многие производители бытовой электроники, вероятно, начнут активно использовать этот тип датчиков с алгоритмами глубокого обучения для решения вышеупомянутых проблем. Кроме того, в 2021 году был утвержден стандарт Wi-Fi IEEE 802.11ау. Этот стандарт использует те же радиочастоты и принципы работы, что позволяет маршрутизаторам Wi-Fi получать доступ к тем же функциям, что и радары mmWave FMCW.
В этой и следующих двух статьях будут рассмотрены:
В этой статье объясняется, как обрабатывается сигнал радара mmWave FMCW. Код, используемый для создания большинства рисунков, можно найти в Google Colab или в конце статьи.
Сигнал миллиметрового FMCW радара позволяет измерять расстояние до всех объектов в поле его зрения, их скорость и угловое положение (азимут и угол места). Сигнал от радара может быть обработан в виде изображений очень малого разрешения (обычно ~32x32 - 256x64 пикселей) с дальностью/скоростью/углом по осям изображения, как на рисунке ниже - дальность-допплеровский (дальность-скорость) дальность- угловые изображения.
Датчик состоит из нескольких (1 или более) всенаправленных передающих антенн и нескольких (1 или более) приемных антенн. Передающая и приемная антенны работают одновременно. Поле зрения радара обычно составляет ~120°, а максимальное расстояние может составлять от пары сантиметров до десятков метров.
Обычно нам нужно излучать сигнал в момент времени t1 и получать его отражение в момент времени t2 , чтобы измерить расстояние. Затем расстояние можно рассчитать как d=(t2-t1)*c , где c — скорость света, поскольку радиоволна распространяется со скоростью света.
Антенна радара FMCW мм-диапазона является всенаправленной, и ей необходим способ измерения времени t1 и t2 для всех объектов в поле зрения радара. Для этого используется сигнал FMCW (непрерывная волна с частотной модуляцией). Основным компонентом радара является чирп. Chirp — это синусоидальный радиосигнал, частота которого линейно увеличивается со временем, как показано на рисунке ниже.
Лихард характеризуется начальной (f_start) и конечной (f_end) частотами, полосой пропускания ( B=f_end-f_start ) и временем чирпа (Tc). Время чирпа варьируется от нескольких микросекунд до нескольких миллисекунд. Начальная частота обычно составляет ~30, 60 или 77 ГГц, в зависимости от применения радара. Полоса пропускания чирпа варьируется от ~0,5 ГГц до нескольких ГГц.
Приемная (Rx) и передающая (Tx) антенны работают одновременно. Синтезатор непрерывно генерирует один ЛИМ-сигнал, который отправляется на передающую антенну Tx и смеситель. При этом сигнал, принятый приемной антенной, также поступает на смеситель. Микшер выводит разницу между сигналом, отправленным на Tx, и сигналом, полученным Rx.
Частота ЛЧМ-сигнала изменяется во времени по известному линейному закону (Наклон), что означает, что если перед радаром находится один-единственный объект, этот объект будет генерировать сигнал x_out с
Мы можем измерить расстояние до всех объектов в поле зрения радара, просто анализируя сигнал от смесителя без измерения времени: d=(F_obj*c)/(2*S). В литературе сигнал x_out называется «сигналом ПЧ» (сигналом промежуточной частоты).
Дополнительный бонус конструкции датчика: несущая частота сигнала обычно составляет около 30ГГц или 60ГГц. Если бы нам нужно было оцифровать сигнал таких частот, у нас были бы очень высокие требования к АЦП. Весь анализ сигналов выполняется на сигнале ПЧ, частота которого обычно составляет около пары МГц, что значительно снижает требования к АЦП.
Как было показано выше, чтобы найти расстояние до всех объектов в поле зрения радара, нам необходимо разложить сигнал x_out на его частотные составляющие. Преобразование Фурье — это алгоритм, который преобразует сигнал временной области в частотную область.
Преобразование Фурье ПЧ-сигнала выявляет несколько тонов, и частота каждого тона пропорциональна дальности до каждого объекта от радара - в литературе это преобразование Фурье также называется быстрым преобразованием Фурье или преобразованием Фурье по дальности.
Проблема: если на одном расстоянии находится несколько объектов, у нас проблемы, потому что БПФ по диапазону не позволяет нам различать два объекта. Но если объекты движутся с разной скоростью, их можно разделить по скорости.
Чирикания обычно повторяются сразу друг за другом или с небольшой задержкой. В литературе время между началом двух звуковых сигналов называется временем повторения звуковых сигналов. Несколько чирпов (обычно от 16 до 256) складываются вместе, образуя радарный кадр. Время кадра = Время повторения звуковых сигналов * Число звуковых сигналов. Обычно время 1 кадра составляет от десятков микросекунд до десятков миллисекунд.
Зачем объединять несколько чириканий вместе? Фаза сигнала ПЧ очень чувствительна к малым и большим вибрациям объектов в поле зрения радара — ее можно использовать даже для измерения частоты вибрации двигателя или сердцебиения человека или животного.
Измерить скорость объекта на определенном расстоянии можно путем анализа изменения фазы во времени (изменение фазы от чирпа к чирпу):
Алгоритм измерения скорости миллиметровым FMCW радаром очень прост:
Примените преобразование Фурье к каждому чирпу в кадре. Каждая частота соответствует определенному расстоянию до объекта. Иногда эти частоты называют интервалами диапазона, поскольку каждая частота соответствует определенному диапазону.
если исходный сигнал ПЧ представлен некомплексными значениями, вторая половина частот (элементы разрешения по диапазону) должна быть отброшена в соответствии с теоремой Найквиста-Шеннона.
Примените еще одно преобразование Фурье к каждому элементу диапазона — разложите изменения фазы с течением времени на частоты, где частота будет соответствовать определенным доплеровским значениям (скорости).
Проблема: если на одном расстоянии находятся два объекта, движущиеся с одинаковой скоростью, они будут давать один пик на изображении в допплеровском режиме. Но если у нас есть несколько приемных антенн, возможно, можно будет разделить объекты по их угловому положению.
Как объяснялось ранее, небольшое изменение расстояния приведет к изменению фазы. Изменение фазы в чирпах, разделенных во времени, используется для расчета скорости объектов. Изменение фазы в ЛМ-сигналах, разнесенных в пространстве (чип-сигналы, принимаемые разными приемными антеннами), можно использовать для оценки угла.
Алгоритм оценки угла с несколькими приемными антеннами Rx очень прост:
Передайте кадр щебетаний с помощью антенны Tx.
Вычислите 2D-преобразование Фурье (допплеровское изображение диапазона) кадров, полученных всеми антеннами Rx. Дальнопплеровские изображения каждой приемной антенны будут иметь пики в одном и том же месте и доплеровский режим, но с разной фазой (разность фаз соответствует расстоянию между приемными антеннами).
Используйте разность фаз (ω), чтобы оценить угол прибытия объектов — примените третье преобразование Фурье ко всем антеннам Rx.
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
Скачать пример данных радара mmWave FMCW из проекта 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
Загрузить данные из файла.
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
Функции визуализации.
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()
Покажите данные одного АЦП щебета.
show_one_chirp(np.absolute(adc_data[:,0,0]), x_label='IF signal of a chirp')
Показывать звуковой сигнал после диапазона 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')
Покажите кадр радара во временной и частотной областях.
# 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')
Получите дальность, доплеровский режим и угол на основе данных радара.
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'] )
Следующие две статьи будут посвящены: