FMCW信号处理-(4)速度处理(RD图) 1、查看数据clc; %清空命令行 clear; %清空工作区 close all; %关闭绘图窗口 dataFile C:\Users\wfh\Desktop\毫米波雷达实测\Radar_Processing\data\000003.mat; %对文件路径赋值 whos(-file,dataFile) %查看数据 data load(dataFile); %读取数据复数双精度4177920字节2TX4RX255Chirp128采样adcData。2、检查数据有效性adcData data.adcData; %对变量赋值 hasNaN any(isnan(adcData(:))) %查看是否有无效数据 hasInf any(isinf(adcData(:))) %查看是否有无穷大数据输出结果都是零说明无无效和无穷大数据。3、查看TX1-RX1的数据二维大小adcFrame adcData(:,:,1,1); %取TX1-RX1的全部数据 N_samples size(adcFrame,1) %查看第一维行数据量 N_chirps size(adcFrame,2) %查看第二维列数据量第一维128行第二维255列。4、逐列去均值adc_dc zeros(size(adcFrame)); %预分配内存 for ch 1:N_chirps %遍历1-N_chips s adcFrame(:,ch); %遍历1-255列当列行全部保留 s_mean mean(s); %求当列均值 adc_dc(:,ch) s-s_mean; %汇总去均值后新数据 end5、逐列距离维加窗FFTwin_range hamming(N_samples); %汉明窗 R zeros(size(adcFrame)); %预分配内存 for ch 1:N_chirps %遍历1-255 sig adc_dc(:,ch); %遍历adc_dc每列 sig_win sig.*win_range; %当列加窗 fft_r fft(sig_win); %当列傅里叶变换 R(:,ch) fft_r; %新列赋值给R求得距离fft后新数据 end6、逐行多普勒维加窗FFTwin_dop hamming(N_chirps); %多普勒维汉明窗 RD zeros(adcFrame); %预分配内存 for rbin 1:N_samples %遍历1-128 slow_seq R(rbin,:); %遍历每行 slow_win slow_seq.*win_dop.; %多普勒维加窗 fft_dop fft(slow_win); %多普勒维傅里叶变换 fft_dop fftshift(fft_dop); %将0移位到中心 RD(rbin,:) fft_dop; %求得多普勒维频域数据 end其中win_dop hamming(N_chirps)是创建汉明窗但是按MATLAB逻辑创建的是一列所以在多普勒加窗的时候需要进行转置即win_dop。7、参数初始化RD_abs abs(RD); %绘图观察只需要幅度信息 c 3e8; %光速 f0 77e9; %初始频率 B 0.67e9; %带宽 fc_center f0B/2; %中心频率 lambda c/fc_center; %波长 Tc 60e-6; %电磁波持续时间 deltaR c/(2*B); %距离分辨率吧 deltaV lambda/(2*N_chirps*Tc); %速度分辨率其中deltaR c/(2*B)为距离分辨率公式是光速是带宽。deltaV lambda/(2*N_chirps*Tc)为速度分辨率公式是波长是chirp个数是单个chirp持续时间。8、绘制坐标轴R_axis (0:N_samples-1)*deltaR; %距离轴 vel_axis ((0:N_chirps-1)-(N_chirps-1)/2)*deltaV; %速度轴9、绘制RD图figure; %新开画布 imagesc(vel_axis,R_axis,RD_abs); %绘制二维图 colorbar; %颜色条 xlabel(速度(m/s)); %横轴名 ylabel(距离(m)); %竖轴名 title(RD map); %标题名 grid on; %开网格imagesc(a,b,c)为绘制二维图其中a为横轴b为纵轴c为具体幅值大小其中纵轴默认为从上到下为从小到大。从图示可以看出在约10m位置有一个目标以约不足1m/s的径向速度远离。10、完整代码clc; %清空命令行 clear; %清空工作区 close all; %关闭绘图窗口 dataFile C:\Users\wfh\Desktop\毫米波雷达实测\Radar_Processing\data\000003.mat; %对文件路径赋值 whos(-file,dataFile) %查看数据 data load(dataFile); %读取数据 adcData data.adcData; %对变量赋值 hasNaN any(isnan(adcData(:))) %查看是否有无效数据 hasInf any(isinf(adcData(:))) %查看是否有无穷大数据 adcFrame adcData(:,:,1,1); %取TX1-RX1的全部数据 N_samples size(adcFrame,1) %查看第一维行数据量 N_chirps size(adcFrame,2) %查看第二维列数据量 adc_dc zeros(size(adcFrame)); %预分配内存 for ch 1:N_chirps %遍历1-N_chips s adcFrame(:,ch); %遍历1-255列当列行全部保留 s_mean mean(s); %求当列均值 adc_dc(:,ch) s-s_mean; %汇总去均值后新数据 end win_range hamming(N_samples); %距离维汉明窗 R zeros(size(adcFrame)); %预分配内存 for ch 1:N_chirps %遍历1-255 sig adc_dc(:,ch); %遍历adc_dc每列 sig_win sig.*win_range; %当列加窗 fft_r fft(sig_win); %当列傅里叶变换 R(:,ch) fft_r; %新列赋值给R求得距离fft后新数据 end win_dop hamming(N_chirps); %多普勒维汉明窗 RD zeros(size(adcFrame)); %预分配内存 for rbin 1:N_samples %遍历1-128 slow_seq R(rbin,:); %遍历每行 slow_win slow_seq.*win_dop.; %多普勒维加窗 fft_dop fft(slow_win); %多普勒维傅里叶变换 fft_dop fftshift(fft_dop); %将0移位到中心 RD(rbin,:) fft_dop; %求得多普勒维频域数据 end RD_abs abs(RD); %绘图观察只需要幅度信息 c 3e8; %光速 f0 77e9; %初始频率 B 0.67e9; %带宽 fc_center f0B/2; %中心频率 lambda c/fc_center; %波长 Tc 60e-6; %电磁波持续时间 deltaR c/(2*B) %距离分辨率吧 deltaV lambda/(2*N_chirps*Tc) %速度分辨率 R_axis (0:N_samples-1)*deltaR; %距离轴 vel_axis ((0:N_chirps-1)-(N_chirps-1)/2)*deltaV; %速度轴 figure; %新开画布 imagesc(vel_axis,R_axis,RD_abs); %绘制二维图 colorbar; %颜色条 xlabel(速度(m/s)); %横轴名 ylabel(距离(m)); %竖轴名 title(RD map); %标题名 grid on; %开网格声明个人水平有限不足之处欢迎各位老师批评指正。