线性调频信号的解线调(dechirp,去斜)处理matlab仿真

线性调频信号的解线调

线性调频信号的回波模型

对于线性调频脉冲压缩雷达,其发射信号为:
s ( t ) = r e c t ( t T ) e x p ( j π μ t 2 ) \begin{equation} s(t)=rect(\frac{t}{T})exp(j\pi \mu t^2) \end{equation} s(t)=rect(Tt)exp(jπμt2)

其中
r e c t ( t T ) = { 1 , 0 ≤ t ≤ T 0 , o t h e r w i s e . \begin{equation} rect(\frac{t}{T})= \left\{ \begin{array}{ll} 1, & 0\leq t \leq T\\ 0, & otherwise. \end{array} \right. \end{equation} rect(Tt)={1,0,0≤t≤Totherwise.

其中 t t t为快时间变量, T T T为脉冲宽度, μ \mu μ为调频斜率, B = T μ B=T\mu B=Tμ为雷达信号的带宽,搭载到载频上的发射信号为:
s ( t ) = r e c t ( t T ) e x p ( j π μ t 2 ) e x p ( j 2 π f c t ) \begin{equation} s(t)=rect(\frac{t}{T})exp(j\pi \mu t^2)exp(j2\pi f_c t) \end{equation} s(t)=rect(Tt)exp(jπμt2)exp(j2πfct)

假设单目标的情况,目标位于 R t a r R_{tar} Rtar处,接收到的回波信号表达式为
s r ( t ) = r e c t ( t − t 0 T ) e x p ( j π μ ( t − t 0 ) 2 ) e x p ( j 2 π f c ( t − t 0 ) ) \begin{equation} s_r(t)=rect(\frac{t-t_0}{T})exp(j\pi \mu (t-t_0)^2)exp(j2\pi f_c (t-t_0)) \end{equation} sr(t)=rect(Tt−t0)exp(jπμ(t−t0)2)exp(j2πfc(t−t0))

其中 t 0 = 2 R t a r / c t_0=2R_{tar}/c t0=2Rtar/c。

参考信号

参考信号同样是一个线性调频信号,调频斜率、载频与雷达发射的信号一样,但是脉宽大于雷达发射线性调频信号的 T T T,这个脉宽其实就是一个信号处理窗,我们接收到一个脉冲重复周期的雷达回波之后,对选定的一段信号进行处理,这一段信号的长度就是窗,因为我们不知道雷达回波中的脉冲位置,所以选取的窗应该至少等于脉冲宽度才能将其"覆盖"住。参考信号可以表示为:
s r e f ( t ) = r e c t ( t − t r e f T r e f ) e x p ( j π μ ( t − t r e f ) 2 ) e x p ( j 2 π f c ( t − t r e f ) ) \begin{equation} s_{ref}(t)=rect(\frac{t-t_{ref}}{T_{ref}})exp(j\pi \mu (t-t_{ref})^2)exp(j2\pi f_c (t-t_{ref})) \end{equation} sref(t)=rect(Treft−tref)exp(jπμ(t−tref)2)exp(j2πfc(t−tref))

其中, t r e f = 2 R r e f / c t_{ref}=2R_{ref}/c tref=2Rref/c, c c c为光速, R r e f R_{ref} Rref是参考距离, T r e f T_{ref} Tref是接收窗,一般而言 T r e f > T T_{ref}>T Tref>T。

图1 雷达回波和参考信号示意图

去斜处理

解线调就是将雷达回波和参考信号的共轭进行混频
s d e ( t ) = s r ( t ) ⋅ s r e f ∗ ( t ) = r e c t ( t − t 0 T ) e x p ( j 2 π ( − μ ( t 0 − t r e f ) ) t ) e x p ( − f c ( t 0 − t r e f ) ) e x p ( 1 / 2 μ ( t 0 2 − t r e f 2 ) ) ) \begin{equation} s_{de}(t)=s_r(t)\cdot s_{ref}^{*}(t)=rect(\frac{t-t_0}{T})exp(j2\pi (-\mu (t_0-t_{ref}))t)exp(-f_c(t_0-t_{ref}))exp(1/2\mu(t_0^2-t_{ref}^2))) \end{equation} sde(t)=sr(t)⋅sref∗(t)=rect(Tt−t0)exp(j2π(−μ(t0−tref))t)exp(−fc(t0−tref))exp(1/2μ(t02−tref2)))

