This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MMWCAS-RF-EVM: 收集到bin文件后的Matlab处理

Part Number: MMWCAS-RF-EVM

我通过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米处,雷达开始发射后人不断匀速向前走。