E.g. the Symbol Sync block has a Loop Bandwidth, which (if I read the source right) ends up as a PI loop.

I know what PID does mathematically, and what FIR and IIR do, but how is one better than the other?

My non-expert guess assumed that an IIR or FIR would be better at tracking drifts, and discarding false samples (e.g. noise causing a false symbol timing read), because they would be better able to incorporate history.

I could also guess that PID may be more efficient. But I have enough CPU in my DSP projects that this would not be a concern.

So: Is PID obviously better? In all real world scenarios?

  • $\begingroup$ remember what the "I" in "PI" stands for, and compare that to your proposed filter types! $\endgroup$ Dec 31, 2023 at 0:27

1 Answer 1


Keep in mind that we are talking about a clock synchronization loop, so you need to think of the behavior from a control-systems perspective.


Just discard that notion right out. There are good reasons to use FIR filters in some contexts, but usually the use of a FIR filter implies that you're designing something with a linear phase response. This means that you'll be designing a non-minimum phase filter with lots of extra delay. That delay kills the attainable bandwidth that you can get.

There are specialized, narrow applications for certain FIR filters inside of control loops, but you should be well-versed enough in control theory that you can both make things work right and convince your colleagues that what you're attempting will actually work to your advantage -- neither of those is easy.


Technically, a PI or PID loop filter is an IIR filter, so this is not an either/or choice. When you say "IIR" filter you probably mean to suggest using a low-pass filter with unity, or at least finite, DC gain.

This is a bad idea inside a control loop because what you're trying to achieve with a phase-locked loop is zero phase error.


In a typical communications system the time bases can not be synchronized. This creates some inherent frequency error. In order to get that zero phase error in the context of a system that has some inherent frequency error, you need a type II loop (i.e., you need two "naked" integrators). The NCO that determines when to slice the data provides one of these -- the integrator in the PI loop filter provides the second one, to insure zero average phase error even when the time bases are not otherwise synchronized.

  • 3
    $\begingroup$ I wrote the Symbol Dync block in GNURadio. This answer is pretty much it. I was going for very low delay, so an FIR was unsuitable. The PI filter is an IIR filter with one pole (at DC!). I added a clip to the integral branch of the PI filter to force it to stay stable under a "no input" condition and keep initial lock times reasonable. $\endgroup$
    – Andy Walls
    Dec 31, 2023 at 10:09
  • 1
    $\begingroup$ It's probably also worth noting that the output of the integral branch of the PI filter is conveniently the long-term estimate of the symbol period (in units of samples per symbol). $\endgroup$
    – Andy Walls
    Dec 31, 2023 at 10:30
  • $\begingroup$ Yeah by IIR filter I meant something more tuned (longer) and advanced than a single pole IIR filter. Good point about linear phase response. Thanks for the elaborate answer, and also Thanks to Andy! $\endgroup$
    – Thomas
    Jan 1 at 15:49
  • $\begingroup$ "...is conveniently the long-term estimate of the symbol period..." one of the nice things about implementing PLLs and other things in the digital realm is that it's easy to arrange for such coincidences -- if one has the foresight. $\endgroup$
    – TimWescott
    Jan 2 at 4:07

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.