⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 radar.m

📁 此程序给出了不同情况的雷达距离测量仿真平台
💻 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 + -