# Question on control-loop block design

**URL:** <https://www.ruby-forum.com/t/question-on-control-loop-block-design/241750>\
**Category:** GNU Radio\
**Created:** [April 28, 2015, 2:51pm UTC](https://www.ruby-forum.com/t/question-on-control-loop-block-design/241750 "2015-04-28T14:51:59Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![musicdenotation](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/ea666f/32.png) [@musicdenotation](https://www.ruby-forum.com/u/musicdenotation)\
**Post date:** [April 28, 2015, 2:51pm UTC](https://www.ruby-forum.com/t/question-on-control-loop-block-design/241750/1 "2015-04-28T14:51:59Z")

</div>

Hello,

I’ve been looking into the design details of the control-loop block. I  
stumbled upon the blog post of Tom  
([Control Loop Gain Values — Rondeau Research](http://www.trondeau.com/blog/2011/8/13/control-loop-gain-values.html)  
with the derivation  
[https://static.squarespace.com/static/543ae9afe4b0c3b808d72acd/543aee1fe4b09162d0863397/543aee1fe4b09162d08633ac/1313345573084/control\_loop\_derivation.pdf](https://static.squarespace.com/static/543ae9afe4b0c3b808d72acd/543aee1fe4b09162d0863397/543aee1fe4b09162d08633ac/1313345573084/control_loop_derivation.pdf))  
and also this article from TI:  
[http://www.ti.com/lit/an/slyt169/slyt169.pdf](http://www.ti.com/lit/an/slyt169/slyt169.pdf).

Now looking at the schematics of the control loop in Tom’s post and the  
TI article (figure 5), you notice a slight difference after the loop  
filter. In the TI article, there is delay (z^-1) followed by an  
accumulator. In the schematics of Tom’s post, the delay block is  
directly integrated in the loop. Can somebody comment on these  
differences?

Thanks  
Ruben

---

<div class="post-metadata">

**Author:** ![laber](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/67e7ee/32.png) [@laber](https://www.ruby-forum.com/u/laber)\
**Post date:** [May 11, 2015, 5:44pm UTC](https://www.ruby-forum.com/t/question-on-control-loop-block-design/241750/2 "2015-05-11T17:44:50Z")

</div>

On Tue, Apr 28, 2015 at 8:50 AM, [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Now looking at the schematics of the control loop in Tom’s post and the TI  
> article (figure 5), you notice a slight difference after the loop filter.  
> In the TI article, there is delay (z^-1) followed by an accumulator. In the  
> schematics of Tom’s post, the delay block is directly integrated in the  
> loop. Can somebody comment on these differences?
> 
> Thanks  
> Ruben

Hi Ruben,

This is a good question, and I don’t want to let it drop. I just don’t  
have  
a good answer for your right now. If I can find the time, I’ll try to go  
through things more carefully to understand why there is the added  
delay.  
Just keeping the thread alive in case someone else can jump in and  
answer  
it.

Tom

---

<div class="post-metadata">

**Author:** ![laber](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/67e7ee/32.png) [@laber](https://www.ruby-forum.com/u/laber)\
**Post date:** [May 11, 2015, 6:02pm UTC](https://www.ruby-forum.com/t/question-on-control-loop-block-design/241750/3 "2015-05-11T18:02:57Z")

</div>

From what I remember, there shouldn’t be a functional difference. The  
difference is the amount of feedback delay in the loop. You always need  
to make sure one delay exists in any feedback path you can take, to  
avoid race conditions. After that, you want to minimize the loop delay.  
The one accumulator with delay in the feedback path ensures stability.  
The other accumulator keeps the delay out of the feedback path because  
it minimizes the loop latency.

Hope that helps.

Rich

Sent from my iPhone

---

<div class="post-metadata">

**Author:** ![laber](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/67e7ee/32.png) [@laber](https://www.ruby-forum.com/u/laber)\
**Post date:** [May 11, 2015, 6:36pm UTC](https://www.ruby-forum.com/t/question-on-control-loop-block-design/241750/4 "2015-05-11T18:36:50Z")

</div>

On Mon, May 11, 2015 at 12:00 PM, Richard B. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
wrote:

> Rich
> 
> Sent from my iPhone

Yep, thanks, Richard!

Tom

---

<div class="post-metadata">

**Author:** ![laber](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/67e7ee/32.png) [@laber](https://www.ruby-forum.com/u/laber)\
**Post date:** [May 12, 2015, 9:13am UTC](https://www.ruby-forum.com/t/question-on-control-loop-block-design/241750/5 "2015-05-12T09:13:46Z")

</div>

Ok, makes sense. Thanks for the feedback  
R

From: removed\_email\_address@domain.invalid [[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)] On Behalf Of  
Tom R.  
Sent: Monday, May 11, 2015 6:35 PM  
To: Richard B.  
Cc: Merz Ruben, INI-INO-ECO-MXT; GNURadio D.ion List  
Subject: Re: [Discuss-gnuradio] Question on control-loop block design

On Mon, May 11, 2015 at 12:00 PM, Richard B.  
\<removed\_email\_address@domain.invalid[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)\> wrote:  
From what I remember, there shouldn’t be a functional difference. The  
difference is the amount of feedback delay in the loop. You always need  
to make sure one delay exists in any feedback path you can take, to  
avoid race conditions. After that, you want to minimize the loop delay.  
The one accumulator with delay in the feedback path ensures stability.  
The other accumulator keeps the delay out of the feedback path because  
it minimizes the loop latency.

Hope that helps.

Rich

Sent from my iPhone

Yep, thanks, Richard!

Tom

On May 11, 2015, at 8:42 AM, Tom R.  
\<removed\_email\_address@domain.invalid[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)\> wrote:  
On Tue, Apr 28, 2015 at 8:50 AM,  
\<removed\_email\_address@domain.invalid[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)\> wrote:  
Hello,

I’ve been looking into the design details of the control-loop block. I  
stumbled upon the blog post of Tom  
([Control Loop Gain Values — Rondeau Research](http://www.trondeau.com/blog/2011/8/13/control-loop-gain-values.html)  
with the derivation  
[https://static.squarespace.com/static/543ae9afe4b0c3b808d72acd/543aee1fe4b09162d0863397/543aee1fe4b09162d08633ac/1313345573084/control\_loop\_derivation.pdf](https://static.squarespace.com/static/543ae9afe4b0c3b808d72acd/543aee1fe4b09162d0863397/543aee1fe4b09162d08633ac/1313345573084/control_loop_derivation.pdf))  
and also this article from TI:  
[http://www.ti.com/lit/an/slyt169/slyt169.pdf](http://www.ti.com/lit/an/slyt169/slyt169.pdf).

Now looking at the schematics of the control loop in Tom’s post and the  
TI article (figure 5), you notice a slight difference after the loop  
filter. In the TI article, there is delay (z^-1) followed by an  
accumulator. In the schematics of Tom’s post, the delay block is  
directly integrated in the loop. Can somebody comment on these  
differences?

Thanks  
Ruben

Hi Ruben,

This is a good question, and I don’t want to let it drop. I just don’t  
have a good answer for your right now. If I can find the time, I’ll try  
to go through things more carefully to understand why there is the added  
delay. Just keeping the thread alive in case someone else can jump in  
and answer it.

Tom
