雷达信号处理算法:静态杂波滤除(附MATLAB代码和数据)

本文编辑:调皮哥的小助理

本期文章将介绍三种雷达信号处理常用的静态杂波滤方法的基本原理,分别是零速通道置零法、动目标显示(MTI)以及相量均值相消算法(平均相消算法),并分析了静态杂波的滤除效果,以及三种方法的优缺点和应用场景,最后提供了一个MATLAB程序和数据以供读者学习参考。

数据说明:本文所采用的数据为雷达采集室内人员目标运动的一帧数据,采用的硬件平台为IWR1642,其中数据是通过串口直接输出,由MATLAB接收并处理。相关的操作和下面的链接中的操作是近似的,只是本文仅对静态杂波滤除算法做分析。

调皮连续波:TI单芯片毫米波雷达xWR1642人员检测代码分析(5)——串口单帧数据采集代码详解

1.零速通道置零法

零速通道置零法,是指在2D-FFT(速度维FFT)后直接将R-V谱矩阵(RD图)速度通道中的零速通道或零速附近通道置零,此操作意味着静止目标或者低速目标会直接从R-V谱矩阵中消失。零速通道置零法操作简单,易于理解。

如图1所示,是未经过任何处理的R-V谱矩阵,其中室内人员目标在3.5米左右,速度为-0.317m/s,靠近雷达运动。

在这里插入图片描述
(图1 R-V谱矩阵(未经过静态杂波滤除))

图1中信号的直流分量幅值很高,目标的幅度被直流分量严重压制,在进行后续的CFAR处理之前最好能够将信号的直流分量去除,便于提高雷达的性能。图2所示是零通道置零法的效果,其中本程序对零速通道以及零速通道相邻的一个通道都置为零。零速通道置零法对目标的幅度没有发生改变,对直流分量有一定的抑制效果,但对目标的微多普勒信息有一定的损失。因此,采用这种最简单的方法需要考虑具体的应用场景。

在这里插入图片描述
(图2 零速通道置零法)

微多普勒信息,对于不同的雷达具有不同的作用。例如,对于室内人员检测雷达,则微多普勒信息就显得非常重要,因为人体目标是非刚体物体,其身体各个部分的运动会带来许多的微多普勒效应,因此保留这部分信息对于后续的信号处理或者数据处理都具有非常重要的意义。对于高速目标,如交通流量检测雷达,微多普勒信息就显得不那么重要 ,因为汽车运动的速度是非常快的。关于雷达微多普勒的效应,更多内容可以阅读Victor C. Chen的《雷达中的微多普勒效应》一书,需要本书可私信调皮哥。

2.动目标显示(MTI)

MTI是雷达工程师们熟稔于心的雷达信号处理算法,基本上没有不了解的。MTI是指利用杂波抑制滤波器来抑制杂波,提高雷达信号的信杂比,以利于运动目标检测的技术。由于杂波谱通常集中在直流分量和雷达重复频率的整数倍处,而 MTI 滤波器利用杂波与运动目标的多普勒频率的差异,使得滤波器的频率响应在直流和PRF脉冲重复频率的整数倍处具有较深的阻带, 而在其他频点的抑制较弱, 从而通过较深的“凹口”抑制静止目标和静物杂波。在实验中,通常采用两脉冲对消器,也称一次对消器,其滤波器结构如下图3所示。

在这里插入图片描述
(图 3 一次对消滤波器结构图)

一次对消器的时域表达式和传递函数如下:

y ( n ) = x ( n ) − x ( n − 1 ) y(n)=x(n)-x(n-1) y(n)=x(n)x(n1)
H ( z ) = 1 − z − 1 H(z)=1-z^{-1} H(z)=1z1

MTI的核心原理就是静止目标的相位不会发生变化,而运动目标的相位与静止目标不同,因此相邻两个脉冲做差会把相同的相位值减掉,留下的就是运动目标的相位,从而达到滤除静止目标的功能。

