📄 radar.m
字号:
% radar.m
% Range Calculations in a Jamming Environment
%
% This program calculates radar ranges in a jamming environment. It works
% with both Stand-off jamming and self-screening jamming for steady and Swerling type
% targets with frequency agility, coherent integration and standard atmosphere/rain
% attenuation
%
% Code translated from "Electronic warfare in the information age"
%
% Author: Yao jingshun,
% Tel: (0411)5856362 or (0331)56362
% Last edited: 10 July 2002.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear
clc
echo off
%
% Set user variables. The user should change the following variables as needed for the
% simulation they are running. Descriptions of the variables follow.
%
% Radar related:
%
trans_pwr_radar = '4000'; % Transmitter power of radar - kW
freq_radar = '3000'; % Radar's frequency - MHz
pulse_width = '6.5'; % Radar's pulse width - microsecs
GTDB_radar = '36'; % Transmitter gain of radar - dB
GRDB_radar = '40'; % Receiving gain for radar - dB
GRDB_sl_radar = '10'; % Side-lobe of radar - dBi
noise_fig_radar = '4.5'; % Noise figure of receiver - dB
loss_radar_dB = '12'; % Radar losses - dB
PRF = '250'; % Pulse repetition freq - pps
prob_det = '0.90'; % Probability of detection < 1
prob_false_alarm = '1e-6'; % Probability of false alarm < 1
BW_dop = '250'; % Doppler filter BW - Hz
BW_fa ='200'; % Frequency agility BW - MHz
Azimuth_bw = '1.1'; % Azimuth beamwidth - degrees
az_rate = '36'; % Azimuth scan rate - degrees/sec
% MENU Driven Radar Parameters
% Use a dialog box to get input
title = '输入雷达参数 1';
prompt = {'发射功率 Transmitter power (kW)', '工作频率 frequency (MHz)',...
'脉冲宽度 pulse width (microsecs)', ...
'发射天线增益 Transmit antenna gain (dB)', '接收天线增益 Receive antenna gain (dB)'...
'接收天线副瓣 Receive antenna sidelobe (dBi)', '噪声系数 Noise Figure (dB)', ...
'系统损耗 Losses (dB)', '脉冲重复频率 PRF (Hz)'};
default = {trans_pwr_radar, freq_radar, pulse_width, GTDB_radar,...
GRDB_radar, GRDB_sl_radar, noise_fig_radar, loss_radar_dB, PRF,};
response = inputdlg(prompt, title, 1,default);
fields = {'trans_pwr_radar','freq_radar','pulse_width','GTDB_radar',...
'GRDB_radar','GRDB_sl_radar','noise_fig_radar','loss_radar_dB','PRF'};
input = cell2struct(response,fields,1);
% Convert cell structure created by dialog box back to numbers
trans_pwr_radar = str2num(input.trans_pwr_radar);
freq_radar = str2num(input.freq_radar);
pulse_width = str2num(input.pulse_width);
GTDB_radar = str2num(input.GTDB_radar);
GRDB_radar = str2num(input.GRDB_radar);
GRDB_sl_radar = str2num(input.GRDB_sl_radar);
noise_fig_radar = str2num(input.noise_fig_radar);
loss_radar_dB = str2num(input.loss_radar_dB);
PRF = str2num(input.PRF);
clear input response fields default prompt title;
title = '输入雷达参数 2';
prompt = {'检测概率 Probability of detection (<1)', ...
'虚警概率 Probability of false alarm (<1)', '多普勒滤波器带宽 Doppler filter bandwidth (Hz)',...
'频率捷变带宽 Frequency agility bandwidth (MHz)', '水平波束宽度 Azimuth beamwidth (degrees)',...
'天线转速 Azimuth Scan rate (degrees/sec)'};
default = {prob_det, prob_false_alarm, BW_dop, BW_fa, Azimuth_bw, az_rate};
response = inputdlg(prompt, title, 1, default);
fields = {'prob_det','prob_false_alarm','BW_dop','BW_fa','Azimuth_bw','az_rate'};
input = cell2struct(response,fields,1);
% Convert cell structure created by dialog box back to numbers
prob_det = str2num(input.prob_det);
prob_false_alarm = str2num(input.prob_false_alarm);
BW_dop = str2num(input.BW_dop);
BW_fa = str2num(input.BW_fa);
Azimuth_bw = str2num(input.Azimuth_bw);
az_rate = str2num(input.az_rate);
clear input response fields default prompt title;
% End Menu for Radar Parameters
% Target related:
%
RCS = '1.0'; % Radar cross section m^2
el_tgt_deg = '0.4'; % Elevation of target degrees
target_length = '10'; % Length of target m
% Other
%
rain_fall =' 0.0'; % Rain fall rate mm/hr
% MENU for Target and Atmosphere information
title = '输入目标和大气参数';
prompt = {'目标截面积 RCS (m^2)', '目标高度 Elevation of target (degrees)',...
'目标长度 Length of target (m)', '降雨率 Rain fall rate (mm/hr)'};
default = {RCS, el_tgt_deg, target_length, rain_fall};
response = inputdlg(prompt, title, 1, default);
fields = {'RCS', 'el_tgt_deg', 'target_length', 'rain_fall'};
input = cell2struct(response,fields,1);
% Convert cell structure created by dialog box back to numbers
RCS = str2num(input.RCS);
el_tgt_deg = str2num(input.el_tgt_deg);
target_length = str2num(input.target_length);
rain_fall = str2num(input.rain_fall);
clear input response fields default prompt title;
% End menu for Target and Atmosphere Information
% Select jamming type (enter 1 for yes, 0 for no; can select none, one, or both):
%
jamming_type = menu('选择干扰类型', '远离干扰 Stand off',...
'自卫干扰 Selfscreening', '无干扰 None', '远离和自卫干扰 Both');
switch jamming_type
case 1
% Stand off
SOJ = 1; % Stand-off boolean
SSJ = 0; % Selfscreening boolean
case 2
% Selfscreening
SSJ = 1; % Selfscreening boolean
SOJ = 0; % Stand-off boolean
case 3
% No Jamming
SSJ = 0; % Selfscreening boolean
SOJ = 0; % Stand-off boolean
case 4
% Both
SOJ = 1;
SSJ = 1;
end
% Enter characteristics for selfscreening Jamming. If not, selected, values won't be used.
%
SSJ_pwr_jam =' 10'; % SSJ power of jammer W
SSJ_gain_dB =' 0'; % Gain of SS jammer in dB dB
SSJ_bw = '20'; % Bandwidth of SSJ MHz
SSJ_loss_dB = '7'; % Losses with SSJ dB
if SSJ == 1
% MENU for selfscreening Jamming chars
title = '输入自卫干扰参数';
prompt = {'干扰机功率 Power (W)', '干扰机天线增益 Antenna Gain (dB)',...
'干扰机带宽 Bandwidth (MHz)', '干扰机系统损耗 Losses (dB)'};
default = {SSJ_pwr_jam,SSJ_gain_dB,SSJ_bw,SSJ_loss_dB};
response = inputdlg(prompt, title, 1, default);
fields = {'SSJ_pwr_jam', 'SSJ_gain_dB', 'SSJ_bw', 'SSJ_loss_dB'};
input = cell2struct(response,fields,1);
% Convert cell structure created by dialog box back to numbers
SSJ_pwr_jam = str2num(input.SSJ_pwr_jam);
SSJ_gain_dB = str2num(input.SSJ_gain_dB);
SSJ_bw = str2num(input.SSJ_bw);
SSJ_loss_dB = str2num(input.SSJ_loss_dB);
clear input response fields default prompt title;
% End MENU for selfscreening Jamming chars
end
% Enter characteristics for stand-off Jamming. If not, selected, values won't be used.
%
% Each array must be equal and there must
% be a value for each stand-off jammer you
% wish to simulate
%
SOJ_pwr_jam = [2000 2000 2000 2000 2000];
% SOJ power of jammers W
SOJ_gain_dB = [5 5 5 5 5];
% Gain of SO jammer in dB dB
SOJ_bw = [200 200 200 200 200];
% Bandwidth of SOJ's Mhz
jam_range = [50 50 50 50 50];
% Range of jammer NMI
jam_height = [20000 20000 20000 20000 20000];
% Height of jammer ft
SOJ_loss_dB = [7 7 7 7 7];
% Losses with SOJ's dB
% MENU for Stand off jamming input
if SOJ==1
num_jams = '1';
title = '输入远离干扰参数';
prompt = {'干扰源数量'};
default = {num_jams};
response = inputdlg(prompt, title, 1, default);
fields = {'num_jams'};
input = cell2struct(response,fields,1);
num_jams = str2num(input.num_jams);
clear input response fields default prompt title;
if num_jams ~= length(SOJ_pwr_jam)
SOJ_pwr_jam = ones(1,num_jams).*SOJ_pwr_jam(1);
SOJ_gain_dB = ones(1,num_jams).*SOJ_gain_dB(1);
SOJ_bw = ones(1,num_jams).*SOJ_bw(1);
jam_range = ones(1,num_jams).*jam_range(1);
jam_height = ones(1,num_jams).*jam_height(1);
SOJ_loss_dB = ones(1,num_jams).*SOJ_loss_dB(1);
end % if num_jams
for loop = 1:num_jams
title = ['Standoff Jammer #' num2str(loop)];
prompt = {'干扰机功率 Power (W)', '干扰机天线增益 Gain (dB)', '干扰机带宽 Bandwidth (MHz)',...
'干扰机距离 Range (nm)', '干扰机高度 Height (ft)', '干扰机系统损耗 Loss (dB)'};
default = {'2000','5','200','50','20000','7'};
response = inputdlg(prompt, title, 1, default);
fields = {'SOJ_pwr_jam','SOJ_gain_dB','SOJ_bw','jam_range',...
'jam_height','SOJ_loss_dB'};
input = cell2struct(response,fields,1);
% Convert cell structure created by dialog box back to numbers
SOJ_pwr_jam(loop) = str2num(input.SOJ_pwr_jam);
SOJ_gain_dB(loop) = str2num(input.SOJ_gain_dB);
SOJ_bw(loop) = str2num(input.SOJ_bw);
jam_range(loop) = str2num(input.jam_range);
jam_height(loop) = str2num(input.jam_height);
SOJ_loss_dB(loop) = str2num(input.SOJ_loss_dB);
clear input response fields default prompt title;
end % for loop
end % if SOJ
% End MENU for Stand off Jamming chars
% Print radar, target , jamming and Weather Parameters
fprintf('一、雷达参数 \n');
par1=[trans_pwr_radar;freq_radar;pulse_width;PRF;GTDB_radar;GRDB_radar;noise_fig_radar;GRDB_sl_radar];
fprintf('Pt(kw) f(Mhz) PW(1e-6*s) PRF(pps) Gt(dB) Gr(dB) NF(dB) TLL(dB)\n');
fprintf('%-14.1f',par1);fprintf('\n\n');
par2=[loss_radar_dB;BW_dop;BW_fa;Azimuth_bw;az_rate];
par3=[prob_det;prob_false_alarm];
fprintf('Lr(dB) Dop Bw(Hz) FA Bw(MHz) Az Bw(deg) Az Rate(deg/s) Pd Pfa\n');
fprintf('%-15.2f',par2);fprintf('%-14.1g',par3);fprintf('\n\n');
fprintf('二、目标和环境参数 \n');
fprintf('目标截面积 = %5.1f(平方米); 目标高度 = %4.1f(度); ',RCS,el_tgt_deg);
fprintf(' 目标长度 = %5.1f(米); 降雨率 = %4.1f(mm/h).\n\n',target_length,rain_fall);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% STOP EDITING. ONLY PROGRAM FOLLOWS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Begin Main
%
% Convert radar gain, loss, noise to ratios
%
loss_radar = db_ratio(loss_radar_dB);
GT_radar = db_ratio(GTDB_radar);
GR_radar = db_ratio(GRDB_radar);
noise_factor_radar = db_ratio(noise_fig_radar);
% Calculate system input noise temp
%
sys_noise_temp = 290 * (noise_factor_radar - 1) + 150; % Ts in K
% Calculate range without jamming, FA, etc (S/N = 1)
%
range_index = 129.2 * ((trans_pwr_radar * pulse_width * GT_radar * GR_radar * RCS) / ...
(freq_radar^2 * sys_noise_temp * loss_radar))^.25;
% Calculate number of pulses
%
non_coh_pulses = (Azimuth_bw/az_rate) * BW_dop;
coh_pulses = PRF/BW_dop;
% If target length is greater than zero,computes number of independent
% pulses for FA radars
%
if target_length > 0
N_exp = 1 + (BW_fa/(150 / target_length));
else N_exp = non_coh_pulses;
end
% Determine detectability factors
%
det_fact;
% Calculate ranges for the different target types, clear, no
% atmospheric or weather attenuation accounted for here.
%
swrlg_case= [' 0 1 2 3 4 1fa 3fa'];
ranges_clear = range_index * 10.^((-det_facts)/40);
% echo on
% Now, the atmospheric attenuation and rain attenuation is
% calcuated. First, the Swerling cases being calculated are listed.
% Then under ar_atten_ans, row 1 is the atmospheric attenuation (dB)
% and row 2 is the rain attenuation (dB). The 3rd row contains the
% affected ranges (NMI). Under after_jam_ans, the meaning of the rows
% are the same as for the attenuation matrix.
% echo off
ar_atten;
% Effects of Jamming...
%
if SOJ==1
fprintf('远离干扰参数 ( 干扰机数量 = %-2.0f )',num_jams );
fprintf('\n干扰功率(W): [ '); fprintf('%-8.0f',SOJ_pwr_jam);
fprintf(']\n干扰天线增益(dB):[ '); fprintf('%-8.0f',SOJ_gain_dB);
fprintf(']\n干扰带宽(MHz): [ '); fprintf('%-8.0f',SOJ_bw);
fprintf(']\n干扰距离(n.m): [ '); fprintf('%-8.0f',jam_range);
fprintf(']\n干扰高度(英尺): [ '); fprintf('%-8.0f',jam_height);
fprintf(']\n干扰损耗(dB): [ '); fprintf('%-8.0f',SOJ_loss_dB);
fprintf(']\n\n');
end
if SSJ==1
fprintf('自卫干扰参数:[ ');
fprintf('干扰功率 = %5.0f(W); 干扰天线增益 = %4.0f(dB);',SSJ_pwr_jam,SSJ_gain_dB);
fprintf('干扰带宽 = %4.0f(MHz); 干扰损耗 = %2.0f(dB) ]\n\n',SSJ_bw,SSJ_loss_dB);
pwrj_density = SSJ_pwr_jam/SSJ_bw;
SSJ_gain = db_ratio(SSJ_gain_dB);
SSJ_loss = db_ratio(SSJ_loss_dB);
% Range with just self-screening jamming
%
rng_ssj_only = 0.0048116 * sqrt(trans_pwr_radar * GT_radar * RCS * pulse_width ./ ...
(pwrj_density .* SSJ_gain .* (loss_radar/SSJ_loss)));
if SOJ==1
soj_eff;
end
jam_eff;
end
if (SOJ==1)&(SSJ==0)
soj_eff;
rng_ssj_only = rs00;
jam_eff;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -