www.gusucode.com > phased 案例源码 matlab代码程序 > phased/RangeSpeedResponsePatternOfTargetExample.m

    %% Range-Speed Response Pattern of Target
% This example shows how to visualize the speed and range of a target in a
% pulsed radar system that uses a rectangular waveform.
%%
% *Note:* This example runs only in R2016b or later. If you are using an earlier
% release, replace each call to the function with the equivalent |step|
% syntax. For example, replace |myObject(x)| with |step(myObject,x)|.
%%
% Place an isotropic antenna element at the global origin
% _(0,0,0)_. Then, place a target with a nonfluctuating
% RCS of 1 square meter at _(5000,5000,10)_, which is
% approximately 7 km from the transmitter. Set the operating (carrier)
% frequency to 10 GHz. To simulate a monostatic radar, set the
% |InUseOutputPort| property on the transmitter to
% |true|. Calculate the range and angle from the
% transmitter to the target.

%%
%
antenna = phased.IsotropicAntennaElement(...
    'FrequencyRange',[5e9 15e9]);
transmitter = phased.Transmitter('Gain',20,'InUseOutputPort',true);
fc = 10e9;
target = phased.RadarTarget('Model','Nonfluctuating',...
    'MeanRCS',1,'OperatingFrequency',fc);
txloc = [0;0;0];
tgtloc = [5000;5000;10];
antennaplatform = phased.Platform('InitialPosition',txloc);
targetplatform = phased.Platform('InitialPosition',tgtloc);
[tgtrng,tgtang] = rangeangle(targetplatform.InitialPosition,...
    antennaplatform.InitialPosition);
%%
% Create a rectangular pulse waveform 2μs in duration with a PRF of
% 10 kHz. Determine the maximum unambiguous range for the given PRF. Use
% the |radareqpow| function to determine the peak power
% required to detect a target. This target has an RCS of 1 square meter at
% the maximum unambiguous range for the transmitter operating frequency and
% gain. The SNR is based on a desired false-alarm rate of
% $1e^{-6}$ for a noncoherent detector.

waveform = phased.RectangularWaveform('PulseWidth',2e-6,...
    'OutputFormat','Pulses','PRF',1e4,'NumPulses',1);
c = physconst('LightSpeed');
maxrange = c/(2*waveform.PRF);
SNR = npwgnthresh(1e-6,1,'noncoherent');
Pt = radareqpow(c/fc,maxrange,SNR,...
    waveform.PulseWidth,'RCS',target.MeanRCS,'Gain',transmitter.Gain);
%%
% Set the peak transmit power to the output value from |radareqpow|.
transmitter.PeakPower = Pt;
%%
% Create radiator and collector objects that operate at 10 GHz. Create a
% free space path for the propagation of the pulse to and from the target.
% Then, create a receiver.
radiator = phased.Radiator(...
    'PropagationSpeed',c,...
    'OperatingFrequency',fc,'Sensor',antenna);
channel = phased.FreeSpace(...
    'PropagationSpeed',c,...
    'OperatingFrequency',fc,'TwoWayPropagation',false);
collector = phased.Collector(...
    'PropagationSpeed',c,...
    'OperatingFrequency',fc,'Sensor',antenna);
receiver = phased.ReceiverPreamp('NoiseFigure',0,...
    'EnableInputPort',true,'SeedSource','Property','Seed',2e3);

%%
% Propagate 25 pulses to and from the target. Collect the echoes at the
% receiver, and store them in a 25-column matrix named |rx_puls|.
numPulses = 25;
rx_puls = zeros(100,numPulses);
%%
% Simulation loop
for n = 1:numPulses
    %%
    % Generate waveform
    wf = waveform();
    %%
    % Transmit waveform
    [wf,txstatus] = transmitter(wf);
    %%
    % Radiate pulse toward the target
    wf = radiator(wf,tgtang);
    %%
    % Propagate pulse toward the target
    wf = channel(wf,txloc,tgtloc,[0;0;0],[0;0;0]);
    %%
    % Reflect it off the target
    wf = target(wf);
    %%
    % Propagate the pulse back to transmitter
    wf = channel(wf,tgtloc,txloc,[0;0;0],[0;0;0]);
    %%
    % Collect the echo
    wf = collector(wf,tgtang);
    %%
    % Receive the target echo
    rx_puls(:,n) = receiver(wf,~txstatus);
end
%%
% Create a range-Doppler response object that uses the matched filter
% approach. Configure this object to show radial speed rather than Doppler
% frequency. Use |plotResponse| to plot the range versus
% speed.
rangedoppler = phased.RangeDopplerResponse(...
    'RangeMethod','Matched Filter',...
    'PropagationSpeed',c,...
    'DopplerOutput','Speed','OperatingFrequency',fc);
plotResponse(rangedoppler,rx_puls,getMatchedFilter(waveform))
%%
% The plot shows the stationary target at a range of approximately 7000 m.