MTI的效果如图4所示,其中信号的直流分量部分得到了良好的抑制,但同时目标的幅值也受到了同样的影响,因为在一次对消过程中,相邻的脉冲相减其实除了相位得到了消除,还有“复数绝对值”的削弱。另外,MTI由于仅对零速通道附近的信号“陷波”,而对于高速通道保持不变,因此得到图4的结果中背景噪声显得非常杂乱。

在这里插入图片描述
(图4 MTI一次对消效果)

3.相量均值相消算法(平均相消算法)

相量均值相消算法,也被称为平均相消算法,其实现的原理为:静止目标到雷达天线的距离是不变的,每一束接收脉冲上静止目标的时延也是不变的,对所有接收脉冲求平均就可以得到参考的接收脉冲,然后用每一束接收脉冲减去参考接收脉冲就可以得到目标回波信号,核心思想是求均值做差。

其实现的过程为:首先对所有接收脉冲求平均得出参考接收脉冲,接着利用每一束接收脉冲减去参考接收脉冲就可以得到目标回波信号,参考接收脉冲的表达式为:

C [ m ] = 1 N ∑ i = 1 N R [ m , i ] C[m]=\frac{1}{N} \sum_{i=1}^N R[m, i] C[m]=N1i=1NR[m,i]

其中,m为快时间维(距离维)采样点,i为慢时间维(速度维)时间采样点,相量均值相消算法的公式为:​

R[m, n]=R[m, n]-C[m]。

相量均值相消的算法原理模型如图5所示,倘若目标为静止目标,则chirp回波信号的相位相同,相量求和后累加得到的均值会很大,如 ( n 1 + n 2 + n 3 ) / 3 \left(n_1+n_2+n_3\right) / 3 (n1+n2+n3)/3 ,则每个chirp信号减完均值之后信号幅度变得非常小。假设目标是运动目标或者微动目标,由于目标运动会导致每个调频脉冲信号间的相位不同,其相量求和累加后会出现抵消,则其均值会很小,如 ( m 1 + m 2 + m 3 ) / 3 \left(m_1+m_2+m_3\right) / 3 (m1+m2+m3)/3 ,每个chirp信号减完均值后幅值影响不大。因此,运动或微动的目标就会在速度维傅里叶变换后变得“突出”。

在这里插入图片描述
(图5 相量均值相消算法模型)

综上所述,MTI和相量均值相消算法两种算法在原理的核心思想上有些许近似,最大的区别为:MTI是直接利用相位的差值消除静态杂波,而相量均值相消算法是通过相量叠加再求平均然后做差,去除静态杂波。因此MTI仅仅是抑制了静态目标的相位,对于微动目标不友好。而相量均值相消算法则通过求均值,在抑制静止目标相位的同时极大提高了动目标或者微动目标的信噪比。

如图6所示,是相量均值相消算法的效果,信号的直流分量得到了一定程度的抑制,但整体抑制效果没有MTI那么明显。相量均值相消算法最优的特点是对目标的幅度没有削弱作用,但其背景噪声比较干净,同时对微多普勒的信息保留的比较完整,完全让目标保持了较高的信噪比。

在这里插入图片描述
(图6 相量均值相消算法效果)

对于人员目标的检测,建议采用这种算法。如图7所示,是相量均值相消算法并去除了直流分量后的效果,基本上可以达到非常理想的效果。

在这里插入图片描述
(图7 相量相消后并进行直流分量去除效果)

4.MATLAB代码

数据部分由于在文章中无法分享,因此本文所用到的MTALBA代码和数据下载:代码和数据

我是调皮哥,感谢阅读。

