ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

DCA1000EVM毫米波雷达原始ADC数据采集与MATLAB后处理全流程解析

DCA1000EVM毫米波雷达原始ADC数据采集与MATLAB后处理全流程解析 1. DCA1000EVM到底解决了什么问题从“点云输出”到“原始ADC数据”很多朋友第一次接触毫米波雷达拿到手的是EVM板卡和TI官方的mmWave SDK跑通了demo之后PC端通过串口能看到目标点云、距离、速度这些结果觉得“雷达不过如此”。但真正要做到算法层面的创新、做高精度的信号处理、或者把雷达点云性能压榨到极限你会发现官方demo给到你的只是一层处理完的结果你根本看不到ADC采集到的原始数据是什么样的。这个就是DCA1000EVM存在的意义——它是TI毫米波雷达传感器xWR1443、xWR1843、xWR6843等和PC之间的桥接板卡。雷达EVM板上的芯片把模拟前端采集到的原始ADC数据通过LVDS接口输出而你电脑的USB口、网口都没法直接解LVDS协议DCA1000EVM相当于一个协议转换器把LVDS高速数据接收下来通过FPGA做缓冲和组包然后以UDP包的形式从以太网口发出来。PC端收到这些以太网数据存成bin文件这时候你就拿到了最底层的原始数据后续DFP雷达数据流处理、MATLAB算法开发、深度学习特征提取想怎么处理都行。这套系统我前前后后折腾了两周从一块新的DCA1000EVM IWR1443BOOST到完全跑通MATLAB后处理中间踩的坑非常多。但我可以负责任地说只要你理解了整条链路的每个环节在做什么配置其实是流程化的事。这篇文章我会按实际操作的顺序把从硬件连接、mmWave Studio参数配置、数据采集到MATLAB读取与FFT后处理的完整路径给你捋一遍。很多人以为这篇文章的主要内容是“在mmWave Studio里点几个按钮”但实际上真正的技术难点在后面——数据格式的理解。我第一次拿到bin文件用MATLAB直接读出来的数完全不对画出来的距离谱一塌糊涂。后来仔细研究了LVDS数据排列才发现DCA1000的输出格式和你想的“通道挨着通道排”并不一样这里藏着大坑。2. 硬件环境准备与驱动排查第一次连接最容易翻车的环节2.1 板卡连接与供电检查先说硬件。DCA1000EVM主板上有一个60pin的高密度连接器通过它和雷达EVM板连接。市面上常见的搭配组合是这样的雷达EVM板DCA1000接口注意事项IWR1443BOOST60pin连接器需要拆除板上的跳线帽调整IWR6843BOOST60pin连接器注意ES1.0和ES2.0芯片版本差异IWR1843BOOST60pin连接器需确认LVDS模式使能连接的时候一个重要的细节DCA1000EVM的供电和雷达板供电是独立的。DCA1000用12V电源适配器供电雷达板单独用5V供电通过板载Micro USB或者外部电源。我第一次只给DCA1000上了电结果mmWave Studio里SPI连接一直失败排查了很久才发现雷达板根本没供电。另一个常见问题是连接器方向。60pin连接器是盲插设计但板子上有丝印标注插的时候要确保两边板卡丝印方向一致。插好之后用手轻轻按压确保完全贴合连接器接触不良会导致后续LVDS链路时断时续这类问题在数据采集中段才暴露排查起来最痛苦。2.2 驱动、IP与网络配置三板斧DCA1000EVM上电之后首先在设备管理器里确认两个东西有没有识别到一个是通过USB转出来的串口设备通常是“XDS110 Class Application/User UART”用于SPI命令通信另一个是网络适配器DCA1000板载了一个以太网接口插上网线后在网络连接里能看到一个新的本地连接。然后你需要手动配置PC的以太网IP。DCA1000的默认IP是192.168.33.180PC端设置成同一个网段的静态IP一般设为192.168.33.30子网掩码255.255.255.0。注意不要开DHCPDCA1000是固定IP的你哪怕设置成了自动获取它也不会从路由器那里拿地址。配置完之后在命令行ping一下192.168.33.180能通就说明以太网链路没问题。这里有个小经验如果你用的笔记本同时连着Wi-Fi和有线网一定要确认有线网卡没有被系统判定为“无Internet连接”而自动禁用Windows的网卡电源管理也可能在网络空闲时把网卡休眠掉导致采集中途数据断流。建议在网络适配器的高级设置里关掉“允许计算机关闭此设备以节约电源”。2.3 mmWave Studio版本选择与软件依赖TI官方的mmWave Studio注意官方写作mmWave Studio不是mmwave studio目前常见版本是v2.0和v2.1各自配套的固件、SDK版本要求不同。我的建议是直接使用与你的雷达芯片SDK版本对应的mmWave Studio版本能少踩不少坑。安装路径上有一个很重要的注意点mmWave Studio对中文路径和空格支持不好建议直接装在默认路径也就是C盘根目录下的C:\ti\mmwave_studio_02_01_01_00这类路径。我见过有人装在D:\程序\xxx下面结果固件加载的时候路径解析出错连初始化都过不去。第一次启动mmWave Studio它会弹出一个命令行窗口和一个GUI窗口。命令行窗口可以看到SPI连接、固件写入的日志输出这个窗口千万别关后排查问题基本就看它。启动完成后GUI里右侧面板是状态面板会列出连接的设备比如IWR1443如果这里显示不出来说明上面的SPI和供电链路有问题。3. mmWave Studio配置全流程从固件加载到数据落盘3.1 先理解mmWave Studio做的事情mmWave Studio本质上是TI为开发调试提供的一体化工具它做的事情可以拆成三层通过SPI向雷达芯片写入固件包括MSS主控固件和BSS射频固件让芯片进入可配置状态通过SPI下发chirp配置参数告诉射频前端起始频率、斜率、采样点数、chirp周期等通过以太网接收DCA1000转发出来的原始ADC数据选择直接存储到本地bin文件或实时显示。理解了这三层你就能明白为什么SPI连接失败会影响整个流程。SPI链路是PC到雷达芯片的控制通道而以太网链路是DCA1000到PC的数据通道。两条链路互相独立但缺一个都跑不起来。3.2 固件加载的关键选项卡打开mmWave Studio后操作分三个区先配置DCA1000和雷达板连接以太网配置区→ 再加载固件和配置参数Sensor Config区 → 最后采集数据Data Capture区。在右侧选择板卡类型为IWR1443BOOST或者你对应的板子然后在“DCA1000 Firmware”一栏里选择DCA1000对应的固件通常是DCA1000_fw.bin点击Load。接着在“Sensor Config”里如果用的是mmWave SDK里的demo固件可以直接加载现成的xwr14xx_mmw_demo.bin也可以用mmWave Studio自带的xwr14xx_radarss.bin和xwr14xx_masterss.bin分别加载BSS和MSS固件。操作顺序是这样的点击Set按钮配置以太网连接参数确保PC和DCA1000的IP正确点击Connect按钮这时候读取DCA1000的FPGA版本号和状态日志窗口中会显示连接成功依次点击Load加载DCA1000固件、BSS固件、MSS固件等待日志窗口显示固件加载完成同时触发一次SPI Connect建立PC与雷达芯片的SPI通信。我踩过的一个坑是加载DCA1000固件的顺序和加载雷达固件的顺序反了。DCA1000的FPGA固件必须先加载因为它初始化了以太网收发的逻辑通道。如果你先给雷达加载了固件再初始化DCA1000虽然SPI连接可能成功但采集开始后UDP包根本没有发出来。3.3 chirp参数配置每组数值背后的物理含义mmWave Studio的Sensor Config里有一组参数定义它直接决定了你雷达发射什么波形、采集什么样的数据。以IWR1443为例一个常见的中短距离配置参数如下表参数名示例值说明Start Frequency77 GHz起始频率Frequency Slope29.982 MHz/us调频斜率Samples per Chirp128单chirp的ADC采样点数Chirps per Frame128单帧内的chirp数量Frame Duration40 ms帧周期ADC Start Time6 us采样窗口的起始延迟RX Gain30 dB接收增益你可能对“为什么采样点数设128、chirp数设128”有疑问。这两个数决定了距离维和速度维的分辨率。距离分辨率由带宽决定速度分辨率由总观测时长决定。mmWave Studio里Samples per Chirp直接决定了一个chirp内采样的数据点数NChirps per Frame决定了多普勒维的FFT点数M。如果你想提高距离分辨率可以增大采样点数想提高速度分辨率就增大chirp数量。这两个值过大会导致单帧数据量膨胀、处理时间变长、以太网传输带宽压力变大。实际配置的时候我会先算一下数据量。IWR1443是4RXADC数据用16bit复数IQ表示每个采样点实际上有I和Q两个分量。那么单帧的数据量就是单chirp采样点数 128RX通道数 4则单chirp的数据量 128 × 4 × 2I/Q两个分量× 2字节 2048字节单帧chirp数 128则单帧总数据量 2048 × 128 262144字节约256KB如果帧率25fps每秒数据量约6.25MB以太网千兆口完全没压力。这些数值不需要死记但一定要理解它们前后是如何关联的后面MATLAB重排的时候你就知道为什么文件是按“chirp块”组织的了。3.4 单次触发采集与连续采集配置完参数后在Data Capture区操作。选择采集模式为单次Single或者连续Continuous。单次模式适合验证链路是否跑通点一下Trigger按钮DCA1000会返回一个UDP包同时把原始数据写入你指定的bin文件。连续模式适合实际数据采集比如要做后期算法验证可能要连续采集上百帧数据。有一个细节值得注意点击Trigger之前先设置好文件保存路径和文件名。我习惯用D:/radar_data/capture_01.bin这种格式命名方便区分不同实验条件。bin文件是纯二进制裸数据不包含任何配置信息所以每次采集完最好把对应的chirp配置参数用文本文件一起保存下来。采集完成后日志窗口会显示数据包数量、总字节数。对比一下理论计算的数据量和接收到的数据量如果偏差很大就说明UDP传输有丢包。丢包会直接导致后处理的图像里出现“撕裂”。一般丢包原因是PC网卡处理性能不足或者DCA1000的网线接触不良极少数情况是电磁干扰。4. 采集文件的内部解剖DCA1000的bin文件数据排列规则4.1 从LVDS到UDP原始数据的封装过程在动手写MATLAB代码之前必须花时间理解bin文件里的数据是怎么排列的这是整个链路中最重要的认知。DCA1000里的FPGA从LVDS接口接收的数据不是直接转发的它内部做了字节拼接和格式转换。默认情况下LVDS输出的数据位宽可能是16bit或8bitADC采样数据有两种格式复数形式I和Q交替和实数形式。大多数场景使用的是复数形式。一个ADC采样点的复数表示成(I_data, Q_data)两个16bit数。DCA1000收到后会把数据组合为32bit字两个16bit数拼成一个32bit。当它通过以太网UDP发送时按照小端序排列字节。这里有个初学者经常犯迷糊的点文件里存的顺序到底是先按chirp排还是先按RX通道排。答案是按chirp排。也就是说文件的整个数据流是第1个chirp的4个RX通道所有采样点第2个chirp的4个RX通道所有采样点...第128个chirp的4个RX通道所有采样点。其中每个chirp内部再按RX通道顺序排列RX0的N个采样点RX1的N个采样点RX2的N个采样点RX3的N个采样点。每个采样点内又是I数据在前、Q数据在后。把这个结构翻译成伪代码就是for chirp_idx in 1..numChirps: for rx_idx in 1..numRx: for sample_idx in 1..numSamples: output I_data[rx_idx][sample_idx] output Q_data[rx_idx][sample_idx]4.2 MATLAB读取的三种思路与关键函数理解了排列规则MATLAB读取的思路就很清晰了。最简单的办法是fopen fread一次性读出所有数据然后通过reshape和permute调整维度顺序。下面是我实测可用的数据读取代码% 配置参数需要与mmWave Studio中的设置一致 numRx 4; % RX通道数 numSamples 128; % 每chirp采样点数 numChirps 128; % 每帧chirp数 numFrames 1; % 帧数 % 读取bin文件 fid fopen(capture_01.bin, rb); rawData fread(fid, int16); % 16bit有符号整数 fclose(fid); % 原始数据中I和Q交替排列先拆开 % 每两个int16数为一个复数采样点 numIQPairs length(rawData) / 2; iqData complex(rawData(1:2:end), rawData(2:2:end)); % 重排列为 [numSamples, numRx, numChirps, numFrames] dataCube reshape(iqData, [numSamples, numRx, numChirps, numFrames]); % 调整维度顺序为 [numSamples, numChirps, numRx, numFrames] dataCube permute(dataCube, [1, 3, 2, 4]);% 如果采集了多帧上面的reshape会直接把所有帧按顺序展开 % 但实际上在连续采集模式下每帧数据之间可能有UDP包间隔 % 为保险起见逐帧读取每次跳到对应帧的起始偏移量 frameSize numSamples * numRx * numChirps * 2; % 复数点个数 for f 1:numFrames offset (f-1) * frameSize * 2; % 乘以2因为int16占2字节 fseek(fid, offset, bof); rawDataFrame fread(fid, frameSize * 2, int16); iqDataFrame complex(rawDataFrame(1:2:end), rawDataFrame(2:2:end)); frameCube reshape(iqDataFrame, [numSamples, numRx, numChirps]); dataCube(:,:,:,f) permute(frameCube, [1, 3, 2]); end4.3 一个容易致命的数据格式坑符号位处理上面代码用了int16作为读取格式这是一个关键细节。ADC采样得到的原始数据是二进制的补码表示要用有符号数解析才能还原正负电压值。如果错误使用了uint16所有负值会变成很大的正数最后画出的距离谱会出现大量伪峰。另一个隐藏的坑是数据位宽的实际情况。虽然DCA1000默认以16bit输出但有些mmWave Studio版本或配置下LVDS数据位宽可能配置为8bit此时DCA1000在FPGA内部会把8bit数据符号扩展为16bit实际上你读出来的还是int16格式。但如果mmWave Studio里的“Data Format”选择的是“Real”而非“Complex”那么数据里不会交替出现I和Q两个分量而是每样本只有1个实数值。这时候上面代码complex(rawData(1:2:end), rawData(2:2:end))的处理就完全错了。所以每次采集后第一件事就是检查文件大小和理论计算值做对比复数模式4RX128采样点128 chirp1帧文件大小应为 128×4×128×2×2 262144字节如果实际文件只有一半大小说明可能配成了实数模式如果实际文件是两倍大小说明每采样点里除了IQ还混入了额外的校验字节。5. MATLAB后处理实战从原始数据到Range-Doppler图像5.1 为什么首选MATLAB而不是Python虽然Python在深度学习领域更流行但雷达信号处理这块MATLAB的优势仍然明显内置的信号处理工具箱、丰富的FFT优化、矩阵操作直白尤其phased阵列信号处理工具箱里封装了很多雷达专用算法。关键是MATLAB的代码和理论推导直接对应你不需要像Python那样自己去实现加窗、FFT移位这些细节。MATLAB处理raw ADC数据的核心流程是读取bin文件重排为[采样点, chirp, RX]的三维数据体距离维FFT对每个chirp、每个RX通道沿采样点方向做FFT得到目标的距离-幅度响应多普勒维FFT对同一个距离门内的所有chirp沿chirp方向做FFT得到目标的速度-距离响应多通道合并或波束形成对4个RX通道的数据做非相干累加或做DBF数字波束形成得到角度信息CFAR检测基于恒虚警率算法在Range-Doppler图上找目标峰。5.2 距离维FFT前的预处理细节直接对原始数据的每个chirp做FFT也是可以的但实测效果不好。原因在于ADC数据里包含了直流偏置DC offset和低频噪声。在频域上这些成分会聚在零频附近掩盖近距目标。所以FFT之前最好先做两步% 假设dataCube维度: [numSamples, numChirps, numRx] % 第一步去直流去除每个chirp每个通道的均值 for rx 1:numRx for chirp 1:numChirps dataCube(:, chirp, rx) dataCube(:, chirp, rx) - mean(dataCube(:, chirp, rx)); end end % 第二步加窗降低频谱泄漏 winRange hann(numSamples); winDoppler hann(numChirps);这里解释一下为什么去直流和加窗会影响最终结果。ADC采到的数据包含一个稳定的直流分量如果不去除做FFT后零频处会出现一个很大的能量峰它会通过频谱泄漏把附近几个距离门的目标掩盖掉。加窗是在牺牲一定距离分辨率的前提下换取旁瓣抑制。Hann窗是默认选择如果你想追求目标分辨率可以换Blackman-Harris窗或用chebwin窗但你要知道旁瓣越低主瓣越宽。去直流的时候还有个细节有的做法是对整个帧的所有chirp求均值有的是分别对每个chirp去均值。实测下来逐chirp去均值效果更好因为不同chirp的起始相位不同直流偏置其实在每个chirp内是略微变化的。5.3 距离FFT与多普勒FFT的实现距离FFT沿采样点维度做rangeFFT fft(dataCube .* winRange, numSamples, 1);注意这里不是直接对原始数据做fft(dataCube)那会默认沿第一个维度做但我前面重排后的dataCube维度是[numSamples, numChirps, numRx]所以指定维度1是对的。FFT之后沿采样点维度的每个bin对应一个距离门bin index和实际距离的换算关系是距离分辨率 d_res c / (2 * B) 距离门 deltarange d_res * slope * ADC_start_time index * d_res其中B是调频带宽由起始频率斜率乘以采样窗口时长得到。如果斜率是29.982MHz/us采样窗口是128个点每个采样点的采样时间是1/采样率假设ADC采样率为10Msps那么采样窗口是12.8us带宽就是29.982×12.8383.8MHz。距离分辨率就是光速/(2×383.8MHz)≈0.39米。这个0.39米决定了你在Range-Doppler图上能区分的最小距离间隔。多普勒FFT沿chirp维度做这时候要把数据先移到频域再做或者直接对rangeFFT结果沿第二个维度做FFT。但有一个注意点多普勒FFT之前需要再做一次去直流吗不需要rangeFFT之后已经去掉了DC分量剩下的是目标信号。直接做FFT即可dopplerFFT fftshift(fft(rangeFFT .* winDoppler, numChirps, 2), 2);fftshift的目的是把零多普勒频率移到频谱中心方便直接观察。多普勒维的每个bin和实际速度的对应关系为速度分辨率 v_res lambda / (2 * T_frame)其中lambda是雷达工作波长77GHz对应约3.9mmT_frame是frame duration比如40ms那么v_res≈0.05m/s。这个参数决定了你对低速运动目标的分辨能力。5.4 从Range-Doppler图到目标检测与可视化做完二维FFT之后最直观的输出就是Range-Doppler热力图。对每个距离门和多普勒bin的幅度取对数dB然后画imagesc图即可rdMap squeeze(sum(abs(dopplerFFT(:,:,:)), 3)); % 4个RX非相干累加 rdMapDB 20*log10(rdMap / max(rdMap(:)) eps); figure; imagesc(rdMapDB); xlabel(多普勒bin); ylabel(距离门); colorbar;非相干累加就是取幅度后求平均能有效提高信噪比因为它利用了4个RX通道的独立噪声不相关性。噪声是随机的累加后功率按通道数线性增加但目标信号是相干的累加后功率按通道数的平方增加所以你用4通道累加SNR能提升约6dB。如果要做目标检测可以在此基础上加CFAR算法。CFAR的原理并不复杂对每个待检测的bin取它周围一圈的参考单元估算出背景噪声功率如果待检测bin的功率超过背景功率一定倍数比如13dB就判定为目标。这个阈值倍数跟虚警概率设定有关% 2D CFAR简化示意 for i 1:size(rdMap,1) for j 1:size(rdMap,2) % 计算参考窗内噪声均值 noiseLevel mean(rdMap(max(1,i-guardN):min(end,iguardN), ... max(1,j-guardN):min(end,jguardN)), all); threshold noiseLevel * 10^(threshDB/10); if rdMap(i,j) threshold % 目标像素 end end end实际工程里二维CFAR要考虑距离维和目标维的参考窗尺寸设置。参考窗太大会拖慢速度太大会漏检一般取距离维32个单元、多普勒维32个单元保护单元取距离维8个单元、多普勒维8个单元比较合适。5.5 一个实战细节正确匹配mmWave Studio里配置的Matlab导出格式mmWave Studio里有一个Post Processing选项卡它可以自动生成MATLAB代码并导出处理结果。这个功能很好用它会按你配置的chirp参数自动生成读取代码和后处理代码。但我发现实际用它生成的数据在处理多帧时有些问题——它默认把所有帧的数据当成一整块来处理这在我上面的多帧读取方式里如果帧之间数据有轻微丢包会导致后续帧错位。所以我更推荐的做法让mmWave Studio只负责采集和存储后处理代码自己写。这样不仅灵活还能完全掌控数据格式和算法细节。6. 高频坑位盘点从SPI连接失败到数据错位的排查链路6.1 SPI连接不上原因排查顺序我在做技术支持和帮朋友调试时发现SPI连接失败是所有人遇到的第一个坑。这类问题按如下顺序排查最有效供电DCA100012V和雷达板5V都接了吗特别是雷达板有没有通过USB供电板间连接60pin连接器是否插紧有没有错位串口识别设备管理器里XDS110的串口是否出现如果没出现检查USB线和端口mmWave Studio的端口选择在GUI左上角有个COM口选择下拉框是否选对了XDS110的User UART端口而不是Application UART端口固件加载顺序是否先加载了DCA1000固件再调用SPI Connect6.2 数据采集后文件为空或数据量不对如果Trigger之后日志显示传输了UDP包但bin文件是0字节优先查文件保存路径是否有写权限。如果你把路径设在C盘某个用户目录下但没有管理员权限写入可能失败。其次是确认“Data Capture”区的Data Format设置是否与雷达配置一致特别是“LVDS Lane”目录、“Data Bit Width”、“Data Chunk”这些选项。6.3 数据读到但距离谱一塌糊涂这是典型的格式理解错误。如果画出来的距离谱上所有目标都出现在同一个距离门附近或者峰值出现在FFT的末尾大概率是数据重排时维度顺序搞错了。我建议在正式处理前先构造一个已知频率的模拟信号通过同样的读取-重排-FFT流程验证代码确保代码本身没有问题再处理真实雷达数据% 模拟信号验证 t (0:127)/1e6; simData exp(1j*2*pi*100e3*t); % 100kHz单频复信号 % 将simData填充到dataCube的某个通道某个chirp验证FFT峰值是否正确出现在对应bin这个方法非常管用。它把“数据处理代码是否有bug”和“硬件链路是否正常”两个问题隔离定位问题速度能快一倍。6.4 一个被忽略的小问题mmWave Studio日志里出现的数据格式警告mmWave Studio在采集时如果检测到ADC数据里某些字节不满足预期格式会打印警告信息比如“LVDS data not aligned”之类的提示。这类警告通常是因为mmWave Studio版本和雷达板固件版本不匹配导致的。我的解决方案是严格按TI官方Release Notes里的版本匹配表来组合不要擅自混用。7. 提速与进阶把MATLAB处理链路跑得更顺的几个心得7.1 用MATLAB的Coder把FFT处理编译成Mex文件数据量大时纯MATLAB的FFT循环处理一帧数据可能要几十毫秒如果要做实时处理就需要用到MATLAB Coder。实测下来把重排序和二维FFT代码纯运算部分编译成Mex文件后处理速度提升5-10倍。核心代码用coder.extrinsic把耗时的显示函数排除在外然后通过codegen生成可执行Mex文件。7.2 多帧批量处理的文件组织做实验时往往要对比不同参数下的采集效果我习惯用如下目录结构组织数据D:/radar_exp/ exp01_offset_2m/ config.txt capture_01.bin capture_02.bin result.mat exp02_offset_5m/ config.txt ...config.txt里记录本次采集的完整参数result.mat存的是处理完的dataCube和Range-Doppler结果。这样后期做参数对比时直接load结果不用重新读取bin文件重新做FFT。7.3 如果你打算走深度学习方向用DCA1000采集原始ADC数据后除了做传统CFAR处理还能直接输入深度学习网络做端到端的检测和分类。这种情况下bin文件的读取和预处理部分与本文完全一致区别在于后处理部分改用CNN、Transformer等模型。我建议你在预处理阶段就把dataCube按一定规则切片保存为.mat文件作为深度学习的输入数据集。比如把每帧[128,128,4]的复数数据拆成4个通道的实部和虚部形成[128,128,8]的输入张量与网络的输入维度对齐。7.4 离线数据重放与算法迭代一个常被忽视的好处是原始ADC数据一旦采集下来可以无限次离线重放。你不需要把雷达放在桌面上反复采集只需要对同一个bin文件用不同的后处理代码跑就能验证不同的算法参数。这对算法调优效率的提升非常大。我在调CFAR参数时就是用一组采集好的数据反复跑几分钟就能试完几十组参数组合。8. 给刚入手DCA1000EVM的朋友几点中肯建议这套链路跑通的标志是mmWave Studio里Trigger一次MATLAB的Range-Doppler图上出现清晰的目标峰。如果你还卡在前面某一步我的建议是——先把链路简化到不能再简先只跑单次触发采集别上来就设复杂的多帧连续采集用默认的demo配置先把数据采出来、读出来、处理出一个距离谱来确认整条链路通了之后再逐步优化参数。还有一个容易忽略的点毫米波雷达的原始数据量看起来不大但调通前的耐心成本很高。每改一次参数、重新连一次SPI、重开一次mmWave Studio基本就是几分钟起步。我的经验是把mmWave Studio的配置流程整理成checkbox清单硬件上电、网线连接、IP配置、DCA1000固件加载、BSS/MSS固件加载、SPI连接、传感器配置、触发采集。每次调试都从头走一遍不要在某一半流程上凭空猜测。最后再说一个实用小技巧把mmWave Studio安装目录下的mmwave_studio_02_01_01_00\mmWaveStudio\PostProc里的示例MATLAB脚本翻一翻里面有一些官方后处理的参考代码虽然不是最优解但保底的验证逻辑很清晰。实际调试时参考官方后处理结果与自己做对比是验证MATLAB代码是否正确的最快途径。
返回列表