我通过mmwave studio收集了bin文件,并且想通过maltab对主设备收集到的data进行1DFFT与2DFFT处理,但结果与mmwave studio处理出来的差距很大,想问问应该怎么改进? 这是我的Matlab代码:
clc;clear all;close all;
%% 实际回波处理
a = retVal1(1:2:end) + sqrt(-1)*retVal1(2:2:end);
samples = 256; %一个chirp100个采样点
Fs =8e6; %采样率
chrips = 32; %一帧128个chrip
numTx=3;
numRx=4;
B = 3.2e9;
K = 80e12;
Tc= B/K;
c = 3e8;
fc = 77e9;
maxRange = c / (2*B)*samples/2;
maxVel = c/2/fc/Tc/chrips*chrips/2;
Expected_Num_SamplesPerFrame = samples*chrips*numTx*numRx;
master=[];
filepath= 'D:\360极速浏览器下载\第七次人 99帧\master_0000_data.bin'; %读取雷达数据,retVal的维度是[rxnums,numChirps*numADCSamples]
Expected_Num_SamplesPerFrame =samples*chrips*numTx*numRx*2;
fp = fopen(filepath, 'r');
%% 向距离维投影
micro_doppler = zeros(chrips,99); %向速度维投影
micro_range = zeros(samples,99); %向距离维投影
for a = 1:99
fseek(fp,(a-1)*Expected_Num_SamplesPerFrame*2, 'bof');
adcData1 = fread(fp,Expected_Num_SamplesPerFrame,'uint16');
neg = logical(bitget(adcData1, 16));
adcData1(neg) = adcData1(neg) - 2^16;
adcData1 = adcData1(1:2:end) + sqrt(-1)*adcData1(2:2:end);
adcData1Complex = reshape(adcData1, samples,numTx,numRx,chrips);
test2 = zeros(samples,chrips);
test2 = adcData1Complex(:,1,1,:);
test2 = reshape(test2,samples,chrips);
test2_data = test2-repmat(mean(test2),samples,1);
for i=1:chrips
b = test2_data(:,i);
range_win = hamming(samples); %加窗
din_win = b.* range_win;
datafft = fft(din_win);
range(i,:) = datafft;
end
shuju = zeros(chrips,samples);
for i = 1:samples
range_win = hamming(chrips).';
din_win = (range(:,i).').*range_win;
shuju(:,i) = fft(din_win).';
end
shuju = fftshift(shuju,1); %将速度维的零频分量搬移至频谱中心
for i = 1:samples
micro_doppler(:,a) = micro_doppler(:,a)+abs(shuju(:,i));
end
for i = 1:chrips
micro_range(:,a) = micro_range(:,a)+abs(shuju(i,:)).';
end
end
%% 绘图
figure(1);
%X=(0:255)*Fs*3e8/256/2/K;%距离公式 n * Fs * c /samples/2/k
X=(0:255)*c/2/B;
Y=20*log10(abs(range(1,:)));%接收功率公式
plot(X,Y);
figure();
X=(0:255)*c/(2*fc*0.1);
Y=20*log10(abs(shuju(1,:)));
plot(X,Y);
%速度维投影坐标
figure();
micro_doppler = medfilt2(abs(micro_doppler),[3,3]);
colormap(jet);
imagesc((10*log10(abs(micro_doppler))));colorbar
y_label = ([1:chrips/6:chrips]-1-chrips/2) * c/2/fc/0.1;
y_label = round(y_label*100)/100;
y_tick = [chrips/2-chrips/6:chrips/6/3:chrips/2+chrips/6];
y_lim = [chrips/2-chrips/6 chrips/2+chrips/6];
set(gca,'ylim',y_lim);
set(gca,'ytick',y_tick);
set(gca,'yticklabel',y_label);
xlabel('帧号');ylabel('速度 (m/s)')
%距离维投影坐标
figure();
micro_range = medfilt2(abs(micro_range),[3,3]);
colormap(jet);
imagesc((10*log10(abs(micro_range))));colorbar
y_label_range = ([0:samples/11:samples]) * (c*Tc*Fs) / (2*B*round(Tc*Fs));
y_label_range = round(y_label_range*samples)/samples;
set(gca,'yticklabel',y_label_range);
y_tick_range = [0.5:samples/11:samples+0.5];
set(gca,'ytick',y_tick_range);
xlabel('帧号');ylabel('距离 (m)')
end
fclose(fp);
这是处理后得到的两张图,纵坐标数值上存在问题可以忽略,这个测试的场景为人站在雷达正前方大约1米处,雷达开始发射后人不断匀速向前走。