pd = 0.9; % Probability of detection
pfa = 1e-6; % Probability of false alarm
max_range = 20000; % Maximum unambiguous range
tgt_rcs = 1.5; % Required target radar cross section
int_pulsenum = 10; % Number of pulses to integrate
fs = 22.5e6;
waveform = phased.LinearFMWaveform(...
'SampleRate',fs,... % 采样率
'PRF',prf,... % 脉冲重复频率
'PulseWidth',10e-6,... % 脉冲宽度
'SweepBandwidth',7.5e6,... % 扫频带宽 (新增参数)
'SweepDirection','Up',... % 扫频方向 (向上/向下)
'SweepInterval','Positive'); % 扫频区间
fc = radiator.OperatingFrequency; % Operating frequency (Hz)
v = radiator.PropagationSpeed; % Wave propagation speed (m/s)
lambda = v/fc; % Wavelength (m)
% waveform.SampleRate = 20e6; % Sampling frequency (Hz)
% waveform.PulseWidth = 10e-6; %脉宽10us
% 发射机参数配置
transmitter = phased.Transmitter(...
'PeakPower', peak_power, ...
'Gain', 30, ... % 发射增益 30 dB
'LossFactor', 0, ... % 损耗因子 0 dB
'InUseOutputPort', true, ... % 输出发射状态
'CoherentOnTransmit', true); % 相干发射模式
% 接收机参数配置
receiver = phased.ReceiverPreamp(...
'SampleRate', fs, ... % 采样率
'Gain', 30, ... % 接收增益 25 dB
'NoiseFigure', 3, ... % 噪声系数 3 dB
'ReferenceTemperature', 290, ... % 参考温度 290 K
'SampleRate', fs, ... % 采样率
'EnableInputPort', true, ... % 启用使能输入端口
'SeedSource', 'Property', ... % 固定随机种子
'Seed', 2023); % 随机种子值
waveform.PRF = 7500; % Pulse repetition frequency (Hz)waveform.PRF
radiator = phased.Radiator(...
'Sensor', ura, ... % 天线阵列对象
'OperatingFrequency', fc, ... % 工作频率 (Hz)
'PropagationSpeed', 3e8, ... % 传播速度 (m/s)
'CombineRadiatedSignals', true); % 是否合并输出信号
collector = phased.Collector(...
'Sensor', ura, ... % 天线阵列对象
'OperatingFrequency', fc, ... % 工作频率 (Hz)
'PropagationSpeed', 3e8, ... % 传播速度 (m/s)
'Wavefront', 'Plane'); % 波前类型
ura = phased.URA('Element',antenna,...
'Size',[25 25],'ElementSpacing',[lambda/2, lambda/2]);
% Configure the antenna elements such that they only transmit forward
ura.Element.BackBaffled = true;
% Visualize the response pattern.
pattern(ura,fc,'PropagationSpeed',physconst('LightSpeed'),...
'Type','powerdb');
radiator.Sensor = ura;
collector.Sensor = ura;
% We need to set the WeightsInputPort property to true to enable it to
% accept transmit beamforming weights
radiator.WeightsInputPort = true;
% Calculate the array gain
arraygain = phased.ArrayGain('SensorArray',ura,'PropagationSpeed',v);
ag1 = arraygain(fc,[0;0]);
ag=10*log10(25*25);
% Calculate the peak power
snr_min = albersheim(pd, pfa, int_pulsenum);
peak_power = ((4*pi)^3*noisepow(1/waveform.PulseWidth)*max_range^4*...
db2pow(snr_min))/(db2pow(2*(transmitter.Gain+ag))*tgt_rcs*lambda^2)%transmitter.Gain+ag
% Set the peak power of the transmitter
transmitter.PeakPower = peak_power/625;
initialAz = 60; endAz = -60;
volumnAz = initialAz - endAz;
% Calculate 3-dB beamwidth
theta = 0.886*lambda/(406*lambda/2)
scanstep = -4;
scangrid = initialAz+scanstep/2:scanstep:endAz;
numscans = length(scangrid);
pulsenum = int_pulsenum*numscans;
% Calculate revisit time
revisitTime = pulsenum/prf
tgtpos = [[13532.63*cosd(2);13532.63*sind(2); 30],[18020.66*cosd(2); 18020.66*sind(2); 30]];
tgtvel = [[-100; 50; 0],[60; 80; 0]];
tgtmotion = phased.Platform('InitialPosition',tgtpos,'Velocity',tgtvel);
tgtrcs = [1.6 2.2];
target = phased.RadarTarget('MeanRCS',tgtrcs,'OperatingFrequency',fc);
% Calculate the range, angle, and speed of the targets
[tgtrng,tgtang] = rangeangle(tgtmotion.InitialPosition,...
sensormotion.InitialPosition);
numtargets = length(target.MeanRCS);
% Calculate the range, angle, and speed of the targets
[tgtrng,tgtang] = rangeangle(tgtmotion.InitialPosition,...
sensormotion.InitialPosition);
numtargets = length(target.MeanRCS);
% 创建导向矢量和波束形成器
steeringvec = phased.SteeringVector('SensorArray',ura,...
'PropagationSpeed',v);%计算不同方向上的相位偏移权重
%创建接收端的波束形成器
beamformer = phased.PhaseShiftBeamformer('SensorArray',ura,...
'OperatingFrequency',fc,'PropagationSpeed',v,...
'DirectionSource','Input port');%
% 定义传播信道
channel = phased.FreeSpace(...
'SampleRate',fs,...
'TwoWayPropagation',true,...
'OperatingFrequency',fc);
fast_time_grid = unigrid(0, 1/fs, 1/prf, '[)');
% 预分配接收信号矩阵
rxpulses = zeros(numel(fast_time_grid),pulsenum);%作用:预分配内存存储接收到的脉冲信号
for m = 1:pulsenum
% 更新平台和目标位置
[sensorpos,sensorvel] = sensormotion(1/prf); %调用运动模型函数更新雷达平台和目标位置/速度
[tgtpos,tgtvel] = tgtmotion(1/prf); %时间步长 = 1/PRF(脉冲重复间隔)
% 计算目标相对参数
[tgtrng,tgtang] = rangeangle(tgtpos,sensorpos); %计算目标相对雷达的距离角度[方位角; 俯仰角]
% 计算当前扫描角度和波束权重
scanid = floor((m-1)/int_pulsenum) + 1;
sv = steeringvec(fc,scangrid(scanid));
w = conj(sv);
% 生成和发射脉冲
pulse = waveform();
[txsig,txstatus] = transmitter(pulse);
txsig = radiator(txsig,tgtang,w);
txsig = channel(txsig,sensorpos,tgtpos,sensorvel,tgtvel);
% 信号传播和目标反射
tgtsig = target(txsig);
% 接收和处理回波信号
rxsig = collector(tgtsig,tgtang);
rxsig = receiver(rxsig,~(txstatus>0));
rxpulses(:,m) = 625*beamformer(rxsig,[scangrid(scanid);0]);
end
报错:无法执行赋值,因为左侧的大小为 751×1,右侧的大小为 3000×1。
出错 untitled2 (第 145 行)
rxpulses(:,m) = 625*beamformer(rxsig,[scangrid(scanid);0]);