fmcw radar range doppler

Started by hozz March 14, 2011
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!