Effacer les filtres
Effacer les filtres

fmcw radar range doppler

31 vues (au cours des 30 derniers jours)
Abdullah
Abdullah le 14 Mar 2011
Modifié(e) : Tony Azar le 26 Mai 2022
Hello everyone,
I am trying to plot range-doppler diagram for an fmcw radar. Here is how I generate transmitted,received and video signal;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all;
close all;
clc
c=3e8; %speed of light
fc=8e9; %carrier freq
deltaF=32e6; %sweep freq
T=1e-3; %one period
alph=deltaF/T; %sweep rate
R=500; %initial distance of the target
td=2*R/(c); %initial delay of returned signal
v=2; %speed of the target (give some value between 0 and 10)
D=64; % #of doppler cells OR #of sent periods
N=2^10; %for length of time
t=linspace(0,D*T,D*N); %total time
n=0;
nT=length(t)/D; %length of one period
a=zeros(1,length(t)); %transmitted signal
b=zeros(1,length(t)); %received signal
r_t=zeros(1,length(t));
ta=zeros(1,length(t));
r1=R;
f0=fc;
for i=1:length(t)
r_t(i)=r1+v*t(i); % range of the target in terms of its velocity and initial range
ta(i)=2*r_t(i)/c; % delay for received signal
if i>n*nT && i<=(n+1)*nT % doing this for D of periods (nt length of pulse)
a(i)=sin(2*pi*(f0*t(i)+.5*alph*t(i)^2-alph*t(i)*n*T)); %transmitted signal
b(i)=sin(2*pi*(f0*(t(i)-ta(i))+.5*alph*(t(i)-ta(i))^2-alph*(t(i)-ta(i))*n*T)); %received signal
else
n=n+1
a(i)=sin(2*pi*(f0*t(i)+.5*alph*t(i)^2-alph*t(i)*n*T)); %transmitted signal
b(i)=sin(2*pi*(f0*(t(i)-ta(i))+.5*alph*(t(i)-ta(i))^2-alph*(t(i)-ta(i))*n*T)); %received signal
end
end
mixed1=(a.*b); %video signal OR IF signal (output of mixer)
m1=reshape(mixed1,length(mixed1)/D,D); %generating matrix ---> each row showing range info for one period AND each column showing number of periods
[My,Ny]=size(m1');
win=hamming(Ny);
m2=conj(m1).*(win*ones(1,My)); %taking conjugate and applying window for sidelobe reduction (in time domain)
Win=fft(hamming(My),D);
M2=(fft(m2,2*N)); %First FFT for range information
M3=fftshift(fft(M2',2*D)); %Second FFT for doppler information
[My,Ny]=size(M3);
doppler=linspace(-D,D,My);
range=linspace(-N,N,Ny);
figure;contour(range,doppler,abs(M3));grid on
xlabel('Range')
ylabel('Doppler')
figure;mesh(range,doppler,abs(M3))
xlabel('Range')
ylabel('Doppler')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
There are a few thing I am not sure if I am doing right.
First, while defining the received signal (b) is that the correct way to do it for every period.
Second, I am applying window for the video signal for range sidelobe reduction.
Do I need to do it for doppler sidelobes also?
Third, I am not sure if I am using 'fftshift' function right.
Because when I increase the speed of the target, for example from 0 to 1, peak's position shifts to negative value (below zero).
Forth, how do I define range and doppler resolutions and use them for x and y axis while plotting.
Please give comments and give me some direction.
Thanks!
  1 commentaire
mk14
mk14 le 7 Fév 2019
Hi, I am working on the Range-Doppler Plot now. I wonder if you figured out the second question? Do we need to apply windowing in doppler processing?
From the code phased.RangeDopplerResponse, we can find property 'CustomDopplerWindow' default as hamming.
Looking forward to your reply.
Cheers!

Connectez-vous pour commenter.

Réponses (5)

Tony Azar
Tony Azar le 26 Mai 2022
Modifié(e) : Tony Azar le 26 Mai 2022
Please refer to Example: "Increasing Angular Resolution with Virtual Arrays" at the link below: https://www.mathworks.com/help/phased/ug/increasing-angular-resolution-with-mimo-radars.html
Since you are not using a Virtual Array, set the weights of the Tx Antenna Elements to:
w0 = [1;1]; % instead of [0;1]
and for your data cube do not re-arrange the data, use the cube as is, that is, use xr and not xrv (see below)
nfft_r = 2^nextpow2(size(xr,1));
nfft_d = 2^nextpow2(size(xr,3));
rngdop = phased.RangeDopplerResponse('PropagationSpeed',c,...
'DopplerOutput','Speed','OperatingFrequency',fc,'SampleRate',fs,...
'RangeMethod','FFT','PRFSource','Property',...
'RangeWindow','Hann','PRF',1/(1*waveform.SweepTime),... % Note this in Bold
'SweepSlope',waveform.SweepBandwidth/waveform.SweepTime,...
'RangeFFTLengthSource','Property','RangeFFTLength',nfft_r,...
'DopplerFFTLengthSource','Property','DopplerFFTLength',nfft_d,...
'DopplerWindow','Hann');
[resp,r,sp] = rngdop(xr);
then implement the rest of code

mohamed  al-asklany
mohamed al-asklany le 25 Déc 2011
nice i make project in this area but i can not realize the system

Mayank Lakhani
Mayank Lakhani le 17 Fév 2015
Hi abdullah,
Code is really nice. Can you send me some paper which you reffered to write the code. Thank you in advance. my email adress is mayankwait4u@gmail.com

Can
Can le 16 Juil 2017
There is not even one thing that works in this code. I wanted to fix it and share it back, but it would take less time to create it from scratch.

Poornima Hampannavar
Poornima Hampannavar le 3 Nov 2017
Can u give explaination for this code plz

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by