上面式子中一共有3个指数项,且只有第一个指数项是时间 t t t的函数,后面两个记为 e x p ( j ϕ ) exp(j\phi) exp(jϕ),则可以化简为:
s d e ( t ) = s r ( t ) ⋅ s r e f ∗ ( t ) = r e c t ( t − t 0 T ) e x p ( j 2 π ( − μ ( t 0 − t r e f ) ) t ) e x p ( j ϕ ) \begin{equation} s_{de}(t)=s_r(t)\cdot s_{ref}^{*}(t)=rect(\frac{t-t_0}{T})exp(j2\pi (-\mu (t_0-t_{ref}))t)exp(j\phi) \end{equation} sde(t)=sr(t)⋅sref∗(t)=rect(Tt−t0)exp(j2π(−μ(t0−tref))t)exp(jϕ)

可以看到解线调后的信号是一个单频信号,其频率为 f = − μ ( t 0 − t r e f ) f=-\mu (t_0-t_{ref}) f=−μ(t0−tref),它是调频斜率 − μ -\mu −μ和相对时间 ( t 0 − t r e f ) (t_0-t_{ref}) (t0−tref)的函数, ( t 0 − t r e f ) (t_0-t_{ref}) (t0−tref)也就是雷达回波的脉冲相对于参考信号时间窗的延时。 t r e f t_{ref} tref是已知的,那么由解线调信号的频率便可以得到目标的延时。

去斜处理傅里叶变换得到脉压结果

我么对解线调信号进行傅里叶变换
S d e ( f ) = F { s d e ( t ) } = ∫ s d e ( t ) e x p ( − j 2 π f t ) d t = T r e f e x p ( j φ ( f ) ) s i n c ( T r e f ( f − f t a r ) ) \begin{equation} S_{de}(f)=\mathcal{F}\{s_{de}(t) \}=\int s_{de}(t)exp(-j2\pi ft)dt=T_{ref}exp(j\varphi (f))sinc(T_{ref}(f-f_{tar})) \end{equation} Sde(f)=F{sde(t)}=∫sde(t)exp(−j2πft)dt=Trefexp(jφ(f))sinc(Tref(f−ftar))

其中 f t a r f_{tar} ftar和 R t a r R_{tar} Rtar具有以下关系:
R t a r = R r e f + ( c ⋅ f t a r ) / ( 2 μ ) \begin{equation} R_{tar}=R_{ref}+(c\cdot f_{tar})/(2\mu) \end{equation} Rtar=Rref+(c⋅ftar)/(2μ)

整个流程如下图所示,解线调之后由频域图可以得到和匹配滤波相同的结果,它们都是sinc函数。

图2 解线调流程图及时频图

解线调仿真

下面仿真的例子:

线性调频信号的带宽为2MHz,采样频率为8MHz,雷达发射线性调频信号脉宽50us,解线调脉宽100us。

