ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

FMCW信号处理-(3)距离处理

FMCW信号处理-(3)距离处理

1、基础命令,视使用情况设定。

clc; %清空命令行 clear; %清空工作区 close all; %关闭绘图窗口

2、查看文件包含变量及相关信息。

dataFile = 'C:\Users\wfh\Desktop\毫米波雷达实测\Radar_Processing\data\000003.mat'; %对文件路径赋值 whos('-file', dataFile) %查看文件包含变量

其中变量名称是:Name。变量维度是四维:根据公开数据集信息分别是2个TX发射通道,4个RX接收通道,255个Chirp,每个Chirp有128个采样点。字节大小是:4177920。数据类型:双精度。数据属性:复数数组。

3、读取文件并对变量赋值。

data = load(dataFile); %读取文件 adcData = data.adcData; %对文件中的adcData变量进行赋值

这里的dataFile是2中的.mat文件,是一个结构体,通俗说可以视为一个收纳盒,里面可能有一个或多个物品,现在这里里面有一个物品,是变量,名字为adcData,data.adcData意思是把这个物品提取,第二行代码并赋值为了adcData。

4、检查数据有效性。

hasNaN = any(isnan(adcData(:))) %判断是否存在无效数据 hasInf = any(isinf(adcData(:))) %判断是否存在无穷大数据

其中adcData(:)是将多维数据adcData拉直为一维。isnan()是判断某个数据组中是否有无效数据。isinf()是判断某个数据组中是否有无穷大数据。any()表示如果某个数据组中的数据有一个满足条件成立则为是,当所有都不满足条件的时候才为否。

这里的输出结果都为0,所以没有无效数据或者无穷大数据。如果hasNaN输出为1则为存在无效数据,如果hasInf输出结果为1则是存在无穷大数据,无论是无效还是无穷大数据都会影响后续数据处理的结果。

5、提取部分数据并绘制实部虚部图

s = adcData(:,1,1,1); %提取TX1-RX1的第一个Chirp并赋值为s figure; %开窗 plot(real(s)); %绘制s实部图 hold on; %保持图形开启 plot(imag(s)); %绘制s虚部图 legend('实部 I','虚部 Q'); %图例 xlabel('采样点序号'); %x轴标题 ylabel('ADC采样值'); %y轴标题 title('原始ADC信号(单Chirp,TX1 RX1)'); %标题 grid on; %开网格

从图示中可以看出,实部数据基本一定的均值偏置,整体在-20附近。虚部基本在0附近。

6、去均值

s_mean = mean(s); %对s求均值 s_dc = s - s_mean; %对s去均值偏置 figure; %开窗 plot(real(s_dc)); %绘制去均值偏置后的实部图 hold on; %保持图形开启 plot(imag(s_dc)); %绘制去均值后的虚部图 legend('去直流后实部 I','去直流后虚部 Q'); %图例 xlabel('采样点序号'); %x轴标题 ylabel('ADC采样值'); %y轴标题 title('去直流后的ADC信号(单Chirp,TX1 RX1)'); %标题 grid on; %开网格

这里的s是复数,mean(s)为对复数s求均值,具体操作过程是对虚部和实部分别求均值,然后组合为新的均值复数。

这是去均值后的实部和虚部图,从图中可以观察到,两条曲线已在00附近振荡。

7、加窗

N = length(s_dc); %获取去均值偏置后的信号长度 win = hamming(N); %汉明窗 s_win = s_dc.*win; %去均值的信号与窗逐点相乘

这里加窗使用的汉明窗,也可使用汉宁窗,都是弱化两边的权重,减轻频谱泄露的影响。

8、求频域并绘图

fft_r = fft(s_win); %对加窗后的数据进行傅里叶变换求频域 r_spectrum = abs(fft_r); %求频域幅值 figure; %开窗 plot(r_spectrum); %绘制频域幅度谱 xlabel('FFT bin'); %以频率索引为横轴 ylabel('幅度'); %纵轴名称 title('单Chirp距离谱(bin)'); %标题 grid on; %开网格

这里的频谱图中的前半部分为零频和正频,后半部分为负频。其中负频是数学计算的产物,现阶段不使用。

