1.算法描述
发射信号为13位巴克码和线性调频混合调制的信号,线性调频的中心频率为30MHz,调频带宽为4MHz,每一位码宽为10微秒,发射信号的帧周期为1毫秒.该雷达具有数字化正交解调、数字脉冲处理、固定目标对消、动目标检测(MTD)、和恒虚警(CFAR)处理等功能.
CFAR,全称是Constant False Alarm Rate Detector,恒定虚警概率下的检测器,是雷达目标检测的一种常见的手段.但是不论名字怎么起,检测器功能都在于判断目标存在的有和无。因此检测器的作用就变成了在含有噪声的情况下确定信号存在还是不存在。在我们不知道目标是否存在的情况下,目标检测就变成了根据两种可能的假设来做出判决,此时这个问题我们称为二元假设检验问题。来复习一下学过的课程,二元假设检验问题。
动目标检测(MTD)
MTD (moving targets detection)是带通滤波器组,也就是多个输入多个输出,可以用FIR 组实现,但是一般用FFT 实现,即对不同脉冲组回波信号的相同距离单元做FFT 处理,N 个输入得到N 个输出,CACFAR 既是对这N 个输出进行检测和判断目标!若存在目标,这N 个输出中比出现一个峰值最大的数,则这个可能就是目标的位置信息,根据位置信息,即可以得到运动目标的多普勒值。MTD雷达系统中区分运动目标和杂波在于它们速度上的差别。由于速度不同而引起回波信号的多普勒频率不相等,所以可以通过多普勒频率的不同将杂波和运动目标区分开来。动目标检测(MTD)不仅能滤除杂波,而且还可以将不同运动速度的目标区分开来,从而大大改善了在杂波背景下检测运动目标的能力。
相位检波器混频:将上述混频得到的中频信号再混频得到。
恒虚警(CFAR)
恒虚警率CFAR是Constant False-Alarm Rate的缩写。在雷达信号检测中,当外界干扰强度变化时,雷达能自动调整其灵敏度,使雷达的虚警概率保持不变,这种特性称为恒虚警率特性。恒虚警率的获得方法有两种:参量法和非参量法。
恒虚警率检测是雷达目标自动检测的一个重要组成部分,可以作为从SAR图像中提取目标的第一步,是进一步识别目标的基础。虚警率是指侦察设备在单位时间内将噪声或其他干扰信号误判为威胁辐射源信号的概率。而恒虚警率检测则证明了检测算法的稳定性和可靠性。
雷达信号恒虚警率检测就是要求虚警概率保持恒定,这主要是因为在雷达信号检测中,信号的最佳检测通常采用奈曼-皮尔逊准则,即在保持恒定的虚警概率的条件下,使正确检测的概率达到最大值。在雷达信号的检测过程中,如果虚警目标太多。使计算机的处理能力达到饱和,势必影响正常目标的检测,保持雷达信号的恒虚警率检测可以有效地解决这个问题,所以恒虚警率检测具有很大的实际意义。但遗憾的是:在雷达信号检测中,由于各种干扰强度是随机的,如果采用固定门限,将难以保证信号的恒虚警概率检测。
2.matlab算法仿真效果
matlab2022a仿真结果如下:
3.MATLAB核心程序
n=0:N-1;
s1=s(1:N);
local_oscillator_i=cos(2*pi*f0/fs*n); % I路本振信号
local_oscillator_q=sin(2*pi*f0/fs*n); % Q路本振信号
fbb_i = local_oscillator_i.*s1; % I路解调
fbb_q = local_oscillator_q.*s1; % Q路解调
window=chebwin(51,40); % 50阶cheby窗的FIR低通滤波器
[b,a]=fir1(50,2*B/fs,window);
fbb_i=[fbb_i,zeros(1,25)]; % 因为该FIR滤波器有25个采样周期的延迟,为了保证
% 所有有效信息全部通过滤波器,故在信号后补25个0
fbb_q=[fbb_q,zeros(1,25)];
fbb_i=filter(b,a,fbb_i);
fbb_q=filter(b,a,fbb_q);
fbb_i=fbb_i(26:end); % 截取有效信息
fbb_q=fbb_q(26:end); % 截取有效信息
fbb=fbb_i+j*fbb_q;
%-------- 产生理想线性调频脉冲压缩匹配系数 ---------%
D = B*tao;
match_filter_1=ts*fliplr(conj(fbb))*sqrt(D)*2/tao;
NFFT = 131126;%2^nextpow2(length(s));
match_filter_1_fft=fft(match_filter_1,NFFT); % 第一次脉冲压缩处理匹配系数
figure;
subplot(2,1,1),plot(real(match_filter_1_fft)),title('脉冲压缩系数(实部)');
subplot(2,1,2),plot(imag(match_filter_1_fft)),title('脉冲压缩系数(虚部)');
N=length(s);
n=0:N-1;
local_oscillator_i=cos(2*pi*f0/fs*n); % I路本振信号
local_oscillator_q=sin(2*pi*f0/fs*n); % Q路本振信号
fbb_i = local_oscillator_i.*s; % I路解调
fbb_q = local_oscillator_q.*s; % Q路解调
window=chebwin(51,40); % 50阶cheby窗的FIR低通滤波器
[b,a]=fir1(50,0.5,window);
fbb_i=[fbb_i,zeros(1,25)]; % 因为该FIR滤波器有25个采样周期的延迟,为了保证
% 所有有效信息全部通过滤波器,故在信号后补25个0
fbb_q=[fbb_q,zeros(1,25)];
fbb_i=filter(b,a,fbb_i);
fbb_q=filter(b,a,fbb_q);
fbb_i=fbb_i(26:end); % 截取有效信息
fbb_q=fbb_q(26:end); % 截取有效信息
signal=fbb_i+j*fbb_q;
clear fbb_i;clear fbb_q;clear local_oscillator_i;clear local_oscillator_q;
signal_fft=fft(signal,NFFT);
pc_result_fft=signal_fft.*match_filter_1_fft;
pc_result=ifft(pc_result_fft,NFFT);
figure,plot((0:ts:length(signal)*ts-ts),pc_result(1:length(signal)));
xlabel('t(单位:S)'),title('回波脉冲压缩处理结果');
t=tao*length(code);
match_filter_2=2*ts*fliplr(conj(pc_result))*2/t;
match_filter_2_fft=fft(match_filter_2,NFFT); % 第二次脉冲压缩处理匹配系数
figure;
subplot(2,1,1),plot(real(match_filter_2_fft)),title('脉冲压缩系数(实部)');
subplot(2,1,2),plot(imag(match_filter_2_fft)),title('脉冲压缩系数(虚部)');
%%%%%%%%%%%%%%%%%%% 产生雷达回波 %%%%%%%%%%%%%%%%
f_frame=1e3; % 雷达发射信号重复频率
T_frame=1/f_frame;
N_echo_frame=18;
f_doppler=3.5e3; % 动目标的多普勒频率
t_frame=0:ts:T_frame-ts;
t_mobj=200e-6; % 动目标位置
echo_mobj_pulse=[zeros(1,t_mobj/ts),s,zeros(1,(T_frame-t_mobj)/ts-length(s))];
echo_mobj=repmat(echo_mobj_pulse,1,N_echo_frame);
t_doppler=0:ts:N_echo_frame*T_frame-ts;
s_doppler=cos(2*pi*f_doppler*t_doppler);
s_echo_mobj=echo_mobj.*s_doppler;
t_fobj=450e-6; % 固定目标位置
echo_fobj_pulse=[zeros(1,t_fobj/ts),s,zeros(1,(T_frame-t_fobj)/ts-length(s))];
echo_fobj=repmat(echo_fobj_pulse,1,N_echo_frame);
t_clutter=700e-6; % 杂波位置
t_clutter_pulse=39e-6;
sigma=2; % 杂波瑞利分布参数sigma
t1=0:ts:t_clutter_pulse-ts;
u=rand(1,length(t1));
echo_clutter=0.08*sqrt(2*log(1./u))*sigma; % 产生瑞利分布信号
s_echo_clutter_pulse=[zeros(1,t_clutter/ts),echo_clutter,...
zeros(1,round((T_frame-t_clutter)/ts-length(echo_clutter)))];
s_echo_clutter=repmat(s_echo_clutter_pulse,1,N_echo_frame);
s_noise=0.1*rand(1,round(N_echo_frame*T_frame/ts));
s_echo=s_echo_mobj+echo_fobj+s_echo_clutter+s_noise;
A82