用matlab对收集到的bin文件进行读取,并分别画出了时域图以及频域图,并根据FWCM测距原理将频域图的x坐标转换为了距离。但待测目标的距离在途中所处距离总是比实际距离多出一个定值
如图分别为45cm、65cm、85cm处得到的频域图:


可以看到都多出一个约0.13的值。求助为什么会导致此种状况。
如下是我的matlab处理代码:
--------------------------------以下部分是官方文档中读取bin文件的代码----------------------------------
numADCSamples = 256; %375; % 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("D:\Temp\85cm\water\water200_Raw_0.bin",'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;
--------------------以下是我尝试对读到的数据进行range-fft的代码
%% 参数
Fs = 10000e3;
slope = 29.982e12;
c = 3e8; %光速
index = 1:1:numADCSamples;
data = adcData(1,1:256);
%生成窗
% range_win = hamming(375);
range_win = hamming(256);
%加窗
range_win = range_win';
din_win = data .* range_win;
%fft
datafft = fft(din_win);
% %samples -> freq
freq_bin = (index - 1) * Fs / numADCSamples;
range_bin = freq_bin * c / 2 / slope;
figure;
plot(range_bin,abs(datafft));
title('after fft');
xlabel('range(m)');
以及以下是我在采集数据时的相关设置:



希望有人能够帮助我