- The radar system maintains a constant height during simulation.

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

6 views (last 30 days)

Show older comments

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

##### 0 Comments

### Answers (1)

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?

##### 5 Comments

Jeffrey Clark
on 8 Oct 2022

Edited: Jeffrey Clark
on 8 Oct 2022

### See Also

### Categories

### Community Treasure Hunt

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

Start Hunting!