1,毫米波雷达相关特性
主要研究:距离,速度,角度 3个维度。
特点:穿透塑料,干燥墙壁,玻璃等材料
适应雨,雾,灰层,关照,黑暗等环境。
2,距离方面4个问题
- 毫米波如何测量距离
- 如果两个物体,是怎么被同时测量出来
- 两个距离多近的物体能被识别。
- 毫米波能检测的最大距离
3,FMCW 调频连续波的概念
由初始频率F1开始,以S的速率匀速递增至F2 结束,成为调频连续波
几个概念:
带宽B = F2-F1
TC:一次递增花费的时间
S:斜率
4,混频器的概念
1)输入两个正弦波信号,输出的信号的频率是两个信号的差值。任意时间的频率都是两个输入信号的差值
2)输出信号的起始相位也是两个信号的起始差值
5,距离计算
当混频器输出的中频信号的频率 称为中频信号IF = S*t = S*2d/c 得出,距离d = IF*c/2S
6,距离分辨率
由IF> 1/Tc
S*2dres/c>1/Tc
dres>c/(TC*2S) = c/2B
7,最大距离
由ADC 采样的中频信号反映的是中频信号频率,幅度信息。
如果中频信号的频率过快,超过ADC的采样率,那么信号也会丢失。
故:IF = S2dmax/c < Fs(Fs为ADC的采样率)
得出。dmax = Fs*c/2S
8,思考题
1,以上Chirps 具有相同的带宽B=》距离分辨率一致。
2,最大距离dmax = Fs*c/2S ,由于A的斜率S只有B的一半,当需要检测相同的最大距离时,A的采样率需求也只有B的一半
3,由于斜率更高,一次采样时间更短。
9,距离公式总结
中频信号经过ADC 反馈出,频率/ADC值,经过FFT后,得到距离和幅值的波形图
由混频器输出的不同距离的中频信号,他们的峰值也是不一样
10,IWR6843手册特性
- 60Ghz~64Ghz 4G连续带宽
- 3发4收
- 内置ARM Cortex-R4F (MCU),ROM,C674x(DSP),硬件加速器(用于FFT,滤波,CFAR处理恒虚警检测)
- 支持外部QSPI加载程序
- IWR6843:内部存储,1.75MB = MSS(程序RAM 512KB)+MSS(数据RAM 192KB)+DSP (L1 RAM64KB)+DSP (L2 RAM 256KB)+L3雷达数据立方体RAM 768KB
- 接口信息:6个ADC(低采样率监控),2个SPI,2个UART,1个CAN-FD,I2C GPIO
- 双通道LVDS(用于接收原始ADC数据和调式仪表)
- 电源管理:IO支持3.3V/1.8V
- 时钟:内部40MHZ,外部40MHZ
- 功能框图
- 电源&功耗
11,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) %新建一个函数名为readDCA1000 的函数,输入fileName,输出retVal 表格
%% global variables
% change based on sensor config
numADCSamples = 256; % number of ADC samples per chirp 采样点数是256个
numADCBits = 16; % number of ADC bits per sample ADC的采样位数
numRX = 4; % number of receivers 接收器数量
numLanes = 2; % do not change. number of lanes is always 2 LVDS的平台数
isReal = 0; % set to 1 if real only data, 0 if complex data0 0 是包含虚部
%% read file
% read .bin file
fid = fopen(fileName,'r');%获取二进制文件由文件标识符 fileID
adcData = fread(fid, 'int16'); %返回一个列向量,每个元素以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;