In many pulsed radar applications, one pulse is not enough to be informative, mainly for the reason you mention. However, coherent processing of multiple pulses can be used to extract useful information.
As an example, take a time-domain signal of sufficient length to accurately extract frequency information. Now multiply (not convolve) that signal with a rectangular pulse train in the time domain. In effect, you are taking a large number of your samples, and setting them to zero. Now consider the result in the frequency-domain. It will look like the convolution of the original spectrum with the spectrum of the pulse train.
Here is a MATLAB example:
K = 3; % Samples per pulse
N = 50; % Number of pulses
duty = 0.1; % Duty Cycle
Fs = 48e3; % Sampling Frequency
f0 = 13e3; % Center frequency
fd = f0*(1+0.03); % Doppler shifted frequency
SNR = 10; % Signal/Noise Ratio (dB)
% Helper function for plotting FFTs
plotFFT=@(x,Fs) plot(Fs*(0:length(x)-1)/length(x)-Fs/2, abs(fftshift(fft(x))));
% Create a train of rectangular pulses
rect_pulse_train = repmat([ones(1,K), zeros(1,K*(1/duty-1))],1,N);
figure(1); plotFFT(rect_pulse_train,Fs); title('Spectrum of pulse train');
% Create a carrier signal plus a doppler shifted version
t = (0:length(rect_pulse_train)-1)/Fs;
x = cos(2*pi*f0*t) + 0.7*cos(2*pi*fd*t);
% Add Gaussian noise
nstd = norm(x) / sqrt(2 * length(x) * 10^(SNR/10));
x_noisy = x + nstd*(randn(size(x)) + 1j*randn(size(x)));
x_pulse = [x_noisy(1:K), zeros(1,length(x)-K)];
figure(2); plotFFT(x_pulse,Fs); title('Spectrum of single pulse');
% Capture a coherently-pulsed version of the signal
y = rect_pulse_train.*x_noisy;
figure(3); plotFFT(y,Fs); title('Spectrum of coherently pulsed signal');
As you try various values of K
, you can see how it affects your frequency resolution. Even though the peaks are spectrally smeared, it is still possible to identify small frequency shifted copies of the carrier when using coherent doppler processing.