IWR6843ISK捕获并分析原始ADC数据

我这里使用的设备为 IWR6843ISK+DCA1000EVM+mmWave Studio

参考资料:采用不同型号雷达有不同格式的数据规定,以官方提供的文档为准

Mmwave Radar Device ADC Raw Data Capture

原始数据介绍

  1. 原始数据格式介绍:
    对于iwr6843isk和dca1000EVM设备,原始数据通过两个 LVDS lanes被捕获,Lanes1 存储两个采样点实部,Lanes2 存储两个采样点虚部,以non-interleaved的形式,储存在二进制文件中
  • non-interleaved的形式,我的理解是,对于每一个chirp,会按照先存储RX0对于该chirp的所有采样点数,再存储RX1的所有采样点数,直到 RX channel都存储完毕,再去存储下一个chirp
  • 由于只能使用两个LVDS lanes,因此iwr6843无法使用 3个RXchannel进行数据捕获,只能使用1,2,4个RXchannel捕获数据在这里插入图片描述
  1. 数据容量:
    计算公式:Total Size in Bytes = Num ADC Samples × Num RX Channels × Num Frames × Num Chirps × Num Bytes Per Sample
    对于复数的输出形式, Num Bytes Per Sample的值为4,2bytes存储实部,2bytes存储虚部
    例如:
    我这里采集的原始数据大小为4915200bytes
    在这里插入图片描述
    参数配置为:
参数名Value
ADC Samples100
RX Channels4
Frames8
Chirps128
Bytes Per Sample4

这里我启用了3个TX,分别发射3种chirp构成TDM-MIMO,故对于每一个RX接收到的chirp数应该是3*128
关于TDM-MIMO的详细信息可参考我的另一篇文章

IWR6843ISK+MMWAVE STUDIO 配置TDM-MIMO

计算可得 100*4*8*128*3*4 = 4915200 bytes 与实际相符

参考代码

matlab读取数据参考代码

%%% 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)
%% global variables
% change based on sensor config
numADCSamples = 256; % number of ADC samples per chirp
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;

python读取数据参考代码

这里我采用了openrader的开源库实现,代码更为简洁

参考资料:OpenRadar

import numpy as np
from mmwave.dataloader import DCA1000

# 雷达参数配置
# numStartFreq = 60
# numRampEndTime = 48.57
# numIdleTime = 7
numFrames = 100
numADCSamples = 119
# numSampleRate = 3000
# numFreqSlope = 74.98
numTxAntennas = 3
numRxAntennas = 4
numLoopsPerFrame = 88
numChirpsPerFrame = numTxAntennas * numLoopsPerFrame
# numRangeBins = numADCSamples
# numDopplerBins = numLoopsPerFrame
# numAngleBins = 64


# 原始数据路径
bin_path = 'D:\\Workspace_lab\\adc_data.bin'

adc_data = np.fromfile(bin_path, dtype=np.uint16)
adc_data = adc_data.reshape(numFrames, -1)
adc_data = np.apply_along_axis(DCA1000.organize, 1, adc_data, num_chirps=numChirpsPerFrame,
                                num_rx=numRxAntennas, num_samples=numADCSamples)

# 转换结果:(Frame, Chirp, numRx, ADCsample) 四维numpy数组
print(adc_data.shape)

