Creating FMCW Radar Data Cube

24 visualizaciones (últimos 30 días)
Fatih Yüksekkaya
Fatih Yüksekkaya el 2 de Dic. de 2023
Respondida: SANKALP DEV el 22 de Dic. de 2023
Hi there,
I am trying to generate my custom FMCW raw data to read in in Python and do the signal processing there. However, after applying FFT on the radar cube, I do not get a peak at 30 m. Can anyone find out what the issue is with the target return signal generation?
Thank you in advance!
% ULA Specs : 8 Element Uniform Linear Array with Cosine Antenna Element
antenna=phased.ULA;
antenna.NumElements = 2;
cosineElement = phased.CosineAntennaElement;
antenna.Element = cosineElement;
viewArray(antenna);
pattern(antenna,77e9,-180:180,0,...
'Type','directivity',...
'PropagationSpeed',3e8)
% Waveform Specs
waveform=phased.FMCWWaveform;
waveform.SampleRate = 100e6;
waveform.SweepTime=30.4e-6;
waveform.SweepBandwidth=1e9;
waveform.SweepDirection = 'Up';
waveform.NumSweeps = 1;
B = waveform.SweepBandwidth
nSamples = waveform.SampleRate*waveform.SweepTime
y = step(waveform);
t = (0:nSamples-1)/waveform.SampleRate;
figure
plot(t,real(y));title('Radar Waveform'); xlabel('Time (sec)'); ylabel('Amplitude')
%prf = waveform.;
% Transmitter Specs for amplification
TX=phased.Transmitter('Gain',20);
% Target Specs
TgtModel=phased.RadarTarget;
tgtPos=[100;0;0];
tgtVel=[0;0;0];
% Platform Specs
PlatformModel=phased.Platform;
PlatformModel.InitialPosition = tgtPos;
PlatformModel.Velocity = tgtVel;
% Channel Specs
ChannelModel = phased.FreeSpace;
ChannelModel.TwoWayPropagation=true;
% Tx and Rx Array
txArray = phased.Radiator(...
'Sensor',antenna,...
'OperatingFrequency',77e9);
rxArray = phased.Collector(...
'Sensor',antenna,...
'OperatingFrequency',77e9);
rxPreamp = phased.ReceiverPreamp('Gain',10,'NoiseFigure',2,...
'SampleRate',100e6);
% Variable definitions
radarPos = [0;0;0];
radarVel = [0;0;0];
nSweeps = 1;
datacube = complex(zeros(nSamples,antenna.NumElements,nSweeps));
%% Generate radar pulses
for ii=1:nSweeps
wf=step(waveform); % Generate waveform
[tgtPos, tgtVel] = step(PlatformModel, 1/B); % Update target position
[~, tgtAng] = rangeangle(tgtPos, radarPos); % Calculate range/angle to target
s0 = step(TX, wf); % Amplify signal
s1 = step(txArray,s0, tgtAng); % Radiate the signal from the array
s2 = step(ChannelModel, s1, radarPos, tgtPos, radarVel, tgtVel); % Propagate from radar to target and return
s3 = step(TgtModel, s2); % Reflect signal from Target
s4 = step(rxArray,s3,tgtAng); % Receive the signal at the array
s5 = step(rxPreamp,s4); % Add rx noise
datacube(:,:,ii) = s5(:,:); % Build data cube 1 pulse at a time
end
t = (0:nSweeps*nSamples-1)/waveform.SampleRate;
y = abs(datacube(:,1,1));
plot(y(:));title('Reflected Target Return (One Channel)'); xlabel('Time (sec)'); ylabel('Magnitude')
save('datacube.mat', 'datacube')

Respuestas (1)

SANKALP DEV
SANKALP DEV el 22 de Dic. de 2023
Hello Fatih,
I understand that you are trying to simulate a Frequency-Modulated Continuous-Wave (FMCW) radar signal and process it to detect a target at a 30-meter range. However, you are not seeing the expected peak in the frequency domain after applying the FFT on the radar cube.
Kindly refer to the following adjustments:
  • Update the target position in your simulation to [30; 0; 0] to accurately represent a target at a 30-meter distance.
  • Adjust the time step for updating the target position based on the pulse repetition interval (PRI). The time step should be the inverse of the pulse repetition frequency (PRF).
PRI is the time interval between the start of one pulse and the start of the next pulse in a series of radar pulses. It is a measure of how frequently the radar transmits pulses. The PRI determines the maximum unambiguous range that the radar can measure, and PRF is the number of pulses transmitted by the radar per second. It is the reciprocal of the PRI.
Please find the attached code reflecting the adjustments.
Updating the target position and aligning the time step with the pulse repetition interval, will enhance the accuracy of simulation.
Hope this helps,
Regards,
Sankalp dev

Categorías

Más información sobre Detection, Range and Doppler Estimation en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by