基于MATLAB的雷达的杂波模拟器

零记忆非线性变换法

  • 零记忆非线性变换法(ZMNL:Zero Memory Nonlinearity)的思路清晰,是目前使用最多的经典算法。ZMNL法的基本思路是:首先产生相关的高斯随机序列,然后经某种非线性变换得到需要的相关非高斯随机序列。其过程如下图所示:

    零记忆非线性变换的过程框图
    图中,先产生不相关的高斯白噪声序列,经过线性滤波器,使其满足谱特性,即经过后得到的杂波序列,其功率谱函数为系统幅频函数的平方,其幅度分布仍然服从高斯分布。杂波序列经过非线性滤波器后得到随机序列,即为所需要的杂波序列。其中滤波器使序列满足特定的幅度分布特性。
    该法最关键也是比较困难的地方就是由给定的非高斯序列的相关函数推导得出变换之前的高斯序列的相关函数,而且非线性关系会随杂波幅度分布的不同而不同。
    ZMNL方法可以实现对对数正态分布、韦布尔分布、K分布等相关非高斯分布杂波的模拟仿真,且比较容易实现、运算速度快,是杂仿真中常用的方法。

  • 使用的是MATLAB R2016b版本,关于各种分布的理论知识在这里我就不多说了,直接上程序。程序运行出现三种图,分别为:杂波波形图、杂波幅度分布图和杂波功率谱。

  • 瑞利分布

clear all;close all;
azi_num=2000;   %取2000个点
fr=1000;        %雷达重复频率

lamda0=0.05;   %杂波波长
sigmav=1.0;     %杂波方差
sigmaf=2*sigmav/lamda0;  


rand('state',sum(100*clock)); %产生服从U(0,1)分布的随机序列
d1=rand(1,azi_num);            
rand('state',7*sum(100*clock)+3);
d2=rand(1,azi_num);
xi=2*sqrt(-2*log(d1)).*cos(2*pi*d2);  %正交且独立的高斯序列N(0,1)
xq=2*sqrt(-2*log(d1)).*sin(2*pi*d2);
%形成滤波器频率响应
coe_num=12;           %求滤波器系数,用傅里叶级数展开法
for n=0:coe_num
    coeff(n+1)=2*sigmaf*sqrt(pi)*exp(-4*sigmaf^2*pi^2*n^2/fr^2)/fr;  
end
for n=1:2*coe_num+1
    if n<=coe_num+1
        b(n)=1/2*coeff(coe_num+2-n);
    else
        b(n)=1/2*coeff(n-coe_num);
    end
end
%生成高斯谱杂波
xxi=conv(b,xi);   
xxq=conv(b,xq);   
xxi=xxi(coe_num*2+1:azi_num+coe_num*2);%目的是去掉暂态响应
xxq=xxq(coe_num*2+1:azi_num+coe_num*2);
xisigmac=std(xxi);     
ximuc=mean(xxi);       
yyi=(xxi-ximuc)/xisigmac;    
xqsigmac=std(xxq);     
xqmuc=mean(xxq);       
yyq=(xxq-xqmuc)/xqsigmac;    %归一化
sigmac=1.2 ;           %杂波的标准差
yyi=sigmac*yyi;        %使瑞利分布杂波具有指定的标准差
yyq=sigmac*yyq;        %使瑞利分布虚部杂波
ydata=yyi+j*yyq;       %瑞利分布杂波形成
figure;
subplot(211);plot(real(ydata)); %瑞利分布杂波实部
title('瑞利杂波时域波形,实部');  
subplot(212);plot(imag(ydata)); %瑞利分布杂波虚部
title('瑞利杂波时域波形,虚部')

num=100;                   %求概率密度函数的参数
maxdat=max(abs(ydata));
mindat=min(abs(ydata));
NN=hist(abs(ydata),num);   
xpdf1=num*NN/((sum(NN))*(maxdat-mindat));        %用直方图估计的概率密度函数
xaxisl=mindat:(maxdat-mindat)/num:maxdat-(maxdat-mindat)/num;  
th_val=(xaxisl./sigmac.^2).*exp(-xaxisl.^2./(2*sigmac.^2));   %概率密度函数理论值
figure;
plot(xaxisl,xpdf1);               %做出仿真结果的概率密度函数曲线
hold on;plot(xaxisl,th_val,'r:'); %做出理论概率密度函数曲线
title('杂波幅度分布');
xlabel('幅度');ylabel('概率密度');

