paint-brush
딥 러닝: mmWave FMCW 레이더를 사용한 엣지 장치 1부 - 신호 처리~에 의해@owlgrey
2,716 판독값
2,716 판독값

딥 러닝: mmWave FMCW 레이더를 사용한 엣지 장치 1부 - 신호 처리

~에 의해 Dmitrii Matveichev 10m2024/04/10
Read on Terminal Reader

너무 오래; 읽다

밀리미터파 FMCW 레이더는 환경 조건에 관계없이 다양한 감지 기능을 제공하므로 카메라 없이 사람을 감지하는 것과 같은 장치 및 애플리케이션에 이상적입니다. 효율적이고 비용 효율적인 이 장치는 처프 주파수 변화를 분석하여 거리, 속도, 방향을 측정하여 중요한 가전 제품 및 Wi-Fi 기술 발전을 약속합니다.
featured image - 딥 러닝: mmWave FMCW 레이더를 사용한 엣지 장치 1부 - 신호 처리
Dmitrii Matveichev  HackerNoon profile picture

밀리미터파 주파수 변조 연속파(FMCW) 레이더는 무선 주파수(RF) 전자기파를 방출하고 감지하는 방식으로 작동합니다. 고유한 특성으로 인해 이 기술은 대화형 시스템 및 응용 프로그램에 여러 가지 이점을 제공합니다. 조명 조건, 환경 소음 또는 날씨와 독립적으로 작동하여 빠르고 정확한 감지 기능을 제공합니다.


또한 다양한 재료에 침투할 수 있어 다양한 장치 및 설정에 통합하는 데 이상적입니다. 센서는 밀리미터파 RF 주파수의 소형 고체 반도체 장치(기본적으로 레이더 칩)로 구성될 수 있습니다. 이 칩은 크기가 작고, 전력 소모가 적고, 움직이는 부품이 없으며, 비용 효율적으로 대량 생산할 수 있습니다.


mmWave FMCW 레이더는 다음과 같은 다양한 장치에 사용할 수 있습니다.

  • 가상 현실(VR) 장치
  • 웨어러블 기술, 스마트 의류
  • 사물 인터넷(IoT) 장치
  • 게임 컨트롤러
  • 스마트폰, 태블릿, 노트북과 같은 기존 전자제품.


또한 mmWave FMCW 레이더를 딥 러닝 모델과 함께 사용하여 다양한 작업을 해결할 수 있습니다.

  • 인간 존재 감지
  • 인원수 계산, 현지화 및 추적
  • 인간 활동의 분류(사람이 잠자기/앉기/걷기/운동하기 등)
  • 제스처 인식
  • 장소 인식
  • 주행 거리 측정 및 SLAM


이러한 모든 애플리케이션은 카메라 없이, 전력 소비가 매우 낮은 장치와 상대적으로 작은 NN을 사용하여 해결할 수 있습니다.


앞으로 몇 년 안에 많은 가전제품에서는 위에서 언급한 문제를 해결하기 위해 딥러닝 알고리즘이 포함된 이러한 유형의 센서를 적극적으로 사용하기 시작할 것입니다. 또한 2021년에는 IEEE 802.11ау Wi-Fi 표준이 승인되었습니다. 이 표준은 동일한 무선 주파수 및 작동 원리를 사용하므로 Wi-Fi 라우터가 mmWave FMCW 레이더와 동일한 기능에 액세스할 수 있습니다.


이 기사와 다음 두 기사에서는 다음 내용을 다룰 것입니다.

  • mmWave FMCW 레이더 신호 처리 - RF 신호에서 범위, 도플러 및 각도를 얻는 방법
  • 카메라와 비교하여 FMCW 레이더 사용의 이점
  • mmWave FMCW 레이더 신호의 딥러닝 애플리케이션


이 문서에서는 mmWave FMCW 레이더 신호가 처리되는 방법을 설명합니다. 대부분의 그림을 생성하는 데 사용되는 코드는 Google Colab 또는 기사 끝 부분에서 액세스할 수 있습니다.

FMCW mmWave 레이더

mmWave FMCW 레이더의 신호를 통해 시야에 있는 모든 물체까지의 거리, 속도, 각도 위치(방위각 및 고도)를 측정할 수 있습니다. 레이더의 신호는 아래 그림과 같이 이미지 축을 따라 범위/속도/각도를 갖는 매우 작은 해상도 이미지(보통 ~32x32 - 256x64 픽셀)의 형태로 처리될 수 있습니다. - 범위-도플러(범위-속도) 범위- 각도 이미지.