matlab 复制代码
%%Dechirp仿真,解线性调频
% 雷达信号采用线性调频信号,
% 主要内容:线性调频信号的生成、雷达回波的模拟、解线调参考信号生成、解线调操作、结果绘制
% Author: baidan @beijing 2023.1.11
%=========================================================================%
%                        雷达参数设置                                     %
%=========================================================================%
clear all;close all;clc;
C = 3.0e8;              %光速(m/s)
BandWidth = 2.0e6;      %雷达发射信号带宽,带宽=B=1/tau,tau是脉冲宽度
TimeWidth = 50.0e-6;    %雷达发射信号的脉冲时宽
k = BandWidth/TimeWidth;%调频斜率
PRT = 100e-6;           %雷达发射脉冲重复周期(s),100us对应1/2*100*300=15000米最大无模糊距离
Fs = BandWidth*4;       %采样频率 采样点数为PRT*FS=480
NoisePower = 1;         %噪声功率
SNR = 0;                %信噪比,以dB为单位
SigPower = 10^(SNR/10); %目标功率,无量纲
TargetDistance = 2500;  %目标距离,单位:
TargetDelay = 2*TargetDistance/C;           %延时时间,由目标的距离换算成时间,即线性调频信号的时间
mDelayNumber = fix(Fs*2*TargetDistance/C);  %把目标距离换算成采样点(距离门)
plot_enable_H = 1;      %绘图控制符
plot_enable_L = 0;      %绘图控制符
%=========================================================================%
%                            调用函数产生线性调频信号                     %
%=========================================================================%
[LFMPulse,targetEchoPRT,matchedFilterCoeff,pulseNumber,PRTNumber] = GenerateLFMSignal(BandWidth,TimeWidth,PRT,Fs,SigPower,TargetDistance,plot_enable_L);%调用函数
fprintf('Target appear in the %.1f us, distence is %.1f m, at %dth sampling point\n',TargetDelay*1e6,TargetDistance,mDelayNumber);
%=========================================================================%
% %                        产生功率为1高斯白噪声并添加噪声                  %
% %=========================================================================%
noise = GaussianNoise(PRT,Fs);
%mixedSignal = targetEchoPRT + noise; %添加噪声
mixedSignal = targetEchoPRT; %不添加噪声
%=========================================================================%
%                                   产生参考信号                          %
%=========================================================================%
[referSig,sigSamNumber] = ReferenceSignal(k,PRT,Fs,plot_enable_H); %四个参数分别是调频斜率,脉宽,采样率,绘图控制符
sref = referSig; %进行共轭
sde = targetEchoPRT.*(sref); %雷达回波和参考信号相乘
Sde = fftshift(fft(sde))*2/1600; % 对dechirp之后的信号进行fft
f=Fs*(0:PRTNumber-1)/PRTNumber-Fs/2;% -fs/2到 fs/2
figure;
subplot(4,1,1);plot(real(targetEchoPRT),'linewidth',1);axis tight;title('Target echo '); %绘制雷达回波
subplot(4,1,2);plot(real(sref),'linewidth',1);axis tight;title('Reference signal'); %绘制参考信号
subplot(4,1,3);plot(real(sde),'linewidth',1);axis tight;title('Dechirp signal'); %绘制参考信号
subplot(4,1,4);plot(f,(abs(Sde)),'linewidth',1);axis tight;title('fft of Dechirp signal'); %绘制参考信号

其中的子函数,产生线性调频信号:

matlab 复制代码
function [LFMPulse,targetEchoPRT,matchedFilterCoeff,pulseNumber,PRTNumber] = GenerateLFMSignal(bandWidth,pulseDuration,PRTDuration,samplingFrequency,signalPower,targetDistece,plotEnableHigh)
% 该函数用于产生线性调频信号,以及雷达的目标反射回波,仅产生单个回波
%  Author:壮神 2023.9.21 @Beijing
% Input : 
%   * bandWidth: 信号带宽 ,参考值:2.0e6 表示2MHz
%   * pulseDuration:脉冲持续时间,参考值:40.0e-6 表示40ms
%   * PRTDuration:脉冲重复周期,参考值:240ms
%   * samplingFrequency:采样频率,参考值:2倍的信号带宽
%   * signalPower:信号能量,参考值:1
%   * targetDistece:目标距离,最大无模糊距离由脉冲重复周期决定。计算公式:1/2*PRTDuration*光速
%   * plotEnableHigh: 绘图控制符,1:打开绘图,0:关闭绘图
% Output : 
%    * LFMPulse:线性调频信号
%    * targetEchoPRT: 目标反射回波
%    * matchedFilterCoeff: 匹配滤波器系数
%    * pulseNumber:当前采样率下线性调频信号的采样点数
%    * PRTNumber:1个PRT对应的采样点数
C = 3.0e8;      %光速(m/s)
BandWidth = bandWidth;  %雷达发射信号带宽,带宽=B=1/tau,tau是脉冲宽度
TimeWidth = pulseDuration; %雷达发射信号的脉冲时宽