signal=ydata;
signal=signal-mean(signal);      %求功率谱密度,先去掉直流分量
figure;M=256;                     %用burg法估计功率谱密度
psd_dat=pburg(real(signal),32,M,fr);
psd_dat=psd_dat/(max(psd_dat));   %归一化处理
freqx=0:0.5*M;
freqx=freqx*fr/M;
plot(freqx,psd_dat);title('杂波频谱');
xlabel('频率/HZ');ylabel('功率谱密度');

%做出理想高斯谱曲线
powerf=exp(-freqx.^2/(2*sigmaf.^2));
hold on;plot(freqx,powerf,'r:');
  • K分布(需要非线性处理)
clear all;
close all;
clc
azi_num=2000;
fr=1000;

lamda0=0.05;
sigmav=1.0;
sigmaf=2*sigmav/lamda0;

% rand('state',sum(100*clock));
d1=rand(1,azi_num);
% rand('state',7*sum(100*clock)+3);
d2=rand(1,azi_num);
xi=1*(sqrt(-2*log(d1)).*cos(2*pi*d2));
xq=2*(sqrt(-2*log(d1)).*sin(2*pi*d2));
coe_num=12;
for n=0:coe_num
    coeff(n+1)=2*sigmaf*sqrt(pi)*exp(-4*sigmaf^2*pi^2*n^2/fr^2)/fr;
end
for n=1:2*coe_num+1
    if n<=coe_num+1
        b(n)=1/2*coeff(coe_num+2-n);
    else
        b(n)=1/2*coeff(n-coe_num);
    end
end
xxi=conv(b,xi);
xxi=xxi(coe_num*2+1:azi_num+coe_num*2);
xxq=conv(b,xq);
xxq=xxq(coe_num*2+1:azi_num+coe_num*2);
vmuc=2;
xisigmac=std(xxi);
ximuc=mean(xxi);
xxi=(xxi-ximuc)/xisigmac;
xqsigmac=std(xxq);
xqmuc=mean(xxq);
xxq=(xxq-xqmuc)/xqsigmac;
xdata=xxi+j*xxq;
tmpdat=randn(1,azi_num);
[b,a]=butter(5,0.01);
sk_dat=filter(b,a,tmpdat);
sk_dat=sk_dat/std(sk_dat);
%%%%%%%%%%%%%%下面的程序解非线性方程%%%%%%%%%%%%%%%
max_z=6;
step=0.005;
table_z=0:step:max_z;
table_s=nonline_eq_sirp(table_z,vmuc);
for n=1:azi_num
   index=floor(abs(sk_dat(n))/max_z*length(table_z)+1);%length数组长度
   sk_dat(n)=table_s(index);
end
ydata=xdata.*sk_dat;
figure,subplot(2,1,1),plot(real(ydata)), title('K分布杂波时域波形,实部');
subplot(2,1,2),plot(imag(ydata)),title('K分布杂波时域波形,虚部');
%%%%%%%%求概率密度函数的参数%%%%%%%%%%%%%%%%%%
num=100;
maxdat=max(abs(ydata));
mindat=min(abs(ydata));
NN=hist(abs(ydata),num);
xpdf1=num*NN/((sum(NN))*(maxdat-mindat));
xaxis1=mindat:(maxdat-mindat)/num:maxdat-(maxdat-mindat)/num;
alpha=sqrt(std(xdata).^2./(2*vmuc));%std()算xdata标准差
th_val=lognpdf(xaxis1,xpdf1);

% xpdf1=getnpdf(abs(xdata),num,maxdat,mindat);
xaxis1=mindat:(maxdat-mindat)/num:maxdat-(maxdat-mindat)/num;
th_val=2*((xaxis1/(2*alpha)).^vmuc).*besselk((vmuc-1),xaxis1/alpha)./(alpha*gamma(vmuc));
figure,plot(xaxis1,xpdf1);
hold,plot(xaxis1,th_val,':r'),title('杂波幅度分布'),xlabel('幅度'),
ylabel('概率密度');
signal=ydata;
signal=signal-mean(ydata);
M=256;
psd_dat=pburg(real(signal),16,M,fr);
psd_dat=psd_dat/(max(psd_dat));
freqx=0:0.5*M;
freqx=freqx*fr/M;
figure,plot(freqx,psd_dat);
title('杂波频谱'),xlabel('频率/Hz'),
ylabel('功率谱密度');
%%%%%%%% 理想高斯曲线%%%%%%%%%%%%
powerf=exp(-freqx.^2/(2*sigmaf.^2));
hold;
plot(freqx,powerf,':r');
  • 非线性处理