<think>好的,用户让我介绍一下DCA1000EVM和IWR6843ISK这两个设备,以及它们的组合使用。我需要先回忆这两者的基本信息,然后整理出它们的用途、特点以及如何配合工作。 首先,DCA1000EVM是TI的一款数据采集卡,主要用于雷达传感器的原始数据捕获。而IWR6843ISK是基于毫米波雷达的评估模块,属于传感器部分。这两者通常一起使用,用于开发雷达应用,比如障碍物检测、手势识别等。 接下来,我需要分步骤介绍每个设备。对于DCA1000EVM,要说明它的主要功能,比如通过LVDS接口捕获数据,支持的雷达型号,数据传输到PC的能力,以及适用的场景。然后介绍IWR6843ISK,包括它的频段、天线配置、处理能力,以及集成的DSP和MCU,适合的应用领域。 之后,需要解释它们如何协同工作,比如DCA1000EVM连接到IWR6843ISK捕获原始ADC数据,传输到上位机进行后续处理。还要提到配套的软件工具,如MMWave Studio,以及开发流程中的步骤,比如配置参数、数据采集和分析。 应用场景部分需要列举几个典型的例子,如自动驾驶、工业检测、智能家居等,说明它们的实际用途。最后给出使用建议,比如熟悉文档、利用TI的资源,以及注意硬件连接和软件兼容性。 需要注意的是,用户可能对这两个设备的实际应用和如何开始使用感兴趣,所以需要强调开发资源和工具的支持,以及可能的应用方向。同时要确保技术细节准确,比如处理器型号、频段、天线数量等,避免错误。 检查是否有遗漏的重要信息,比如数据传输接口、处理能力、软件生态等。同时保持语言简洁,结构清晰,分点说明,便于用户理解。确保符合系统级指令中的格式要求,数学表达式和公式使用正确的LaTeX格式,但在这个问题中可能涉及较少,主要注意段落和标号的使用。</think>DCA1000EVM + IWR6843ISK 是德州仪器(TI)推出的毫米波雷达开发套件组合,主要用于雷达信号采集与算法研究。以下分模块为您解析: --- ### 一、硬件组成及功能 1. **IWR6843ISK 评估板** - **核心芯片**:搭载 TI 的 IWR6843 毫米波雷达 SoC - 工作频段:60-64GHz - 4 发射天线 + 3 接收天线(MIMO 架构) - 集成 DSP(C674x)和 ARM Cortex-R4F 处理器 - **功能特性**: - 支持 FMCW 调频连续波雷达 - 最大探测距离 80 米 - 可编程信号处理链 2. **DCA1000EVM 数据采集卡** - **核心功能**:通过 LVDS 接口实时捕获原始 ADC 数据 - **接口配置**: - 60-pin 高速接口连接雷达板 - 千兆以太网传输至 PC(最高 1Gbps) - **关键参数**: - 支持 4 通道同步采集 - 采样率最高 12.5MSPS --- ### 二、系统协同工作原理 $$ \begin{aligned} &\text{雷达信号发射} \rightarrow \text{目标反射} \rightarrow \text{接收信号} \\ &\downarrow \text{ADC 数字化} \\ &\text{DCA1000 捕获原始数据} \rightarrow \text{PC 端分析} \end{aligned} $$ 1. **开发流程示例**: - 通过 **MMWave Studio** 配置雷达参数(如 chirp 斜率、采样点数) - DCA1000 捕获原始 IQ 数据(*.bin 格式) - 使用 MATLAB/Python 进行 CFAR 检测、点云聚类等算法开发 --- ### 三、典型应用场景 1. **自动驾驶** - 前向碰撞预警(FCW) - 自动泊车辅助(APA) 2. **工业检测** - 传送带物体计数(精度达毫米级) - 液位测量(穿透非金属容器) 3. **智能家居** - 呼吸监测(误差 < 0.5 次/分钟) - 手势识别(支持 5 种预定义手势) --- ### 四、开发资源建议 1. **必备软件**: - MMWave SDK(含驱动程序) - mmWave_mcuplus_SDK(算法开发框架) 2. **调试工具**: - Uniflash 烧录工具 - TeraTerm 串口监视器 3. **参考设计**: - TI 官方提供 **People Counting** 等参考源码 - 开源社区(如 GitHub)有手势识别开源项目 --- ### 五、注意事项 1. 硬件连接时需确保 60-pin 接口正确锁紧 2. 数据采集前需校准 RF 前端(使用内置校准程序) 3. 开发环境建议使用 Windows 10(兼容性最佳) 该套件为毫米波雷达开发者提供了从硬件层到算法层的完整验证平台,特别适合 ADAS、工业物联网等领域的原型开发。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值