PRT = PRTDuration;       %雷达发射脉冲重复周期(s),240us对应1/2*240*300=360000米最大无模糊距离
Fs = samplingFrequency;         %采样频率
SampleNumber = fix(Fs*PRT);
%=========================================================================%
%                        目标参数设置                                     %
%=========================================================================%
SigPower = signalPower;           %目标功率,无量纲
TargetDistance = targetDistece; %目标距离,单位:m
DelayNumber = fix(Fs*2*TargetDistance/C); %把目标距离换算成采样点(距离门)
fprintf('目标出现在距离门%d\n',DelayNumber);
%=========================================================================%
%                        产生线性调频信号、匹配滤波器                     %
%=========================================================================%
number = fix(Fs*TimeWidth); %回波采样点数=脉压系数长度=暂态点数目+1
if rem(number,2)~=0
    nember = nember + 1;
end
Chirp = zeros(1,number);
for i = -fix(number/2):fix(number/2)-1
    Chirp(i+fix(number/2)+1)=exp(1j*(pi*(BandWidth/TimeWidth)*(i/Fs)^2));%产生复ChIrp信号
end
coeff = conj(fliplr(Chirp)); %把Chirp信号翻转并把复数共轭,产生脉压系数
%=========================================================================%
%                      绘制线性调频信号                                   %
%=========================================================================%
if plotEnableHigh == 1
    figure;
    plot(real(Chirp)); %绘制线性调频信号
    xlabel('Sampling points'); ylabel('Amplitude');title('线性调频信号实部');
end
SignalTemp = zeros(1,SampleNumber); %1个PRT
SignalTemp(DelayNumber+1:DelayNumber+number) = sqrt(SigPower)*Chirp;%将线性调频信号按照距离进行延时
if plotEnableHigh == 1
    figure;
    plot(real(SignalTemp)); %绘制1个完整的PRT的雷达回波信号
    xlabel('Range bin'); ylabel('Amplitude');title('雷达回波的实部');
end
%=========================================================================%
%                          进行脉冲压缩                                   %
%=========================================================================%
Echo = SignalTemp; % 目标回波
pc_time0 = conv(Echo,coeff); % 回波和滤波器卷积的结果
pc_time1 = pc_time0(number:number+SampleNumber-1); %去掉暂态点
realTargetRange = find(abs(pc_time1)==max(abs(pc_time1)))-1; %由脉压结果目标距离
fprintf('The target range bin is  %d',realTargetRange);
if plotEnableHigh == 1
    figure; %时域脉压结果
    subplot(2,1,1);plot(abs(pc_time0),'r-');
    xlabel('Range bin'); ylabel('Amplitude');title('时域脉压结果');
    subplot(2,1,2);plot(abs(pc_time1),'r-');
    xlabel('Range bin'); ylabel('Amplitude');title('去掉暂态点的时域脉压结果');
end
%=========================================================================%
%                              返回参数                                   %
%=========================================================================%
LFMPulse = Chirp; %线性调频信号
targetEchoPRT = SignalTemp; %目标反射回波
matchedFilterCoeff = coeff; %匹配滤波器系数
pulseNumber = number; %线性调频信号的采样点数
PRTNumber = SampleNumber; %目标反射回波的采样点数
end

其中的子函数,产生解线调参考信号:

