मिलीमीटर-वेव फ़्रीक्वेंसी-मॉड्यूलेटेड कंटीन्यूअस-वेव (FMCW) रडार रेडियो फ़्रीक्वेंसी (RF) इलेक्ट्रोमैग्नेटिक तरंगों का उत्सर्जन और पता लगाकर काम करता है। अपने अनूठे गुणों के कारण, यह तकनीक इंटरैक्टिव सिस्टम और अनुप्रयोगों के लिए कई लाभ प्रदान करती है। यह प्रकाश की स्थिति, पर्यावरणीय शोर या मौसम से स्वतंत्र रूप से संचालित होता है, जो तेज़ और सटीक संवेदन क्षमता प्रदान करता है।
इसके अलावा, यह विभिन्न सामग्रियों में प्रवेश कर सकता है, जिससे यह विभिन्न उपकरणों और सेटिंग्स में एकीकृत करने के लिए आदर्श बन जाता है। सेंसर को मिलीमीटर-वेव आरएफ आवृत्तियों पर एक छोटी, ठोस-अवस्था अर्धचालक इकाई के रूप में बनाया जा सकता है - अनिवार्य रूप से, एक रडार चिप। यह चिप कॉम्पैक्ट है, कम बिजली की खपत करती है, इसमें कोई हिलने वाला हिस्सा नहीं है, और इसे बड़ी मात्रा में लागत-प्रभावी तरीके से उत्पादित किया जा सकता है।
एमएमवेव एफएमसीडब्ल्यू रडार का उपयोग कई उपकरणों में किया जा सकता है, जैसे:
इसके अलावा, mmWave FMCW रडार का उपयोग विभिन्न कार्यों को हल करने के लिए डीप लर्निंग मॉडल के साथ किया जा सकता है:
ध्यान दें कि इन सभी अनुप्रयोगों को कैमरे के बिना, बहुत कम बिजली खपत वाले उपकरण और अपेक्षाकृत छोटे एनएन के साथ हल किया जा सकता है।
अगले कुछ वर्षों में, कई उपभोक्ता इलेक्ट्रॉनिक्स संभवतः उपर्युक्त समस्याओं को हल करने के लिए डीप लर्निंग एल्गोरिदम के साथ इस प्रकार के सेंसर का सक्रिय रूप से उपयोग करना शुरू कर देंगे। इसके अतिरिक्त, 2021 में, IEEE 802.11ау वाई-फाई मानक को मंजूरी दी गई थी। यह मानक समान रेडियो आवृत्तियों और ऑपरेटिंग सिद्धांतों का उपयोग करता है, जिससे वाई-फाई राउटर को mmWave FMCW रडार के समान कार्यक्षमता तक पहुंचने में सक्षम बनाता है।
यह तथा अगले दो लेख निम्नलिखित विषयों पर चर्चा करेंगे:
यह लेख बताता है कि mmWave FMCW रडार सिग्नल को कैसे प्रोसेस किया जाता है। ज़्यादातर आंकड़े बनाने के लिए इस्तेमाल किए जाने वाले कोड को Google Colab या लेख के अंत में देखा जा सकता है।
mmWave FMCW रडार से सिग्नल इसके दृश्य क्षेत्र में सभी वस्तुओं की दूरी, उनकी गति और कोणीय स्थिति (दिगंश और ऊंचाई) को मापने में सक्षम बनाता है। रडार से सिग्नल को बहुत छोटे रिज़ॉल्यूशन वाली छवियों (आमतौर पर ~ 32x32 - 256x64 पिक्सल) के रूप में संसाधित किया जा सकता है, जिसमें छवि अक्षों के साथ रेंज/स्पीड/एंगल होता है जैसा कि नीचे दी गई तस्वीर में है - रेंज-डॉपलर (रेंज-स्पीड) रेंज-एंगल इमेज।
सेंसर में कई (1 या अधिक) सर्वदिशात्मक संचारण एंटेना और कई (1 या अधिक) प्राप्त करने वाले एंटेना होते हैं। संचारण और प्राप्त करने वाले एंटेना एक साथ काम करते हैं। रडार का दृश्य क्षेत्र आमतौर पर ~120° होता है, और अधिकतम दूरी कुछ सेंटीमीटर से लेकर दसियों मीटर तक हो सकती है।
दूरी मापने के लिए हमें आमतौर पर समय t1 पर सिग्नल उत्सर्जित करना होता है और समय t2 पर उसका प्रतिबिंब प्राप्त करना होता है। फिर दूरी की गणना d=(t2-t1)*c के रूप में की जा सकती है, जहाँ c प्रकाश की गति है क्योंकि रेडियो तरंग प्रकाश की गति से यात्रा करती है।
FMCW mm-वेव रडार एंटीना सर्वदिशात्मक है, और इसे रडार के दृश्य क्षेत्र में सभी वस्तुओं के लिए समय t1 और t2 को मापने का एक तरीका चाहिए। इसके लिए एक FMCW (फ़्रीक्वेंसी मॉड्यूलेटेड कंटीन्यूअस वेव) सिग्नल का उपयोग किया जाता है। रडार का मुख्य घटक चिरप है। चिरप एक साइनसॉइड रेडियो सिग्नल है जिसकी आवृत्ति समय के साथ रैखिक रूप से बढ़ती है, जैसा कि नीचे दिए गए चित्र में दिखाया गया है।
चिरप की विशेषता शुरुआत (f_start) और अंत (f_end) आवृत्तियों, बैंडविड्थ ( B=f_end-f_start ) और चिरप समय (Tc) से होती है। चिरप समय कुछ माइक्रोसेकंड से लेकर कुछ मिलीसेकंड तक होता है। रडार एप्लिकेशन के आधार पर, शुरुआत की आवृत्ति आमतौर पर ~30, 60 या 77GHz होती है। चिरप बैंडविड्थ ~0.5GHz से लेकर कई GHz तक होती है।
रिसीविंग (Rx) और ट्रांसमिटिंग (Tx) एंटेना एक साथ काम करते हैं। सिंथेसाइज़र लगातार एक चिरप उत्पन्न करता है जिसे ट्रांसमिटिंग एंटेना Tx और मिक्सर को भेजा जाता है। उसी समय, Rx एंटेना द्वारा प्राप्त सिग्नल भी मिक्सर को खिलाया जाता है। मिक्सर Tx को भेजे गए सिग्नल और Rx द्वारा प्राप्त सिग्नल के बीच के अंतर को आउटपुट करता है।
चिर्प सिग्नल की आवृत्ति एक ज्ञात रैखिक नियम (ढलान) के अनुसार समय के साथ बदलती है, जिसका अर्थ है कि यदि रडार के सामने एक भी वस्तु है, तो यह वस्तु एक संकेत x_out उत्पन्न करेगी।
हम समय को मापे बिना मिक्सर से सिग्नल का विश्लेषण करके रडार के दृश्य क्षेत्र में सभी वस्तुओं की दूरी माप सकते हैं: d=(F_obj*c)/(2*S)। साहित्य में, x_out सिग्नल को 'IF सिग्नल' (मध्यवर्ती आवृत्ति सिग्नल) कहा जाता है।
सेंसर डिज़ाइन का एक अतिरिक्त बोनस: सिग्नल की वाहक आवृत्ति आमतौर पर 30GHz या 60Ghz के आसपास होती है। अगर हमें ऐसी आवृत्तियों के सिग्नल को डिजिटाइज़ करना होता, तो हमें ADC के लिए बहुत ज़्यादा ज़रूरतें होतीं। सभी सिग्नल विश्लेषण IF सिग्नल पर किए जाते हैं, जिसकी आवृत्ति आमतौर पर कुछ मेगाहर्ट्ज के आसपास होती है, जो ADC के लिए ज़रूरतों को काफ़ी हद तक कम कर देता है।
जैसा कि ऊपर दिखाया गया था, रडार FoV में सभी ऑब्जेक्ट्स की दूरी का पता लगाने के लिए, हमें सिग्नल x_out को उसके फ़्रीक्वेंसी घटकों में विघटित करना होगा। फूरियर ट्रांसफ़ॉर्म एक एल्गोरिथ्म है जो टाइम डोमेन सिग्नल को फ़्रीक्वेंसी डोमेन में परिवर्तित करता है।
आईएफ सिग्नल का फूरियर रूपांतरण कई टोन प्रकट करेगा, और प्रत्येक टोन की आवृत्ति रडार से प्रत्येक ऑब्जेक्ट की सीमा के समानुपाती होती है - साहित्य में, इस फूरियर रूपांतरण को फास्ट टाइम फूरियर रूपांतरण या रेंज फूरियर रूपांतरण भी कहा जाता है।
समस्या: यदि एक ही दूरी पर कई वस्तुएँ हैं तो हम मुश्किल में पड़ सकते हैं क्योंकि रेंज FFT हमें दो वस्तुओं के बीच अंतर करने की अनुमति नहीं देगा। लेकिन अगर वस्तुएँ अलग-अलग गति से चलती हैं, तो उन्हें गति से अलग किया जा सकता है।
चहचहाट आमतौर पर एक दूसरे के तुरंत बाद या थोड़ी देरी से दोहराई जाती है। साहित्य में, दो चहचहाटों की शुरुआत के बीच के समय को चहचहाट दोहराव समय कहा जाता है। कई चहचहाट (आमतौर पर 16 से 256) को एक साथ जोड़कर एक रडार फ्रेम बनाया जाता है। एक फ्रेम समय = चहचहाट दोहराव समय * चहचहाट संख्या। आम तौर पर, 1 फ्रेम का समय दसियों माइक्रोसेकंड से लेकर दसियों मिलीसेकंड तक होता है।
एक साथ कई चहचहाटें क्यों? आईएफ सिग्नल का चरण रडार क्षेत्र में वस्तुओं के छोटे और बड़े कंपन के प्रति बहुत संवेदनशील है - इसका उपयोग इंजन की कंपन आवृत्ति या किसी व्यक्ति या जानवर के दिल की धड़कन को मापने के लिए भी किया जा सकता है।
समय के साथ चरण परिवर्तनों (चिरप से चिरप तक चरण परिवर्तन) का विश्लेषण करके किसी वस्तु के वेग को किसी विशेष सीमा पर मापना संभव है:
एमएमवेव एफएमसीडब्ल्यू रडार से गति मापने का एल्गोरिदम बहुत सरल है:
फ्रेम में प्रत्येक चिरप पर फूरियर ट्रांसफॉर्म लागू करें। प्रत्येक आवृत्ति ऑब्जेक्ट से एक विशिष्ट दूरी से मेल खाती है। कभी-कभी, इन आवृत्तियों को रेंज बिन कहा जाता है क्योंकि प्रत्येक आवृत्ति एक विशिष्ट रेंज से मेल खाती है
यदि मूल IF सिग्नल को गैर-जटिल मानों के साथ दर्शाया जाता है, तो आवृत्तियों (रेंज बिन) के दूसरे आधे हिस्से को नाइक्विस्ट-शैनन प्रमेय के अनुसार त्याग दिया जाना चाहिए
प्रत्येक रेंज बिन पर एक और फूरियर ट्रांसफॉर्म लागू करें - समय के साथ चरण परिवर्तनों को आवृत्तियों में विघटित करें जहां आवृत्ति एक विशिष्ट डॉपलर (वेग) मानों के अनुरूप होगी
समस्या: यदि समान दूरी पर स्थित दो वस्तुएं समान गति से घूम रही हों, तो वे रेंज-डॉपलर छवि में एक ही शिखर उत्पन्न करेंगी। लेकिन यदि हमारे पास कई रिसीविंग Rx एंटेना हैं, तो वस्तुओं को उनकी कोणीय स्थिति के आधार पर अलग करना संभव हो सकता है
जैसा कि पहले बताया गया है, दूरी में एक छोटा सा परिवर्तन चरण परिवर्तन का कारण बनेगा। समय में अलग-अलग चिरप्स में चरण परिवर्तन का उपयोग वस्तुओं के वेग की गणना करने के लिए किया जाता है। अंतरिक्ष में अलग-अलग चिरप्स (विभिन्न Rx एंटेना द्वारा प्राप्त चिरप्स) में चरण परिवर्तन का उपयोग कोण अनुमान के लिए किया जा सकता है।
एकाधिक प्राप्त करने वाले एंटेना Rx के साथ कोण आकलन एल्गोरिथ्म बहुत सरल है:
एक Tx एंटीना के साथ चहचहाहट का एक फ्रेम संचारित करें।
सभी Rx एंटेना द्वारा प्राप्त फ़्रेमों के 2D फूरियर ट्रांसफ़ॉर्म (रेंज-डॉपलर छवि) की गणना करें। प्रत्येक Rx एंटेना की रेंज-डॉपलर छवियों में एक ही स्थान और डॉपलर में चोटियाँ होंगी, लेकिन अलग-अलग चरण के साथ (चरण अंतर 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
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')
रेंज एफएफटी के बाद एक चिरप दिखाएं।
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'] )
अगले दो लेखों में निम्नलिखित विषयों पर चर्चा की जाएगी: