Algebric Loop with FIR Filter in Simulink

Hi, I have FIR filter and I put it in a feedback. It has some feed foward coefficient so it gives an Algebric Loop error. How i can solve it?
Regards,

Antworten (1)

Ced
Ced am 11 Apr. 2016

0 Stimmen

By feedforward, do you mean a feedthrough in your filter? Two possibilities I can think of:
1. Incorporate your feedforward as a gain, i.e. instead of having y = u + a*y, write y = u/(1-a). This is the exact solution.
2. As a quick fix, you can include a memory or delay element. This shifts everything by one time step though.

5 Kommentare

Muhammad Kamran
Muhammad Kamran am 11 Apr. 2016
Thanks for you reply. I have attached the screen shot. My signal through a0 cause the feed forward path when it is placed in a feedback circuit. Simulink givens an algebraic error on this path.I cannot place any delay element as it will result in a zero at the output transfer function. ideally simulink should sample the data and subtract the input but unfortunately it is not working.
Ced
Ced am 11 Apr. 2016
Thanks. Yes, that is to be expected. The input of your filter is y, and you add it back into y? Does a0 have to appear there? Why not, instead of
y_n = y_n*a0 + y_{n-1}*a1 + ...
use
y_n = (y_{n-1}*a1 + y_{n-2}*a2 + ... )/(1-a0)
? This would simply mean to remove the a0 feedthrough path and add it as a gain.
Not sure if I understand your filter. I am familiar with the
a0*y_n + a1*y_{n-1} + a2*y_{n-2} + .... = b0*u_n + b1*u_{n-1} + ...
variant.
Also, if you are in discrete time, I would use delay elements between y_n, y_{n-1}, ...
Muhammad Kamran
Muhammad Kamran am 12 Apr. 2016
Thanks for your reply. Indeed it will work for me.
I am just wondering that it there no way to solve it except modifying your expression? it is a discrete time system and Matlab should be able to resolve it
Muhammad Kamran
Muhammad Kamran am 12 Apr. 2016
I am also facing another problem now.
The filter equation is y[n] = (a0 + a1*z^(-1)+ a2*z^(-1) +...) x[n]
If put it in a feedback loop with H =1; then it will be not easy to make the form you suggested. I have attached the picture of it.Now the path through a0 will give algebraic loop error.
your help is really appreciated. Thanks for looking into my problem
Ced
Ced am 12 Apr. 2016
I think it's still possible. Your system is something like y = (a0 + a1*z^(-1) + ... )*(r-y), where r is that signal coming from the left.
So, extracting the feedthrough term, taking it to the other side and then dividing the whole equation by (1+a0), you get
y = r*a0/(1+a0) + (r-y)*(a1*z^(-1) + ... )*a0/(1+a0)
Note that the a0/(1+a0) gain will be before the +- sign. The feedthrough of r doesn't have to be extracted if you don't want to, but this way, you only have one filter block. Otherwise, you need two blocks (one without feedthrough for y (in the feedback) and one with feedthrough for r).
Alternative: You could try and set an initial condition block on the feedback. Otherwise, even with discrete time, simulink arrives at your feedback point, but has no way of knowing what value to expect because nothing has been computed yet.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu General Applications finden Sie in Hilfe-Center und File Exchange

Gefragt:

am 11 Apr. 2016

Kommentiert:

Ced
am 12 Apr. 2016

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by