function s=nonline_eq_sirp(z,nu)
%
for m=1:length(z)
max_s=10;
min_s=0;
isexistmax=0;
F_z=0.5+0.5*erf(z(m)/sqrt(2));
if (F_z>0.9999999)
    s(m)=inf;
else
    for k=1:10000
        if (gammainc(nu*max_s*max_s,nu)<F_z)
            min_s=max_s;
            max_s=max_s*2;
        else
            isexistmax=1;break;
        end
    end
    if (isexistmax==1)
        s(m)=0.5*(max_s-min_s);
        s0=0;
        for k=1:10000
            if (gammainc(nu*s(m)*s(m),nu)>F_z)
                max_s=s(m);
            else
                min_s=s(m);
            end
            s0=s(m);
            s(m)=0.5*(max_s+min_s);
            if (abs(s(m)-s0)<0.0001)
                break;
            end
        end
    end
end
end
  • 对数正态分布
clear all;close all;
azi_num=2000;
fr=1000;

lamda0=0.05;
sigmav=1.0;
sigmaf=2*sigmav/lamda0;

rand('state',sum(100*clock));
d1=rand(1,azi_num);
rand('state',7*sum(100*clock)+3);
d2=rand(1,azi_num);
xi=1*(sqrt(-2*log(d1)).*cos(2*pi*d2));
xq=2*sqrt(-2*log(d1)).*sin(2*pi*d2);

coe_num=12;
for n=0:coe_num
    coeff(n+1)=2*sigmaf*sqrt(pi)*exp(-4*sigmaf^2*pi^2*n^2/fr^2)/fr;
end
for n=1:2*coe_num+1
    if n<=coe_num+1
        b(n)=1/2*coeff(coe_num+2-n);
    else
        b(n)=1/2*coeff(n-coe_num);
    end
end
%Gaussion clutter generation
xxi=conv(b,xi);
xxi=xxi(coe_num*2+1:azi_num+coe_num*2);
xisigmac=std(xxi);
ximuc=mean(xxi);
yyi=(xxi-ximuc)/xisigmac;

muc=1.5;
sigmac=0.6;
yyi=sigmac*yyi+log(muc);
xdata=exp(yyi);
figure,plot(xdata);xlabel('时间');ylabel('幅度');title('对数正态分布杂波时域波形');
num=100;
maxdat=max(abs(xdata));
mindat=min(abs(xdata));
NN=hist(abs(xdata),num);
xpdf1=num*NN/((sum(NN)*(maxdat-mindat)));
xaxis1=mindat:(maxdat-mindat)/num:maxdat-(maxdat-mindat)/num;
th_val=lognpdf(xaxis1,log(muc),sigmac);

figure;plot(xaxis1,xpdf1);
hold,plot(xaxis1,th_val,':r');
title('杂波幅度分布');xlabel('幅度');ylabel('概率密度');
signal=xdata;
signal=signal-mean(signal);

figure,M=128;
psd_dat=pburg(real(signal),16,M,fr);
psd_dat=psd_dat/(max(psd_dat));
freqx=0:0.5*M;
freqx=freqx*fr/M;
plot(freqx,psd_dat);title('杂波频谱');xlabel('频率(Hz)');ylabel('功率谱密度');
powerf=exp(-freqx.^2/(2*sigmaf.^2));
hold;plot(freqx,powerf,':r');
  • 韦布尔分布
clear all;close all;
azi_num=2000;
fr=1000;

lamda0=0.05;
sigmav=0.7;
sigmaf=2*sigmav/lamda0;

rand('state',sum(100*clock));
d1=rand(1,azi_num);
rand('state',7*sum(100*clock)+3);
d2=rand(1,azi_num);
xi=1*(sqrt(-2*log(d1)).*cos(2*pi*d2));
xq=2*sqrt(-2*log(d1)).*sin(2*pi*d2);

coe_num=12;
for n=0:coe_num
    coeff(n+1)=2*sigmaf*sqrt(pi)*exp(-4*sigmaf^2*pi^2*n^2/fr^2)/fr;
