针对一个chirp的数据在MATLAB中进行处理,得到对应的距离信息。在真实的处理中,肯定不是通过这种简单的方式就得到距离,这里仅仅是通过这个例子认识到“连续波雷达中,距离和频率之间的对应关系”以及“加窗对于FFT的影响”。
下面是MATLAB的代码,下载原始数据请点击链接。
%% 1D FFT using MATLAB
% load rawdata
close all;clear;clc;
din_real = load('one_chirp_data_real.dat');
din_imag = load('one_chirp_data_imag.dat');
din_real = din_real';
din_imag = din_imag';
figure
subplot(211)
plot(din_real)
title('real data')
subplot(212)
plot(din_imag)
title('imag data')
din = din_real + 1j* din_imag; % complex value
figure
plot(abs(din))
title('complex value')
%% fft
din_fft = fft(din);
figure
plot(abs(din_fft))
title('fft(before window)')
xlabel('samples')
% N = length(din_real);
% B = 768e6; % bandwidth
% range_res = c/(2*B); % range resolution
% index = 1:1:N;
% range_bin = (index-1)*range_res;
% figure
% plot(range_bin, abs(din_fft))
N = length(din_real); % samples
Fs = 10e6; % sampling rate
B = 768e6; % bandwidth
k = 30e12; % slope
Tc = B/k; % chirp duration
c = 3e8; % light speed
index = 1 : 1 : N;
range_bin = (index - 1) * (c*Tc*Fs) / (2*B*N);
freq_bin = (index-1)*Fs/N;
figure
plot(range_bin, abs(din_fft))
xlabel('range(m)')
figure
plot(freq_bin,abs(din_fft))
xlabel('freqency(Hz)')
%% window
range_win = round(100*hamming(N));
range_win = range_win';
din_win = din .* range_win;
din_win_fft = fft(din_win);
figure
plot(range_bin, abs(din_win_fft))
title('fft(after window)')
xlabel('range(m)')