9、距离谱

fs = 4e6; %采样率 slope = 21e12; %调频斜率 c = 3e8; %光速 bin_axis = 0:N-1; %获取横轴索引序列 fb_axis = bin_axis * fs / N; %将横轴序列索引转化为拍频 R_axis = c * fb_axis /(2 * slope); %将拍频转化为实际距离 figure; %开窗 plot(R_axis(1:64), r_spectrum(1:64)); %绘制横轴为距离的前半部分的幅度谱 xlabel('距离 (m)'); %横轴名 ylabel('幅度'); %纵轴名 title('距离谱(横坐标换算为真实距离)'); %图标题 grid on; %开网格

其中fb_axis = bin_axis * fs / N中fs/N为频率分辨率,公式由来为:采样频率为fs,则采样间隔为1/fs,一共采样点数为N则总时长则为N/fs,那么频率分辨率则为fs/N。

其中R_axis = c * fb_axis / (2 * slope),为毫米波雷达连续锯齿波距离公式为:,其中为目标距离雷达的距离,为拍频,为调频斜率。

这里只绘制了零频和正频部分的距离-幅度谱,因为负频部分是数学产物这里不做使用。从图示可以看出在10米附近有一个比较明显的目标。

10、完整版代码

clc; %清空命令行 clear; %清空工作区 close all; %关闭绘图窗口 dataFile = 'C:\Users\wfh\Desktop\毫米波雷达实测\Radar_Processing\data\000003.mat'; %对文件路径赋值 whos('-file', dataFile) %查看文件包含变量 data = load(dataFile); %读取文件 adcData = data.adcData; %对文件中的adcData变量进行赋值 hasNaN = any(isnan(adcData(:))) %判断是否存在无效数据 hasInf = any(isinf(adcData(:))) %判断是否存在无穷大数据 s = adcData(:,1,1,1); %提取TX1-RX1的第一个Chirp并赋值为s figure; %开窗 plot(real(s)); %绘制s实部图 hold on; %保持图形开启 plot(imag(s)); %绘制s虚部图 legend('实部 I','虚部 Q'); %图例 xlabel('采样点序号'); %x轴标题 ylabel('ADC采样值'); %y轴标题 title('原始ADC信号(单Chirp,TX1 RX1)'); %标题 grid on; %开网格 s_mean = mean(s); %对s求均值 s_dc = s - s_mean; %对s去均值偏置 figure; %开窗 plot(real(s_dc)); %绘制去均值偏置后的实部图 hold on; %保持图形开启 plot(imag(s_dc)); %绘制去均值后的虚部图 legend('去直流后实部 I','去直流后虚部 Q'); %图例 xlabel('采样点序号'); %x轴标题 ylabel('ADC采样值'); %y轴标题 title('去直流后的ADC信号(单Chirp,TX1 RX1)'); %标题 grid on; %开网格 N = length(s_dc); %获取去均值偏置后的信号长度 win = hamming(N); %汉明窗 s_win = s_dc.*win; %去均值的信号与窗逐点相乘 fft_r = fft(s_win); %对加窗后的数据进行傅里叶变换求频域 r_spectrum = abs(fft_r); %求频域幅值 figure; %开窗 plot(r_spectrum); %绘制频域幅度谱 xlabel('FFT bin'); %以频率索引为横轴 ylabel('幅度'); %纵轴名称 title('单Chirp距离谱(bin)'); %标题 grid on; %开网格 fs = 4e6; %采样率 slope = 21e12; %调频斜率 c = 3e8; %光速 bin_axis = 0:N-1; %获取横轴索引序列 fb_axis = bin_axis * fs / N; %将横轴序列索引转化为拍频 R_axis = c * fb_axis /(2 * slope); %将拍频转化为实际距离 figure; %开窗 plot(R_axis(1:64), r_spectrum(1:64)); %绘制横轴为距离的前半部分的幅度谱 xlabel('距离 (m)'); %横轴名 ylabel('幅度'); %纵轴名 title('距离谱(横坐标换算为真实距离)'); %图标题 grid on; %开网格

声明:个人水平有限,不足之处,欢迎批评指正。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进