matlab 复制代码
function [referSig,sigSamNumber] = ReferenceSignal(chirpRate,windowDuration,samplingFrequency,plotEnableHigh)
% 该函数用于产生dechirp雷达的参考信号
%  Author:王壮壮 2024.1.14 @shenzhen
% Input : 
%   * chirpRate: 调频斜率
%   * windowDuration:接收信号的时间窗,一般要大于雷达的线性调频信号的脉宽
%   * samplingFrequency:采样频率,参考值:2倍的信号带宽
%   * plotEnableHigh: 绘图控制符,1:打开绘图,0:关闭绘图
% Output : 
%    * referSig:参考信号,也是一个线性调频信号,但是脉宽要大于雷达发射的LFM信号
%    * pulseNumber:当前采样率下线性调频信号的采样点数
C = 3.0e8;      %光速(m/s)
TimeWidth = windowDuration; %接收窗的时宽
Fs = samplingFrequency;         %采样频率
%=========================================================================%
%                              产生线性调频信号                           %
%=========================================================================%
number = fix(Fs*TimeWidth); %采样点数
if rem(number,2)~=0
    nember = nember + 1;
end
% Chirp = zeros(1,number);
for i = -fix(number/2):fix(number/2)-1
    Chirp(i+fix(number/2)+1)=exp(1j*(pi*chirpRate*(i/Fs)^2));%产生复ChIrp信号
end
%=========================================================================%
%                              返回参数                                   %
%=========================================================================%
referSig = conj(Chirp); %对复chirp信号进行共轭得到参考信号
sigSamNumber = number; %参考信号的采样点数
%=========================================================================%
%                        分析参考信号的频域                               %
%=========================================================================%
CHIRP = fftshift(fft(referSig))*2/sigSamNumber;  %对参考信号进行fft得到它的频域
frequency_index = Fs*(0:sigSamNumber-1)/sigSamNumber-Fs/2; %频率下标
%=========================================================================%
%                        绘制参考信号                                     %
%=========================================================================%
if plotEnableHigh == 1
    figure;
    subplot(2,1,1);plot((1:sigSamNumber),real(Chirp)); %绘制参考信号的时域波形
    xlabel('Sampling points'); ylabel('Amplitude');title('参考信号实部');
    subplot(2,1,2);plot(frequency_index,abs(CHIRP)); %绘制参考信号的频谱图
    xlabel('Frequency/Hz'); ylabel('Amplitude');title('参考信号的频谱');
end
end

绘制图形如下:

图3 参考信号时频图


图4 解线调信号时频图

总结

去斜处理的主要原理为用发射副本信号与回波混频得到基带信号,再用傅里叶变换提取基带信号频率,通过时域到频域的转换将时域脉冲信号压缩为频域上的一个峰。匹配滤波和解线调其实都是一个sinc函数乘以一个复指数项的形式,两者的sinc函数一个位于快时间域一个位于距离频率域。去斜处理在一些特殊场合,不仅运算简单,而且可以简化设备,已经广泛应用于SAR和ISAR中作脉冲压缩。

相关推荐
IT猿手3 小时前
SDMTSP:粒子群优化算法PSO求解单仓库多旅行商问题,可以更改数据集和起点(MATLAB代码)
开发语言·人工智能·matlab·智能优化算法
我爱C编程11 小时前
基于Qlearning强化学习的机器人路线规划matlab仿真
matlab·机器人·强化学习·路线规划·qlearning·机器人路线规划
一只嵌入式爱好者19 小时前
高速信号处理中的预加重、去加重和均衡
信号处理
西岸行者20 小时前
捋一捋相关性运算,以及DTD和NLP中的应用
人工智能·算法·自然语言处理·信号处理
Evand J1 天前
LOS/NLOS环境建模与三维TOA定位,MATLAB仿真程序,可自定义锚点数量和轨迹点长度
开发语言·matlab
孤亭远见1 天前
COMSOL with Matlab
matlab
图南楠1 天前
simulink离散传递函数得到差分方程并用C语言实现
matlab
信号处理学渣1 天前
matlab画图,选择性显示legend标签
开发语言·matlab
机器学习之心2 天前
Bayes-GRU-Attention的数据多特征分类预测Matlab实现
matlab·分类·gru
叶庭云2 天前
Matlab 和 R 语言的数组索引都是从 1 开始,并且是左闭右闭的
matlab·编程语言·r·数组索引·从 1 开始