%% 作者:调皮连续波
%% 公众号:调皮的连续波
%% 时间2022年04月
%%
clc;
close all;
clear all;
%% 雷达参数
Tx_Number = 2; %发射天线
Rx_Number = 4; %接收天线
Range_Number = 128; %距离点数(每个chirp 128个点)
Doppler_Number = 128; %多普勒通道数
global Params;
Params.NChirp = Doppler_Number; %1帧数据的chirp个数
Params.NChan = Rx_Number; %RxAn数,ADC通道数
Params.NSample = Range_Number; %每个chirp ADC采样数
Params.Fs = 2.5e6; %采样频率
Params.c = 3.0e8; %光速
Params.startFreq = 77e9; %起始频率
Params.freqSlope = 60e12; %chirp的斜率
Params.bandwidth = 3.072e9; %真实带宽
Params.lambda=Params.c/Params.startFreq; %雷达信号波长
Params.Tc = 144e-6; %chirp周期
global FFT2_mag;
%% 坐标计算
[X,Y] = meshgrid(Params.c*(0:Params.NSample-1)Params.Fs/2/Params.freqSlope/Params.NSample, …
(-Params.NChirp/2:Params.NChirp/2 - 1)Params.lambda/Params.Tc/Params.NChirp/2);
adc_data =load(‘angle_15.mat’);
Data_dec=(adc_data.prompt_1); %将16进制转换为10进制
%% 数据读取、拆分、组合
Data_zuhe=zeros(1,Tx_Number
Rx_Number
Doppler_NumberRange_Number2); %建立计算存储数据的空矩阵
for i=1:1:Tx_NumberRx_NumberDoppler_NumberRange_Number2
Data_zuhe(i) = Data_dec((i-1)2+1)+Data_dec((i-1)2+2)256;%两个字节组成一个数,第二个字节乘以256相当于左移8位。
if(Data_zuhe(i)>32767)
Data_zuhe(i) = Data_zuhe(i) - 65536; %限制幅度
end
end
%% 分放数据
ADC_Data=zeros(Tx_Number,Doppler_Number,Rx_Number,Range_Number
2); %建立计算存储数据的空矩阵
for t=1:1:Tx_Number
for i=1:1:Doppler_Number
for j=1:1:Rx_Number
for k=1:1:Range_Number
2 %实部虚部
ADC_Data(t,i,j,k) = Data_zuhe(1,(((t-1)Doppler_Number+(i-1))Rx_Number+(j-1))Range_Number2+k);%时域数据排列顺序为 TX1 TX2
end
end
end
end
%% 打印全部的实虚数据
Re_Data_All=zeros(1,Range_Number
Doppler_Number
Tx_Number
Rx_Number); %建立计算存储数据的空矩阵
Im_Data_All=zeros(1,Range_NumberDoppler_NumberTx_NumberRx_Number); %建立计算存储数据的空矩阵
% 虚部实部分解
for i=1:1:Tx_Number
Rx_NumberDoppler_NumberRange_Number
Im_Data_All(1,i) = Data_zuhe(1,(i-1)2+1);
Re_Data_All(1,i) = Data_zuhe(1,(i-1)2+2);
end
% 原始信号实部、虚部图形绘制
% figure()
% subplot(2,1,1);
% plot(Im_Data_All(1,1:3000));title(‘实部波形’);
% xlabel(‘采样点数’);
% ylabel(‘幅度’);
% subplot(2,1,2);
% plot(Re_Data_All(1,1:3000),‘r’);title(‘虚部波形’);
% xlabel(‘采样点数’);
% ylabel(‘幅度’);
%% 打印分组后的实虚数据 数据结构为:2T4R在TX2组的16个脉冲数据
Re_Data=zeros(Doppler_Number,Range_Number); %建立计算存储数据的空矩阵
Im_Data=zeros(Doppler_Number,Range_Number); %建立计算存储数据的空矩阵
for chirp=1:Doppler_Number %查看所在chirp的数据
for j=1:1:Tx_Number
for k=1:1:Rx_Number
for i=1:1:Range_Number
Re_Data(chirp,i) = ADC_Data(j,chirp,k,(i-1)2+2);
Im_Data(chirp,i) = ADC_Data(j,chirp,k,(i-1)2+1);
end
end
end
end
%% 虚部+实部数据重组得到复信号
ReIm_Data = complex(Re_Data,Im_Data); %这里只用虚拟天线的最后一组数据。原本数据大小应该是16
256
8=32768,现在只有16
256
1=4096。
ReIm_Data_All =complex(Re_Data_All,Im_Data_All);
ReIm_Data_all1 = zeros(Range_Number,Doppler_Number,4);
ReIm_Data_all2 = zeros(Range_Number,Doppler_Number,4);
%% 虚拟阵列重组 4通道->8通道
for nn=1:4
for mm=1:Range_Number
ReIm_Data_all1(mm,:,nn) = ReIm_Data_All((nn-1)*Range_Number+ ((mm-1)4Range_Number+1)😦(mm-1)4Range_Number+Range_Number)+(nn-1)*Range_Number );
ReIm_Data_all2(mm,:,nn) = ReIm_Data_All((nn-1)*Range_Number+131072/2+((mm-1)4Range_Number+1):131072/2+((mm-1)4Range_Number+Range_Number) +(nn-1)*Range_Number );
end
end
ReIm_Data_All = cat(3,ReIm_Data_all1(:,:,1:4), ReIm_Data_all2(:,:,1:4));
%% 1D FFT
fft1d= zeros(Doppler_Number,Range_Number,8);
for qq =1:8
for chirp_fft=1:Doppler_Number
fft1d(chirp_fft,:,qq) = fft((ReIm_Data_All(chirp_fft,:,qq)));
end
end
FFT1_mag=abs(fft1d(:,:,1));
figure(1);
mesh(FFT1_mag);
xlabel(‘采样点数’);ylabel(‘脉冲数’);zlabel(‘幅度’);
title(‘距离维FFT结果’);
%% MTI 动目标显示
fft1d_MTI= zeros(Range_Number,Doppler_Number,8);
for cc =1:8
for ii =1:Doppler_Number-1
fft1d_MTI (ii,:,cc) = fft1d(ii+1,:,cc)-fft1d(ii,:,cc);
end
end
%
%
% mesh(abs(ReIm_Data_All(:,:,1)));
%% 相量均值相消算法-静态杂波滤除
fft1d_avg = zeros(128,128,8);
for n=1:8
avg = sum(fft1d(:,:,n))/128;
for chirp=1:128
fft1d_avg(chirp,:,n) = fft1d(chirp,:,n)-avg;
end
end
% figure;
% mesh(X,Y,abs(fft1d_jingtai(:,:,1)));
% fft1d =fft1d_jingtai;
%%
%% 2D FFT
fft2d= zeros(Doppler_Number,Range_Number,8);
for kk=1:8
for chirp_fft=1:Range_Number
fft2d(:,chirp_fft,kk) =fftshift( fft((fft1d(:,chirp_fft,kk)))); %未经过静态杂波滤除
fft2d_MTI(:,chirp_fft,kk) =fftshift( fft((fft1d_MTI(:,chirp_fft,kk)))); %MTI
fft2d_avg(:,chirp_fft,kk) =fftshift( fft((fft1d_avg(:,chirp_fft,kk)))); %相量均值法
end
end
figure(2);
fft2d_0 =abs(fft2d(:,:,1));
mesh(X,Y,fft2d_0);
xlabel(‘距离维(m)’);ylabel(‘速度维(m/s)’);zlabel(‘幅度’);
title(‘R-V谱矩阵’);
figure(3);
fft2d_0 =abs(fft2d(:,:,1));
fft2d_0(63:65,:)=0;
mesh(X,Y,fft2d_0);
xlabel(‘距离维(m)’);ylabel(‘速度维(m/s)’);zlabel(‘幅度’);
title(‘零速通道直接置零法’);
figure(4);
mesh(X,Y,abs(fft2d_MTI(:,:,1)));
xlabel(‘距离维(m)’);ylabel(‘速度维(m/s)’);zlabel(‘幅度’);
title(‘MTI’);
figure(5);
mesh(X,Y,abs(fft2d_avg(:,:,1)));
xlabel(‘距离维(m)’);ylabel(‘速度维(m/s)’);zlabel(‘幅度’);
title(‘相量均值相消’);
%直流分量去除 相量均值相消算法-静态杂波滤除
figure(6)
fft2d_avg(:,1,1) =0;
mesh(X,Y,abs(fft2d_avg(:,:,1)));
xlabel(‘距离维(m)’);ylabel(‘速度维(m/s)’);zlabel(‘幅度’);
title(‘相量均值相消’);

