首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

利用Python实现FMCW雷达的距离多普勒估计

熟悉的标题,熟悉的内容,熟悉的...,What?竟然不是MATLAB,没错,这篇文章我们来看看如何通过Python实现FMCW雷达的距离多普勒估计。

为什么要用Python呢,作为一个千年MATLAB党(嘿嘿嘿),用久了就会发现这个东西更像是一个工具软件,拿去搞搞算法验证之类的是不可否认的强大。而Python作为一个通用的编程语言,在实际应用中的好处自然是不言而喻。通过利用一些第三方的库比如numpy,scipy和matplotlab也可以进行同样的科学计算。

OK,废话少说,速速回到正题。关于如何利用MATLAB对FMCW雷达的距离和多普勒估计前不久有写一篇,

下面我们就如何利用Python得到FMCW雷达的距离多普勒估计进行介绍。

首先是关于环境搭建,作为一个不折不扣的懒人(哭),一想到要一个个的添加库,瞬间哭瞎,于是便奔向了Anaconda。最终的环境是WINDOWS+Pycharm+Anaconda,采用了将Anaconda集合在Pycharm中的方法。

然后回到算法本身,通过对FMCW雷达接收数据分别在快时间维和慢时间维先后进行FFT处理即可得到目标的距离和多普勒估计。下面的图给出了具体的算法流程。

最后回到代码上来,具体还是得看实现。下面贴出了如何利用Python进行FMCW雷达的距离和多普勒估计的代码,在实现的过程中,我们主要用到了numpy,scipy 这两个科学计算的库以及matplotlib用于数值可视化的绘图类库。在这几个库的支撑下,利用Python与MATALB的结果几乎没有差别。

# coding=utf-8import numpy as npimport matplotlib.pyplot as pltimport scipy as spfrom mpl_toolkits.mplot3d import Axes3D# parameters settingB = 135e6 # Sweep BandwidthT = 36.5e-6 # Sweep TimeN = 512 # Sample LengthL = 128 # Chirp Totalc = 3e8 # Speed of Lightf0 = 76.5e9 # Start FrequencyNumRangeFFT = 512 # Range FFT LengthNumDopplerFFT = 128 # Doppler FFT LengthrangeRes = c/2/B # Range ResolutionvelRes = c/2/f0/T/NumDopplerFFT # Velocity ResolutionmaxRange = rangeRes * NumRangeFFT/2 # Max RangemaxVel = velRes * NumDopplerFFT/2 # Max VelocitytarR = [50, 90] # Target RangetarV = [3, 20] # Target Velocity# generate receive signalS1 = np.zeros((L, N), dtype=complex)for l in range(0, L): for n in range(0, N): S1[l][n] = np.exp(np.complex(0, 1) * 2 * np.pi * (((2 * B * (tarR[0] + tarV[0] * T * l))/(c * T) + (2 * f0 * tarV[0])/c) * (T/N) * n + (2 * f0 * (tarR[0] + tarV[0] * T * l))/c))S2 = np.zeros((L, N), dtype=complex)for l in range(0, L): for n in range(0, N): S2[l][n] = np.exp(np.complex(0, 1) * 2 * np.pi * (((2 * B * (tarR[1] + tarV[1] * T * l))/(c * T) + (2 * f0 * tarV[1])/c) * (T/N) * n + (2 * f0 * (tarR[1] + tarV[1] * T * l))/c))sigReceive = S1 + S2# range win processingsigRangeWin = np.zeros((L, N), dtype=complex)for l in range(0, L): sigRangeWin[l] = sp.multiply(sigReceive[l], sp.hamming(N).T)# range fft processingsigRangeFFT = np.zeros((L, N), dtype=complex)for l in range(0, L): sigRangeFFT[l] = np.fft.fft(sigRangeWin[l], NumRangeFFT)# doppler win processingsigDopplerWin = np.zeros((L, N), dtype=complex)for n in range(0, N): sigDopplerWin[:, n] = sp.multiply(sigRangeFFT[:, n], sp.hamming(L).T)# doppler fft processingsigDopplerFFT = np.zeros((L, N), dtype=complex)for n in range(0, N): sigDopplerFFT[:, n] = np.fft.fft(sigDopplerWin[:, n], NumDopplerFFT)

简单run一下,可以得到最终的结果为,对比一下左边MATLAB的结果,Python的科学计算结果并未有明显差别。

还在犹豫什么,快来和我一起用Py吧~

题图:Pexels,From Pixabay.

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180903G1CURM00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券