I'm working with a pulsed radar signal which uses linear chirp pulses. I perform pulse compression by applying a matched filter of the simulated chirp waveform and recording the location and power of the peak. Often times the recorded signal has a Doppler shift, so there is some inherent loss in the pulse compression process. This value is not large, but I need to quantify this expected loss so I can properly measure the actual received power of my signal.

How can I calculate the expected compression loss at the peak due to a frequency offset?

PS, I understand that the location of the peak will also move due to range-doppler coupling, but I understand that phenomenon already.


3 Answers 3


Short answer; I'll try to come back and improve this later.

Recall that a matched filter is equivalent to a sliding correlator. At each time instant, the sliding correlator multiplies the last $T$ (where $T$ is the pulse duration) of the input signal by the conjugate of the pulse shape and coherently integrates the result over the pulse duration. If there is no frequency offset, then the result after multiplying by the conjugated pulse shape is a constant (DC) value, so you don't observe any loss.

If there is a frequency error, then the result after multiplying by the conjugate of the pulse shape is a sinusoid whose frequency is commensurate with the frequency offset. The scalloping loss is incurred is due to the fact that you're integrating the value of said sinusoid over a time window of length $T$. Therefore, the amount of attenuation can be well-modeled by the frequency response of a boxcar filter of length $T$:

$$ \text{rect}\left(\frac{t}{T}\right) \Leftrightarrow T \text{ sinc}\left(\frac{2\pi f T}{2}\right) $$

You can make the following observations from this relationship:

  • As the pulse duration $T$ increases, the frequency response of the correlator rolls off more quickly; for a given frequency offset $f$, you'll experience more attenuation from the ideal peak value.

  • As the frequency offset $f$ increases, the frequency response of the correlator rolls off more quickly as well.

These combine to tell you what you probably already intuitively know; the longer you coherently integrate a signal (i.e. the longer the pulse duration in your case), the more sensitive the result will be to frequency offset.

  • $\begingroup$ I haven't had a chance to dig into your answer yet, but just so you know I updated my answer to clarify that I'm mainly concerned with the power at the correlation peak. $\endgroup$
    – David K
    Dec 20, 2016 at 15:29
  • $\begingroup$ Right, that's what I was considering in my answer. The frequency offset in question is the difference between the carrier frequency of the reflected signal that you're looking for and the center frequency of the receiver (i.e. It captures the uncertainty you have in the signal's carrier frequency). $\endgroup$
    – Jason R
    Dec 20, 2016 at 15:38

You can calculate the loss using the ambiguity function. If you plot the results in dB, the function can guide you in the project of a bank of matched filters to cover your region of interest. The stuff is not simple to have covered in a post, but i guess you can find your way typing "ambiguity function radar" in your favorite web search engine. This picture from WIKIMEDIA exemplifies the output of the ambiguity function: ambiguity functionYou see the maximal output of your filter and the attenuation due to delays and shifts.


This is how I would start the modeling in MATLAB:

%% Frequency Error
sampleRate = 100e6;

h1 = figure(1);
set(h1,'name','LFM Processing Loss Over Frequency Error and Pulsewidth');
clf, hold all, grid on
freqError = 0; matchedFilterPeak = 0;
lfmBandwidth = 5e6;

for m = 1:5

    pulsewidth = m*20e-6;

    t = -pulsewidth/2:1/sampleRate:pulsewidth/2;

    for k = 1:201

        % make an ideal chirp for the matched filter
        idealChirp = exp(1i*pi*(lfmBandwidth/pulsewidth)*t.^2);

        % frequency error in 100 Hz steps
        freqError(k) = 100*(k-1);        

        % add the frequency error/mismatch
        receivedChirp = idealChirp.*exp(1i*2*pi*freqError(k)*t);

        % perform pulse compression/matched filtering        
        compressedPulse = conv(receivedChirp,conj(idealChirp(end:-1:1)));

        % keep the peak from the matched filter
        matchedFilterPeak(k) = max(abs(compressedPulse));        

    % Make processing loss relative to perfect pulse (freqError = 0)
    pcLoss = 20*log10(matchedFilterPeak ./ matchedFilterPeak(1));
    plot(freqError/1e3,pcLoss,'LineWidth',2), grid on


legend('20 us','40 us', '60 us','80 us','100 us','Location','Southwest')
xlabel('Frequency Error (KHz)')
axis tight
ylabel('Relative Processing Loss (dB)')
title('LFM Processing Loss Over Frequency Error and Pulsewidth')

enter image description here enter image description here


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.