Hi Robert,
I understand that you want to create a range doppler plot using the "Coherent processing intervals (CPIs)". To create the plot, the CPI data should be processed using a 2D "Fast Fourier Transform (FFT)". This will transform the time-domain data into the frequency domain, which will allow to analyze the range and velocity (Doppler) information of targets.
Please follow the below mentioned steps to create the range-doppler plot using the CPI data:
- Pre-processing: Apply a window function to each CPI to reduce spectral leakage improve the resolution of the plot. This is typically done along both the range and Doppler dimensions.
filterwindow = hamming(64);
cfar = [sqrt(k) sqrt(k) sqrt(k) sqrt(k) sqrt(k);
sqrt(k) sqrt(k) sqrt(k) sqrt(k) sqrt(k)];
rangeWindow = hamming(size(CPI1, 1));
dopplerWindow = hamming(size(CPI1, 2));
windowedCPI = (CPI1 .* rangeWindow) .* dopplerWindow';
- 2D FFT: Perform a 2D FFT on the pre-processed CPI data to transform it into the frequency domain, obtaining the Range-Doppler matrix.
fft2dCPI = fft2(windowedCPI);
fft2dCPI_shifted = fftshift(fft2dCPI);
- Post-processing: Apply any additional signal processing techniques, such as “normalizing”. Normalizing the magnitude of the FFT by dividing it by the number of samples can make the plot more consistent and comparable across different data sets.
nrows = size(fft2dCPI_shifted, 1);
ncols = size(fft2dCPI_shifted, 2);
magnitudeCPI = abs(fft2dCPI_shifted) / (nrows * ncols);
magnitudeCPI_db = mag2db(magnitudeCPI);
- Visualization: Create the Range-Doppler plot using the magnitude of the Range-Doppler matrix.
imagesc(magnitudeCPI_db);
title('Range-Doppler Plot');
Please follow the below mentioned MATLAB R2023b documentation links to understand about "fft2" and "mag2db" functions respectively:
I hope this helps to resolve your query.
Regards,
Abhimenyu