constantGammaClutter doesn't take account of Doppler shift of the frequency due to radar motion

2 views (last 30 days)
% this script models the operation of
% an artillery munition proximity fuse with LFM signal
% radar platform is considered to move verticalli down to
% terrain surface at several different velosities
% of 0, 50, 100 and 200 m/s;
% antenna looks vertically down to terrain
%
% at the final figure one can see that there is no Doppler shift of
% frequency at variuous radar velocity values
%
%% initial data
antenna_beamwidth = 40; % antenn's beamwidth, degrees
c = physconst('Lightspeed'); % light speed, m/s
sbw = 300e6; % frequency deviation width - SweepBandWidth, Hz
fc = 3e9; % carrier frequency, Hz
lambda = freq2wavelen(fc,c); % crrier wavelength, m
Tpr = 2e-3; % pulse repetition period
prf = 1/Tpr; % pulse repetition frequency
fslope = sbw/Tpr; % the rate of frequency change in LFM pulse, Hz/s
fs = 2*sbw; % sample frequency, Hz
n = ceil(Tpr*fs); % number of samples in 1 pulse
fs = n/Tpr; % correction of sample frequency, so an integer number of sample to be in 1 pulse
ts = 1/fs; % sample time step, s
t = (0 : ts : -ts+Tpr).'; % time samples array
Lt = length(t);
f = [-Lt/2 : -1+Lt/2]/Lt*fs; % frequency value scale for FFT
f_ = [0 : -1+Lt/2]/Lt*fs; % frequency nonnegative value scale for FFT
%% waveform setting
wvfrm = phased.LinearFMWaveform('SampleRate',fs, ...
'PRF', 1/Tpr, ...
'DurationSpecification', 'Pulse width', ...
'PulseWidth', Tpr, ...
'SweepBandwidth',sbw, ...
'SweepDirection', 'Up', ...
'SweepInterval', 'Symmetric', ...
'FrequencyOffset', fc);
u = wvfrm(); % reference signal samples
%% radar parameters
antenna = phased.CosineAntennaElement(...
'FrequencyRange',[fc-sbw, fc+sbw], ...
'CosinePower',[5 5]);
figure();
pattern(antenna,fc);
radiator = phased.Radiator('Sensor', antenna,...
'PropagationSpeed', c,...
'OperatingFrequency', fc);
collector = phased.Collector('Sensor', antenna,...
'PropagationSpeed', c,...
'OperatingFrequency', fc);
transmitter = phased.Transmitter('PeakPower',1e-2, ...
'Gain', 2, ...
'LossFactor', 0, ...
'InUseOutputPort', false, ...
'CoherentOnTransmit', false);
receiver = phased.ReceiverPreamp('Gain',20,...
'LossFactor', 2, ...
'NoiseMethod', 'Noise temperature',...
'ReferenceTemperature', 290,...
'NoiseFigure', 6, ...
'NoiseComplexity', 'Complex', ...
'SampleRate', fs);
% clutter parameters setting
terrain_gamma = surfacegamma('flatland');
clutter = constantGammaClutter('Sensor', antenna,...
'PropagationSpeed', c,...
'OperatingFrequency', fc,...
'SampleRate', fs, ...
'PRF', prf, ...
'Gamma', terrain_gamma, ...
'CoherenceTime', Tpr, ...
'TransmitSignalInputPort',true,...
'OutputFormat', 'Samples', ...
'NumSamples', Lt);
% low pass filter setting
LowPass = designfilt('lowpassiir',...
'PassbandFrequency',1/4*fs, ...
'StopbandFrequency',1/2*fs, ...
'SampleRate',fs);
%% modeling of the reflected clutter signal
h=200; % radar height over the terrain surface, m
f_range = range2beat(h,fslope,c); % beat frequency shift, Hz
depAng = 90; % depression angle of radar velocity vector, degrees
tgt_pos = [0;0;0]; % target position
tgt_vel = [0;0;0]; % target velocity
rad_pos = [ h/tand(depAng); 0; h]; % radar position
rad_vel = [ 0,0,0;... % radar velocity vectors
0,0,-50;...
0,0,-100;...
0,0,-200]';
% figure to display and compare magnitude spectrums at different radar velocities
fig = figure();
xlabel('{\itf}, kHz');
ylabel('{\itG}_{\ity}, dB');
for i=1:size(rad_vel,2) % iterations over all radar velocities
% Doppler frequency shift (theoretic estimation), Hz
RadialSpeed = radialspeed(rad_pos,rad_vel(:,i),tgt_pos,tgt_vel);
f_dsh = speed2dop(RadialSpeed,lambda); % Doppler shift
uref = transmitter(u); % reference signal at the output of transmitter
% clutter signal calculation
clutter.release();
clutter.PlatformHeight = h;
clutter.PlatformSpeed = norm(rad_vel(:,i));
clutter.PlatformDirection = [0;-90]; % vertical motion down to terrain surface
clutter.MountingAngles = [0, 90, 0]; % antenna looks vertically towards the terrain surface
clutter.reset();
u_cluttersig = clutter(uref); % reflected clutter signal
urx = receiver(u_cluttersig); % received clutter signal
y = urx.*conj(uref); % received signal mixing with the reference signal
y = filter(LowPass,y);
FY = fft(real(y)); % FFT
GY = 1/Lt*abs(FY(1:Lt/2)); % magnitude spectrum
GY(2:end-1) = 2*GY(2:end-1);
figure(fig);
hold on;
% displaing theoretical beat-and-doppler freuency
stem((f_range-f_dsh)*1e-3, -300, '--k.',...
'DisplayName',num2str(rad_vel(3,i),4));
% displaing magnitude spectrum of the received clutter signal
plot(1e-3*f_, mag2db(GY), '-', 'LineWidth', 0.5, ...
'DisplayName', num2str(rad_vel(3,i),4));
grid on;
shg;
end
figure(fig);
legend;

Answers (1)

Jeffrey Clark
Jeffrey Clark on 5 Oct 2022
@Andrey Senkov, this bullet below from the description of Simulate constant gamma clutter - MATLAB (mathworks.com) indicates it does not do what you want. Are you looking for an alternative approach or have I missinterpreted your question?
  • The radar system maintains a constant height during simulation.
  5 Comments
Andrey Senkov
Andrey Senkov on 8 Oct 2022
Starting in R2016b, instead of using the step method to perform the operation defined by the System object™, you can call the object with arguments, as if it were a function. For example, y = step(obj,x) and y = obj(x) perform equivalent operations.
Jeffrey Clark
Jeffrey Clark on 8 Oct 2022
Edited: Jeffrey Clark on 8 Oct 2022
@Andrey Senkov, my other point was about using the plot functions given in the examples to validate what you are doing.

Sign in to comment.

Categories

Find more on Waveform-Level Simulations in Help Center and File Exchange

Products


Release

R2021a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!