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

% 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;

Antworten (1)

@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 Kommentare

Thank you, Jeffrey Clark.
Yes, you have understood my question correctly. The radar system maintains a constant height during simulation. But, at the same time, there is a property 'PlatformSpeed', and there is also a property 'PlatformDirection' which includes both azimuth and elevation angles. So I guess I can set any absolute value and any direction for the radar platform speed. And so from this two properties I just mean the Doppler effect must be taken into account in some way...
Well, maybe I should try some other way.
I've checked it once more. I set PlatformDirection=[0;0] and MountigAngles = [0,45,0]. That means radar platform moves horizontally along the X-axis and the antenna is directed towards the terrain surface with the deppression angle of 45 degrees. And then I set various values for PlatformSpeed: 0, 50, 100, 200 m/s.
So, the limiting assumption of constant height during simulation is met. But, no matter, there is no Doppler frequency shift in received signal magnitude spectrum.
@Andrey Senkov, have you looked at the examples and doppler plots given in the Simulate clutter using constant gamma model - MATLAB (mathworks.com)? It appears that it is intended to estimate the doppler but since I don't have the Radar Toolbox its difficult to know what functions must be completed and complementary before meaningful results can be obtained. As an example of my limited knowledge, it doesn't appear you used the step function/method that is part of the examples referenced above for the constantGammaClutter system object.
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.
@Andrey Senkov, my other point was about using the plot functions given in the examples to validate what you are doing.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Detection, Range and Doppler Estimation finden Sie in Hilfe-Center und File Exchange

Produkte

Version

R2021a

Gefragt:

am 5 Okt. 2022

Bearbeitet:

am 8 Okt. 2022

Community Treasure Hunt

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

Start Hunting!

Translated by