Other Parts Discussed in Thread: IWR6843
您好,我看您回答的第二个文档https://www.ti.com/lit/an/swra581b/swra581b.pdf里面并没有针对AWR6843OPEVM的bin文件解析的代码,请问是真的没有还是与其他的是一样的啊?我应该参考哪个代码?还有该版本的雷达的数据格式是啥样的?
还有这个文档里提到的LVDS lanes的个数是每个不同版本的雷达不一样是吗?我这个版本AWR6843AOPEVM(F)是固定的2个lane的吗?那么如果最多只有两个lane的雷达就只能最多同时开两个接收器?也就是一个lane接受一个接收器收到的信号吗?
或者换一个问题就是这个lane的个数到底可以决定什么?是不是可以同时传输的意思?就是一个通道就只能在一个时间接受一个值?但是有两个就可以同时接受两个值?但是这个与文档里写的有两个lane的就不能使用3个接收器又怎么理解呢?原文:Because only two LVDS lanes are used, data capture using 3 receivers is not available with the xWR16xx/IWR6843.
还有请问接收器的IQ的区别是啥?就是一个是实数,一个是虚数吗?那我后面使用数据的时候又需要将实数和虚数合在一起吗?但是我看我采集到的数据的显示其实就是复数的形式,并且会出现一个Chirp的一排数据是有数值,一个Chirp的一排数据是没有数值。然后就是数据量就还是设定值的两倍。如下图所示:

我使用的是Complex 1x的模式,256的ADC sample,No of chirp loops是128,No of frame是160,所以计算应该是5,242,880个复数值对吗?如果IQ分开就是两倍,但是这里没有分开,而是出现了一行为空置的情况。
请问这是什么原因?
我使用的bin文件解析的代码也附在这里,请帮我查看一下是否有错误,谢谢:
%%% 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 = 1; % 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;
雷达距离墙的距离是1.476m