📄 rjv2.m
字号:
% rjv2.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 BASIC "RGJMAT.BAS"
%
% Last edited: 28 August 1997.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
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 = 8; % Transmitter power of radar - kW
freq_radar = 10000; % Radar's frequency - MHz
pulse_width = 6.67; % Radar's pulse width - microsecs
GTDB_radar = 29; % Transmitter gain of radar - dB
GRDB_radar = 29; % Receiving gain for radar - dB
GRDB_sl_radar = 3; % Side-lobe of radar - dBi
noise_fig_radar = 6; % Noise figure of receiver - dB
loss_radar_dB = 15; % Radar losses - dB
PRF = 7950; % Pulse repetition freq - pps
prob_det = 0.90; % Probability of detection < 1
prob_false_alarm = 1e-6; % Probability of false alarm < 1
BW_dop = 1000; % Doppler filter BW - Hz
BW_fa = 0; % Frequency agility BW - MHz
Azimuth_bw = 1.4; % Azimuth beamwidth - degrees
az_rate = 360; % Azimuth scan rate - degrees/sec
% MENU Driven Radar Parameters
% Use a dialog box to get input
title = 'Radar Parameters Page 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 = 'Radar Parameters Page 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; % Radar cross section m^2
el_tgt_deg = 0.0; % Elevation of target degrees
target_length = 15; % Length of target m
% Other
%
rain_fall = 0; % Rain fall rate mm/hr
% MENU for Target and Atmosphere information
title = 'Target and Atmosphere information';
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('Select jamming type', '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 = 'Selfscreening Jamming information';
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 = [1000 1000 1000 1000 1000];
% SOJ power of jammers W
SOJ_gain_dB = [13 13 13 13 13];
% Gain of SO jammer in dB dB
SOJ_bw = [100 100 100 100 100];
% Bandwidth of SOJ's Mhz
jam_range = [20 20 20 20 20];
% 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 = length(SOJ_pwr_jam);
title = 'Stand off Jamming information';
prompt = {'Number of Jammers'};
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 = {SOJ_pwr_jam(loop), SOJ_gain_dB(loop),...
SOJ_bw(loop), jam_range(loop), jam_height(loop),...
SOJ_loss_dB(loop)};
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
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 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; % 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 SSJ==1
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 + -