雷达实测数据的信噪比

最近处理了一段时间的雷达实测数据,其中有一个很重要的指标就是信号的信噪比,信噪比定义很简单就是信号的功率除以噪声功率,一般取dB (其中如果分子分母是功率的话,那么公式为10log10(X),如果分子分母是幅度的话,公式为20log10(X)),但是在雷达实测数据中我们是不知道信号的功率和噪声的功率,这需要我们进行脉冲压缩后,峰值代表信号功率,剩下取一部分进行统计分析,得到噪声功率。

下面两张图分别是实测雷达信号图和脉压后信号图,我会把这两个文件传到资源中,大家可以自己尝试处理一下。

雷达实测数据的信噪比_第1张图片

雷达实测数据的信噪比_第2张图片

对脉压后的图像对数化,可得(方便大家看他的趋势):

雷达实测数据的信噪比_第3张图片代码:

clc
clear
close all

%% 数据读取与波形
data = load('20230920-234830-slave-PRT1-data');                             % 雷达实测信号
data1 = load('20230920-234830-slave-PRT1-data1');                           % 脉冲压缩后的信号
figure,plot(real(data.data))
figure,plot(abs(data1.data1))
figure,plot(db(abs(data1.data1)))
N = length(data1.data1);                                                    % 信号长度
[~,N_max] = max(abs(data1.data1));                                          % 峰值坐标

%% 功率
s_pointer = N_max;
s = sum(abs(data1.data1(s_pointer)).^2)/(length(s_pointer));
n_pointer = [1:N_max-50,N_max+50:N];
n = sum(abs(data1.data1(n_pointer)).^2)/(length(n_pointer));
SNR = 10*log10((s-n)/n);

%% 幅度
s_pointer = N_max;
s = sum(abs(data1.data1(s_pointer)))/(length(s_pointer));
n_pointer = [1:N_max-50,N_max+50:N];
n = sum(abs(data1.data1(n_pointer)))/(length(n_pointer));
SNR = 20*log10(s/n);

其中功率算出来的SNR为:58.561761884213010;幅度算出来的SNR为:59.367852645436710,相差一个dB,推荐功率计算方法(即幅度平方)

注意:我之前认为在脉压图像中,除了信号区就是噪声区,这个其实是不对的,我们只需要从统计意义上,能够找到一个区域能代表噪声就好,我之前犯的错误就是噪声区里包含了部分信号的能量,导致SNR变小。

你可能感兴趣的:(学习经验,matlab)