Add files via upload
This commit is contained in:
parent
b95a5226f2
commit
9cfc66de48
55
Basic Mmwave Signal Processing/DCA1000_Read_Data.m
Normal file
55
Basic Mmwave Signal Processing/DCA1000_Read_Data.m
Normal file
@ -0,0 +1,55 @@
|
||||
function data_radar=DCA1000_Read_Data(fname)
|
||||
global parameter;
|
||||
global frame;
|
||||
|
||||
%% 读取回波数据
|
||||
fid = fopen(fname,'rb');
|
||||
%16bits,复数形式(I/Q两路),4RX,3TX,有符号16bit
|
||||
sdata = fread(fid,frame*parameter.Samples*parameter.Chirps*4*3*2,'int16');
|
||||
sdata = sdata((frame-1)*parameter.Samples*parameter.Chirps*4*3*2+1:frame*parameter.Samples*parameter.Chirps*4*3*2);
|
||||
|
||||
%% 1843+DCA1000
|
||||
fileSize = size(sdata, 1);
|
||||
lvds_data = zeros(1, fileSize/2);
|
||||
count = 1;
|
||||
for i=1:4:fileSize-5
|
||||
lvds_data(1,count) = sdata(i) + 1i*sdata(i+2);
|
||||
lvds_data(1,count+1) = sdata(i+1)+1i*sdata(i+3);
|
||||
count = count + 2;
|
||||
end
|
||||
lvds_data = reshape(lvds_data, parameter.Samples*parameter.txNum*parameter.rxNum, parameter.Chirps);
|
||||
lvds_data = lvds_data.';
|
||||
cdata = zeros(parameter.txNum*parameter.rxNum,parameter.Chirps*parameter.Samples);
|
||||
for row = 1:parameter.txNum*parameter.rxNum
|
||||
for i = 1: parameter.Chirps
|
||||
cdata(row,(i-1)*parameter.Samples+1:i*parameter.Samples) = lvds_data(i,(row-1)*parameter.Samples+1:row*parameter.Samples);
|
||||
end
|
||||
end
|
||||
fclose(fid);
|
||||
data_radar_1 = reshape(cdata(1,:),parameter.Samples,parameter.Chirps); %TX1 RX1
|
||||
data_radar_2 = reshape(cdata(2,:),parameter.Samples,parameter.Chirps); %TX1 RX2
|
||||
data_radar_3 = reshape(cdata(3,:),parameter.Samples,parameter.Chirps); %TX1 RX3
|
||||
data_radar_4 = reshape(cdata(4,:),parameter.Samples,parameter.Chirps); %TX1 RX4
|
||||
data_radar_5 = reshape(cdata(5,:),parameter.Samples,parameter.Chirps); %TX2 RX1
|
||||
data_radar_6 = reshape(cdata(6,:),parameter.Samples,parameter.Chirps); %TX2 RX2
|
||||
data_radar_7 = reshape(cdata(7,:),parameter.Samples,parameter.Chirps); %TX2 RX3
|
||||
data_radar_8 = reshape(cdata(8,:),parameter.Samples,parameter.Chirps); %TX2 RX4
|
||||
data_radar_9 = reshape(cdata(9,:),parameter.Samples,parameter.Chirps); %TX3 RX1
|
||||
data_radar_10 = reshape(cdata(10,:),parameter.Samples,parameter.Chirps); %TX3 RX2
|
||||
data_radar_11 = reshape(cdata(11,:),parameter.Samples,parameter.Chirps); %TX3 RX3
|
||||
data_radar_12 = reshape(cdata(12,:),parameter.Samples,parameter.Chirps); %TX3 RX4
|
||||
data_radar=[];
|
||||
data_radar(:,:,1)=data_radar_1; %三维雷达回波数据
|
||||
data_radar(:,:,2)=data_radar_2;
|
||||
data_radar(:,:,3)=data_radar_3;
|
||||
data_radar(:,:,4)=data_radar_4;
|
||||
data_radar(:,:,5)=data_radar_5;
|
||||
data_radar(:,:,6)=data_radar_6;
|
||||
data_radar(:,:,7)=data_radar_7;
|
||||
data_radar(:,:,8)=data_radar_8;
|
||||
data_radar(:,:,9)=data_radar_9;
|
||||
data_radar(:,:,10)=data_radar_10;
|
||||
data_radar(:,:,11)=data_radar_11;
|
||||
data_radar(:,:,12)=data_radar_12;
|
||||
|
||||
end
|
69
Basic Mmwave Signal Processing/demo.m
Normal file
69
Basic Mmwave Signal Processing/demo.m
Normal file
@ -0,0 +1,69 @@
|
||||
clear;close all;clc;
|
||||
|
||||
%% 雷达参数(使用mmWave Studio默认参数)
|
||||
global parameter;
|
||||
parameter = generateParameter();
|
||||
Range_Res=parameter.c/(2*parameter.BandwidthValid); %距离分辨率
|
||||
Range_Index=Range_Res*(1:parameter.rangeBin);
|
||||
Speed_Res=parameter.lambda/(2*parameter.dopplerBin*parameter.Tc);
|
||||
Speed_Index=(-parameter.dopplerBin/2:1:parameter.dopplerBin/2-1)*Speed_Res;
|
||||
Azimuth_Index=(-parameter.angleBin/2:1:parameter.angleBin/2-1);
|
||||
global frame;
|
||||
frame = 1; %第frame帧
|
||||
|
||||
%% 读取原始ADC数据
|
||||
fname='C:\ti\mmwave_studio_02_01_01_00\mmWaveStudio\PostProc\adc_data.bin';
|
||||
data_radar=DCA1000_Read_Data(fname);
|
||||
|
||||
%% 距离FFT
|
||||
range_win = hamming(parameter.Samples); %加海明窗
|
||||
doppler_win = hamming(parameter.Chirps);
|
||||
range_profile = zeros(parameter.Samples,parameter.Chirps,parameter.txNum*parameter.rxNum);
|
||||
for k=1:parameter.txNum*parameter.rxNum
|
||||
for m=1:parameter.Chirps
|
||||
temp=data_radar(:,m,k).*range_win; %加窗函数
|
||||
temp_fft=fft(temp,parameter.rangeBin); %对每个chirp做N点FFT
|
||||
range_profile(:,m,k)=temp_fft;
|
||||
end
|
||||
end
|
||||
|
||||
%% 多普勒FFT
|
||||
speed_profile = zeros(parameter.Samples,parameter.Chirps,parameter.txNum*parameter.rxNum);
|
||||
for k=1:parameter.rxNum
|
||||
for n=1:parameter.rangeBin
|
||||
temp=range_profile(n,:,k).*(doppler_win)';
|
||||
temp_fft=fftshift(fft(temp,parameter.dopplerBin)); %对rangeFFT结果进行M点FFT
|
||||
speed_profile(n,:,k)=temp_fft;
|
||||
end
|
||||
end
|
||||
|
||||
%% 方位角FFT
|
||||
angle_profile = zeros(parameter.Samples,parameter.Chirps,parameter.angleBin);
|
||||
for n=1:parameter.rangeBin %range
|
||||
for m=1:parameter.dopplerBin %chirp
|
||||
temp=speed_profile(n,m,:);
|
||||
temp=temp(1:8);
|
||||
temp_fft=fftshift(fft(temp,parameter.angleBin)); %对2D FFT结果进行Q点FFT
|
||||
angle_profile(n,m,:)=temp_fft;
|
||||
end
|
||||
end
|
||||
|
||||
%% 绘制2D FFT的三维视图
|
||||
figure(1);
|
||||
speed_profile_temp = reshape(speed_profile(:,:,1),parameter.rangeBin,parameter.dopplerBin);
|
||||
speed_profile_Temp = speed_profile_temp';
|
||||
[X,Y]=meshgrid((0:parameter.rangeBin-1)*parameter.Fs*parameter.c/parameter.rangeBin/2/parameter.Slope,(-parameter.dopplerBin/2:parameter.dopplerBin/2-1)*parameter.lambda/parameter.Tc/parameter.dopplerBin/2);
|
||||
mesh(X,Y,(abs(speed_profile_Temp)));
|
||||
xlabel('距离(m)');ylabel('速度(m/s)');zlabel('信号幅值');
|
||||
title('2D FFT处理三维视图');
|
||||
xlim([0 (parameter.rangeBin-1)*parameter.Fs*parameter.c/parameter.rangeBin/2/parameter.Slope]); ylim([(-parameter.dopplerBin/2)*parameter.lambda/parameter.Tc/parameter.dopplerBin/2 (parameter.dopplerBin/2-1)*parameter.lambda/parameter.Tc/parameter.dopplerBin/2]);
|
||||
|
||||
%% 得到Range-Azimuth热力图
|
||||
angle_profile_display=abs(angle_profile);
|
||||
angle_profile_display=squeeze(sum(angle_profile_display,2));
|
||||
figure(2);
|
||||
imagesc(Azimuth_Index,Range_Index,angle_profile_display);
|
||||
set(gca,'YDir','normal');
|
||||
title('Range-Azimuth Heatmap', 'FontWeight', 'bold');
|
||||
xlabel('Azimuth(°)');
|
||||
ylabel('Range(m)');
|
37
Basic Mmwave Signal Processing/generateParameter.m
Normal file
37
Basic Mmwave Signal Processing/generateParameter.m
Normal file
@ -0,0 +1,37 @@
|
||||
%% 雷达参数设置
|
||||
function parameter = generateParameter()
|
||||
|
||||
parameter.c = 3e8; %光速
|
||||
|
||||
parameter.stratFreq = 77e9; %起始频率
|
||||
|
||||
parameter.Tr = 60e-6; %扫频时间
|
||||
parameter.Idle_time = 100e-6; %空闲时间
|
||||
parameter.Tc = parameter.Tr+parameter.Idle_time; %Chirp之间的间隔
|
||||
parameter.Samples = 256; %采样点
|
||||
parameter.Fs = 10e6; %采样率
|
||||
parameter.Tframe_set = 80e-3; % 帧周期
|
||||
|
||||
parameter.rangeBin = parameter.Samples ; %rangebin
|
||||
parameter.Chirps = 128; %chirp数
|
||||
parameter.dopplerBin = parameter.Chirps; %dopplerbin
|
||||
|
||||
parameter.Slope = 29.982e12; %chirp斜率
|
||||
parameter.Bandwidth = parameter.Slope * parameter.Tr ; %发射信号有效带宽
|
||||
parameter.BandwidthValid = parameter.Samples/parameter.Fs*parameter.Slope; %发射信号带宽
|
||||
parameter.centerFreq = parameter.stratFreq + parameter.Bandwidth / 2; %中心频率
|
||||
parameter.lambda = parameter.c / parameter.centerFreq; %波长
|
||||
|
||||
parameter.txAntenna = ones(1,3); %发射天线个数
|
||||
parameter.rxAntenna = ones(1,4); %接收天线个数
|
||||
parameter.txNum = length(parameter.txAntenna);
|
||||
parameter.rxNum = length(parameter.rxAntenna);
|
||||
parameter.virtualAntenna = length(parameter.txAntenna) * length(parameter.rxAntenna);
|
||||
parameter.angleBin = 180; %anglebin
|
||||
|
||||
parameter.dz = parameter.lambda / 2; %接收天线俯仰间距
|
||||
parameter.dx = parameter.lambda / 2; %接收天线水平间距
|
||||
|
||||
parameter.numCPI = 50; % 帧数
|
||||
|
||||
end
|
Loading…
Reference in New Issue
Block a user