end
for n=1:2*coe_num+1
    if n<=coe_num+1
        b(n)=1/2*coeff(coe_num+2-n);
    else
        b(n)=1/2*coeff(n-coe_num);
    end
end
%Gaussion clutter generation
xxi=conv(b,xi);
xxq=conv(b,xq);
xxi=xxi(coe_num*2+1:azi_num+coe_num*2);
xxq=xxq(coe_num*2+1:azi_num+coe_num*2);
xisigmac=std(xxi);
ximuc=mean(xxi);
yyi=(xxi-ximuc)/xisigmac;
xqsigmac=std(xxq);
xqmuc=mean(xxq);
yyq=(xxq-xqmuc)/xqsigmac;
p=1.5;%形状参数
q=2.2;%尺度参数
sigmac=sqrt((q.^p)/2);
yyi=sigmac*yyi;
yyq=sigmac*yyq;
xdata=(yyi.*yyi+yyq.*yyq).^(1/p);
figure,plot(xdata);xlabel('时间');ylabel('幅度');title('韦布尔分布杂波时域波形');

num=100;
maxdat=max(abs(xdata));
mindat=min(abs(xdata));
NN=hist(abs(xdata),num);
xpdf1=num*NN/((sum(NN)*(maxdat-mindat)));
xaxis1=mindat:(maxdat-mindat)/num:maxdat-(maxdat-mindat)/num;
th_val=p*(xaxis1.^(p-1)).*exp(-(xaxis1/q).^p)./(q.^p);

figure;plot(xaxis1,xpdf1);
hold,plot(xaxis1,th_val,':r');
title('杂波幅度分布');xlabel('幅度');ylabel('概率密度');
signal=xdata;
signal=signal-mean(signal);

figure,M=256;
psd_dat=pburg(real(signal),16,M,fr);
psd_dat=psd_dat/(max(psd_dat));
freqx=0:0.5*M;
freqx=freqx*fr/M;
plot(freqx,psd_dat);title('杂波频谱');xlabel('频率(Hz)');ylabel('功率谱密度');
powerf=exp(-freqx.^2/(2*sigmaf.^2));
hold;plot(freqx,powerf,':r');

上面是各个杂波统计模型的MATLAB程序,对于完整杂波模拟器的下载链接为:

https://pan.baidu.com/share/init?surl=igBqdiO-f5x-xYWrLEWvUg
提取码:qhp1

操作方法:
把所有代码打开,运行主界面代码(Radarclutter.m)即可出现选择界面。

  • 88
    点赞
  • 289
    收藏
    觉得还不错? 一键收藏
  • 46
    评论
MATLAB中的雷达杂波生成主要使用信号处理和模拟信号生成工具箱来完成。以下是一个简单的300字的解释。 雷达杂波雷达系统中是指由于多种原因引起的非期望的同相干信号,将其从接收信号中去除是雷达信号处理中的关键任务之一。 MATLAB提供了一些用于生成雷达杂波模型的工具函数和函数,以帮助研究人员和工程师进行雷达系统的分析和设计。这些函数和工具包含了一些常用的雷达杂波模型,如白噪声、高斯白噪声、脉冲干扰等。 要生成雷达杂波,首先需要定义杂波的统计特性,如功率谱密度和自相关函数。通过设置合适的参数值,可以控制杂波的强度和频率特性。然后可以使用MATLAB提供的函数来生成这些杂波模型。 例如,要生成高斯白噪声杂波,可以使用“wgn”函数。该函数需要指定生成杂波的样本数和功率谱密度。生成的杂波信号将具有与高斯分布相近的统计特性。 另一个常用的雷达杂波模型是脉冲干扰杂波。可以使用MATLAB中的函数“chirp”来生成一个宽带脉冲信号,然后使用“awgn”函数给脉冲信号添加高斯白噪声,以模拟脉冲干扰杂波。 生成的雷达杂波可以用于评估雷达系统的性能,例如对抗环境下的雷达探测能力进行评估,或者用于算的开发和测试。MATLAB提供了丰富的功能和工具箱,可以帮助研究人员和工程师完成这些任务。 总之,MATLAB提供了一系列用于生成雷达杂波模型的工具函数和函数,通过设置合适的参数值,可以生成不同类型的雷达杂波信号。这些功能有助于研究人员和工程师进行雷达系统的分析、设计和性能评估。
评论 46
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值