거리 도플러 및 범위 각도 이미지로 처리된 mmWave FMCW 레이더 신호와 카메라의 뷰(출처: https://github.com/ZhangAoCanada/RADDet?tab=readme-ov-file)

센서는 여러 개(1개 이상)의 전방향 송신 안테나와 여러 개(1개 이상)의 수신 안테나로 구성됩니다. 송신 안테나와 수신 안테나는 동시에 작동합니다. 레이더 시야각은 일반적으로 ~120°이며, 최대 거리는 몇 센티미터에서 수십 미터까지 가능합니다.

거리 측정 방법

거리를 측정하려면 일반적으로 t1 시간에 신호를 방출하고 t2 시간에 반사를 수신해야 합니다. 그런 다음 거리는 d=(t2-t1)*c 로 계산할 수 있습니다. 여기서 c는 전파가 빛의 속도로 이동하기 때문에 빛의 속도입니다.


FMCW mm-wave 레이더 안테나는 무지향성이므로 레이더 시야에 있는 모든 물체에 대해 시간 t1t2를 측정하는 방법이 필요합니다. 이를 위해 FMCW(Frequency Modulated Continuous Wave) 신호가 사용됩니다. 레이더의 주요 구성 요소는 처프(Chirp)입니다. Chirp는 아래 그림과 같이 주파수가 시간에 따라 선형적으로 증가하는 정현파 무선 신호입니다.

처프의 처음부터 끝까지 전파 주파수는 첫 번째 그림과 같이 미리 정해진 선형 법칙에 따라 변조(변경)됩니다. 두 번째 그림은 1ms 길이의 처프의 예를 보여줍니다.

처프는 시작(f_start) 및 종료(f_end) 주파수, 대역폭( B=f_end-f_start ) 및 처프 시간(Tc)을 특징으로 합니다. 처프 시간의 범위는 수 마이크로초에서 수 밀리초입니다. 시작 주파수는 일반적으로 레이더 애플리케이션에 따라 ~30, 60 또는 77GHz입니다. 처프 대역폭 범위는 ~0.5GHz부터 수 GHz까지입니다.

IF 신호는 현재 Tx 신호로 전송된 신호와 Rx 신호로 수신된 신호의 차이입니다. (출처: https://www.ti.com/content/dam/videos/external-videos/2/3816841626001/5415203482001.mp4/subassets/mmwaveSensing-FMCW-offlineviewing_0.pdf)

수신(Rx) 안테나와 송신(Tx) 안테나는 동시에 작동합니다. 합성기는 송신 안테나 Tx와 믹서로 전송되는 하나의 처프를 지속적으로 생성합니다. 동시에 Rx 안테나에서 수신된 신호도 믹서로 공급됩니다. 믹서는 Tx로 전송된 신호와 Rx로 수신된 신호의 차이를 출력합니다.

믹서는 두 개의 입력에서 정현파 신호를 수신하고 주파수와 위상이 입력 신호의 주파수와 위상의 차이인 새로운 정현파 신호를 생성하는 간단한 장치입니다.

처프 신호의 주파수는 알려진 선형 법칙(기울기)에 따라 시간에 따라 변합니다. 즉, 레이더 앞에 단일 객체가 하나 있는 경우 이 객체는 다음과 같은 신호 x_out을 생성합니다. 끊임없는 주파수 F_obj=S2d/c , 여기서 S - 처프 신호 주파수의 변화율(기울기), d - 물체까지의 거리, c - 빛의 속도.

레이더 앞에 단일 물체가 있는 경우 이 물체는 일정한 주파수 F_obj=S2d/c를 사용하여 x_out 신호를 생성합니다.

시간을 측정하지 않고 믹서의 신호를 분석함으로써 레이더 시야에 있는 모든 물체까지의 거리를 측정할 수 있습니다: d=(F_obj*c)/(2*S). 문헌에서는 x_out 신호를 'IF 신호'(중간 주파수 신호)라고 합니다.


센서 설계의 추가 보너스: 신호의 반송파 주파수는 일반적으로 약 30GHz 또는 60Ghz입니다. 그러한 주파수의 신호를 디지털화해야 한다면 ADC에 대한 요구 사항이 매우 높아질 것입니다. 모든 신호 분석은 일반적으로 주파수가 약 2MHz인 IF 신호에서 수행되므로 ADC에 대한 요구 사항이 크게 완화됩니다.

푸리에 변환을 사용하여 레이더 FoV에서 각 객체의 범위 찾기

위에 표시된 것처럼 레이더 FoV에서 모든 물체까지의 거리를 찾으려면 x_out 신호를 주파수 구성 요소로 분해해야 합니다. 푸리에 변환은 시간 영역 신호를 주파수 영역으로 변환하는 알고리즘입니다.


IF 신호의 푸리에 변환은 여러 톤을 드러내며 각 톤의 주파수는 레이더의 각 물체 범위에 비례합니다. 문헌에서는 이 푸리에 변환을 고속 푸리에 변환 또는 범위 푸리에 변환이라고도 합니다.

시간 영역에서 처프의 IF 신호

고속 푸리에 변환 후 주파수 영역에서 처프의 IF 신호

문제: 동일한 거리에 여러 객체가 있는 경우 범위 FFT를 사용하면 두 객체를 구별할 수 없기 때문에 문제가 발생합니다. 그러나 물체가 다른 속도로 움직이는 경우 속도에 따라 분리할 수 있습니다.

다중 처프(Chirp)로 속도를 측정하는 방법

일반적으로 처프는 연속적으로 또는 약간의 지연을 두고 반복됩니다. 문헌에서는 두 개의 처프가 시작되는 사이의 시간을 처프 반복 시간이라고 합니다. 여러 개의 처프(보통 16~256개)가 함께 쌓여 레이더 프레임을 형성합니다. 프레임 시간 = 처프 반복 시간 * 처프 수. 일반적으로 1프레임의 시간은 수십 마이크로초에서 수십 밀리초이다.

레이더 프레임 - 여러 개의 소리가 함께 쌓여 있습니다. 모든 처프는 주파수 변조 정현파이지만 편의상 모든 처프는 주파수 변조의 선형 법칙으로 표시됩니다. 각 처프에서 수신된 IF 신호를 통해 FoV에 있는 모든 객체까지의 거리를 추정할 수 있습니다.

주파수 영역에서 시각화된 레이더 프레임(여러 개의 처프가 함께 쌓임). 푸리에 변환은 각 처프에 개별적으로 적용됩니다. 노란색 수평선/곡선은 특정 범위에 있는 개체를 나타냅니다. 이 그림에는 범위 bin ~40과 ~50에 두 개의 개체가 있습니다.

여러 개의 소리를 함께 쌓아 두는 이유는 무엇입니까? IF 신호의 위상은 레이더 시야에 있는 물체의 크고 작은 진동에 매우 민감합니다. 이는 엔진의 진동 주파수나 사람이나 동물의 심장 박동을 측정하는 데에도 사용할 수 있습니다.


시간에 따른 위상 변화(처프 간 위상 변화)를 분석하여 특정 범위에서 물체의 속도를 측정할 수 있습니다.


  • 시간 Tc로 구분된 최소 2개의 처프를 전송합니다.


  • 범위 푸리에 변환 후 각 처프는 동일한 위치에 피크가 있지만 위상은 다릅니다.


  • 처프에 따른 위상 Ω 변화는 물체의 속도에 해당합니다.

mmWave FMCW 레이더로 속도를 측정하는 알고리즘은 매우 간단합니다.

  1. 프레임의 각 처프에 푸리에 변환을 적용합니다. 각 주파수는 물체까지의 특정 거리에 해당합니다. 각 주파수는 특정 범위에 해당하므로 때때로 이러한 주파수를 범위 저장소라고 합니다.


  2. 원래 IF 신호가 복소수가 아닌 값으로 표현되는 경우 Nyquist-Shannon 정리에 따라 주파수의 후반부(범위 빈)를 버려야 합니다.


  3. 각 범위 저장소에 또 다른 푸리에 변환 적용 - 시간에 따른 위상 변화를 주파수가 특정 도플러(속도) 값에 해당하는 주파수로 분해합니다.

왼쪽에서 오른쪽으로: 푸리에 변환(범위 푸리에 변환) 후 단일 처프의 IF 신호, 범위 푸리에 변환 후 레이더 프레임, 범위 도플러 이미지. 레인지 도플러 이미지의 "픽셀" 값은 특정 속도와 거리에서의 진폭 응답과 위상입니다.

문제: 같은 거리에 같은 속도로 움직이는 두 개의 물체가 있는 경우 범위 도플러 이미지에서 단일 피크가 생성됩니다. 그러나 수신 Rx 안테나가 여러 개인 경우 각도 위치에 따라 물체를 분리하는 것이 가능할 수 있습니다.

각도 위치를 측정하는 방법

앞에서 설명한 것처럼 거리가 조금만 변해도 위상이 변합니다. 시간에 따라 분리된 처프의 위상 변화는 물체의 속도를 계산하는 데 사용됩니다. 공간에서 분리된 처프(다른 Rx 안테나에서 수신된 처프)에 대한 위상 변화를 각도 추정에 사용할 수 있습니다.


다중 수신 안테나 Rx를 사용한 각도 추정 알고리즘은 매우 간단합니다.

  1. Tx 안테나를 사용하여 처프 프레임을 전송합니다.


  2. 모든 Rx 안테나에서 수신한 프레임의 2D 푸리에 변환(범위-도플러 이미지)을 계산합니다. 각 Rx 안테나의 범위 도플러 이미지는 동일한 위치와 도플러에서 피크를 갖지만 위상은 다릅니다(위상 차이는 Rx 안테나 사이의 거리에 해당함).


  3. 위상차(Ω)를 사용하여 물체의 도착 각도를 추정합니다. 모든 Rx 안테나에 세 번째 푸리에 변환을 적용합니다.

모든 Rx 안테나에 세 번째 푸리에 변환을 적용하면 범위-도플러 각도 큐브가 생성됩니다. 큐브는 범위 도플러, 범위 각도, 각도 속도 이미지로 시각화할 수 있습니다.

Python을 사용한 mmWave FMCW 레이더 데이터 처리

 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 프로젝트 에서 mmWave FMCW 레이더 데이터의 예를 다운로드하세요.

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


처프의 ADC 데이터 하나를 표시합니다.

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

추가 자료

다음은 무엇입니까?

다음 두 기사에서는 다음 내용을 다룰 것입니다.

  • 카메라와 비교하여 mmWaveFMCW 레이더 사용의 장단점
  • mmWave FMCW 레이더 신호의 딥러닝 애플리케이션