### 回答1: MATLAB自适应去杂波是一种信号处理方法,用于从信号中去除杂波和噪声,以提取出所需的有用信息。 MATLAB中提供了多种自适应去杂波算法,常用的包括:自适应中值滤波、自适应高斯滤波、自适应均值滤波等。 自适应中值滤波是一种基于像素邻域的滤波方法,对每个像素进行判断,根据其邻域像素的灰度值特征来决定是否使用中值滤波。如果邻域内的灰度值变化不大,则认为该像素是杂波并进行中值滤波操作。通过设定适当的邻域尺寸和中值窗口大小,可以有效去除图像中的杂波。 自适应高斯滤波则是一种基于像素邻域的加权平均滤波方法,该方法通过根据像素邻域的方差来计算像素权重,从而在滤波过程中对邻域内的不同像素赋予不同的权值。这样,像素邻域的平均值会更加接近于信号本身的值,而不会受到杂波的干扰。 自适应均值滤波也是一种基于像素邻域的滤波方法,它的原理是根据像素邻域的像素值与像素本身的差异来判断是否是杂波,并对该像素进行均值滤波。这种方法对于大部分图像中的杂波去除效果较好。 通过在MATLAB中调用这些自适应去杂波算法,可以根据具体的应用需求和图像特点选择合适的方法,并进行参数调节以获得最佳的去杂波效果。 ### 回答2: Matlab中的自适应去杂波指的是一种信号处理方法,通过自动调整滤波器的参数来减少或去除信号中的噪声和杂波。以下是一个简要的步骤: 1. 读取信号数据:首先,我们需要读取待处理的信号数据,可以是音频、图像或其他类型的数据。 2. 检测噪声:使用Matlab提供的信号处理工具,可以对信号进行噪声分析和检测,以确定噪声的类型和特征。常用的方法包括统计分析、功率谱分析等。 3. 选择滤波器:根据噪声的特征,选择适合的滤波器。常见的滤波器有均值滤波器、中值滤波器、高斯滤波器等。Matlab中提供了大量的滤波器函数可以直接调用。 4. 参数调整:根据信号中噪声的特点,自适应地调整滤波器的参数。可以根据实际情况采用手动调整或自动调整的方式,在信号处理过程中实时监测噪声的变化并相应调整参数。 5. 去除杂波:根据已选择好的滤波器和参数,在Matlab中进行信号处理,应用滤波器对信号进行去噪和去杂波处理。可以使用Matlab中的滤波函数或自定义函数来实现。 6. 结果评估:对处理后的信号进行质量评估,可以通过可视化、数值分析等方式来比较处理前后的差异,判断处理效果是否满足要求。 总的来说,Matlab中的自适应去杂波是一种基于信号检测和滤波器参数调整的信号处理方法,可以帮助我们减少或去除信号中的噪声和杂波,提高信号质量。 ### 回答3: matlab 自适应去杂波是一种信号处理技术,用于去除信号中的噪声或杂波。它能根据信号自身的特点来自动调整去杂波算法的参数,以达到最佳去噪效果。 在matlab中,常用的自适应去杂波方法有陷波滤波器、自适应线性滤波器和小波去噪等。 陷波滤波器是一种基于滤波器系数自适应调整的方法。它通过不断调整滤波器的参数来消除杂波,同时保留信号的有用成分。陷波滤波器在matlab中可以通过自适应滤波函数进行实现。 自适应线性滤波器是一种根据输入信号的局部性质自适应调整滤波器的方法。它通过分析信号的统计特征,动态地更新滤波器的参数,以适应不同的噪声环境。在matlab中,可以使用自适应滤波函数对信号进行自适应去杂波处理。 小波去噪是一种基于小波变换的去杂波方法。它将信号分解为不同尺度的小波系数,通过对小波系数进行阈值处理,去除对应的噪声分量,然后再通过小波反变换得到去噪后的信号。在matlab中,可以使用小波去噪函数对信号进行自适应去杂波处理。 综上所述,matlab提供了多种自适应去杂波的方法,可以根据具体的信号特点和噪声环境选择适用的方法进行去噪处理,以提高信号的质量和可靠性。使用这些自适应去杂波方法,可以更好地处理实际信号中存在的噪声问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

调皮连续波(雷达算法工程师)

鼓励调皮哥继续在雷达领域创作!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值