毫米波雷达相位提取与精细化测量
毫米波 相位 数据处理
IWR1642 是TI公司推出的自足式 FMCW 雷达传感器单芯片解决方案,其工作频段为76 GHz 至 81 GHz 范围,4 GHz 的可用带宽,可实现盲点探测、车道变换辅助、交叉交通警报、驻车辅助、人员检测、简单的手势识别、车门开启器应用等诸多应用。同时IWR1642也可以通过提取中频信号的相位信息实现精细化、高分辨率的测量,以达到微弱信号检测的目的。本文就IWR1642数据保存格式、中频信号相位提取等进行分析。
1.IWR1642 bin文件格式解析
2.IWR1642 中频信号相位提取
3.IWR1642 相位分析中的分辨率问题
4.微弱信号检测
1.IWR1642 bin文件格式解析
IWR1642数据采集需要采集板配合进行,本文基于DCA1000采集板实现数据采集。通过DCA1000采集输出的文件格式为bin格式,数据的存储模式说明,TI公司官方的说明手册给出了详细的说明,在《Mmwave Radar Device ADC Raw Data Capture》文件中,根据所用的IWR1642和DCA1000的硬件组合,可以找到第一章第6部分的数据格式。
本文项目测试使用的为2发4收复数的工作模式,所以根据说明文档里面的说明,数据的排列方式如图1所示。图中首先排列第一个天线Sample1的虚部数据,接下来是Sample2的虚部数据,再往后是第一个天线的Sample1的实部数据,Sample2的实部数据,一直排列到第一天线的最后一个采样点。第一个天线排列完成后再排列第二个天线的数据,直到排列到最后一个天线。
图1 数据存储格式
说明文档中其实按照所选择的硬件组合,给出了数据解析的案例例程,按照我们所选择的IWR1648和DCA1000,说明书里给出的程序如下,原程序中有一处变量定义错误,已经进行了更改。
%%% This script is used to read the binary file produced by the DCA1000
%%% and Mmwave Studio
%%% Command to run in Matlab GUI -readDCA1000('<ADC capture bin file>')
function [retVal] = readDCA1000(fileName,numADCSamples)
%% global variables
% change based on sensor config
numADCBits = 16; % number of ADC bits per sample
numRX = 4; % number of receivers
numLanes = 2; % do not change. number of lanes is always 2
isReal = 0; % set to 1 if real only data, 0 if complex data0
%% read file
% read .bin file
fid = fopen(fileName,'r');
adcData = fread(fid, 'int16');
% if 12 or 14 bits ADC per sample compensate for sign extension
if numADCBits ~= 16
l_max = 2^(numADCBits-1)-1;
adcData(adcData > l_max) = adcData(adcData > l_max) - 2^numADCBits;
end
fclose(fid);
fileSize = size(adcData, 1);
% real data reshape, filesize = numADCSamples*numChirps
if isReal
numChirps = fileSize/numADCSamples/numRX;
LVDS = zeros(1, fileSize);
%create column for each chirp
LVDS = reshape(adcData, numADCSamples*numRX, numChirps);
%each row is data from one chirp
LVDS = LVDS.';
else
% for complex data
% filesize = 2 * numADCSamples*numChirps
numChirps = fileSize/2/numADCSamples/numRX;
LVDS = zeros(1, fileSize/2);
%combine real and imaginary part into complex data
%read in file: 2I is followed by 2Q
counter = 1;
for i=1:4:fileSize-1
LVDS(1,counter) = adcData(i) + sqrt(-1)*adcData(i+2); LVDS(1,counter+1) = adcData(i+1)+sqrt(-1)*adcData(i+3); counter = counter + 2;
end
% create column for each chirp
LVDS = reshape(LVDS, numADCSamples*numRX, numChirps);
%each row is data from one chirp
LVDS = LVDS.';
end
%organize data per RX
adcData = zeros(numRX,numChirps*numADCSamples);
for row = 1:numRX
for i = 1: numChirps
adcData(row, (i-1)*numADCSamples+1:i*numADCSamples) = LVDS(i, (row-1)*numADCSamples+1:row*numADCSamples);
end
end
%return receiver data
retVal = adcData;
2.IWR1642 中频信号相位提取
经过处理的信号经过FFT运算可以得到探测目标与雷达的距离、方向信息,并可以计算多普勒信息推算目标的运动信息。以上的计算都是基于FFT后极大值的频域信息来进行计算,但目标更加精确的位置信息则更多在于信号的相位中。
对于采集信号可以先进行FFT,然后提取FFT后最大值位置处的相位信息,则可以根据公式计算得到信号的精细化测量。
此处还需要注意一个地方:相位信息的范围应该在[-π π]之间,所以得到相位信息后在按照公式推算精细化距离之前,需要对相位进行解卷绕。解卷绕的计算程序如下:
function result = myunwrap(source)
len = length(source);
buffer = source;
for ii = 2:1:len
if(source(ii) - source(ii-1) > pi)
buffer(ii) = buffer(ii) - 2*pi;
end
if(source(ii) - source(ii-1) < -pi)
buffer(ii) = buffer(ii) + 2*pi;
end
end
buffer(1) = source(1);
result = source;
end
经过解卷绕之后得到的相位信息,按照以下公式可以推算得到精细化的距离信息。
ϕ ∗ λ 4 ∗ π \frac{\phi * \lambda}{4* \pi} 4∗πϕ∗λ
3.IWR1642 相位分析中的分辨率问题
经过处理得到的距离数据,采样率不能再按照中频信号的采样频率或者程序中设置的采样频率进行计算。而需要重新按照设置参数进行推算,下面举例进行说明:
参数名称 | 参数数值 |
---|---|
chirp总周期 | 50ms |
采样点数 | 256 |
每帧脉冲数 | 250 |
调频周期 | 60us |
按照以上的参数设置,则可以得到:频率分辨率为1s/50ms = 20Hz,因为每帧有250个脉冲,则最后的采样频率应该为:Fs = 20*250 = 5000Hz,时域中每个点之间的间隔为:ts = 1/Fs = 200us。
但在实际应用中,实际采样频率需要除以以上的占空比参数才能使计算频率与发射参数对应。
4.微弱信号检测
测试中我们使用音频信号作为发射源,声音使用单频1000Hz、400Hz等,测试结果如下所示。
/font>