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

2 Ansichten (letzte 30 Tage)
% 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)

Jeffrey Clark
Jeffrey Clark am 5 Okt. 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 Kommentare
Andrey Senkov
Andrey Senkov am 8 Okt. 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 am 8 Okt. 2022
Bearbeitet: Jeffrey Clark am 8 Okt. 2022
@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 Waveform-Level Simulations finden Sie in Help Center und File Exchange

Produkte


Version

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by