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

조회 수: 7 (최근 30일)
% 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;

답변 (1개)

Jeffrey Clark
Jeffrey Clark 2022년 10월 5일
@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
Andrey Senkov
Andrey Senkov 2022년 10월 8일
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 2022년 10월 8일
편집: Jeffrey Clark 2022년 10월 8일
@Andrey Senkov, my other point was about using the plot functions given in the examples to validate what you are doing.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Data Synthesis에 대해 자세히 알아보기

제품


릴리스

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by