Can You Implement Full State Feedback Without Direct State Observations?

  • Thread starter Thread starter zoom1
  • Start date Start date
  • Tags Tags
    Feedback State
Click For Summary

Discussion Overview

The discussion revolves around the implementation of full state feedback control in systems where direct state observations are not available. Participants explore the requirements for simulation in tools like Simulink, the implications of state observability, and the challenges associated with achieving desired system responses, particularly regarding steady-state errors.

Discussion Character

  • Exploratory
  • Technical explanation
  • Debate/contested
  • Mathematical reasoning

Main Points Raised

  • Some participants suggest that to implement full state feedback, knowledge of the system's states is necessary, while others propose that initial state knowledge may suffice for simulation purposes.
  • There are discussions about using transducers or observers to obtain the full state in practical applications.
  • One participant describes a method in Simulink involving an integrator to simulate state feedback, but notes limitations in accessing all state variables directly.
  • Another participant raises concerns about achieving the desired steady-state response, questioning why the system does not reach the expected amplitude despite meeting design criteria.
  • Some participants discuss the expected steady-state gain based on the closed-loop transfer function and suggest adjusting the DC gain to address steady-state errors.
  • There is mention of the trade-off between steady-state error and pole placement in control design.
  • One participant shares a successful implementation of an observer to estimate states, leading to improved system performance.

Areas of Agreement / Disagreement

Participants express differing views on the necessity of direct state observations for implementing full state feedback, and there is no consensus on the best approach to mitigate steady-state errors. The discussion remains unresolved regarding the optimal control structure to achieve desired performance criteria.

Contextual Notes

Participants note limitations in the documentation and details provided in resources like Wikipedia, indicating that additional information on control structures and design procedures is needed for comprehensive understanding.

Who May Find This Useful

Individuals interested in control systems, particularly those working with state feedback and simulation in environments like Simulink, may find this discussion relevant.

zoom1
Messages
63
Reaction score
0
Below wikipedia page summarizes the full state feedback. Everything is clear but to be able to implement this controller I need to know my states. But What I know is just the A, B and C matrices. So, to be able to simulate this technique on simulink I need to observe the state, I think. Is this the only way, or there is a way around ?
 
Engineering news on Phys.org
zoom1 said:
Below wikipedia page summarizes the full state feedback. Everything is clear but to be able to implement this controller I need to know my states. But What I know is just the A, B and C matrices. So, to be able to simulate this technique on simulink I need to observe the state, I think. Is this the only way, or there is a way around ?
If we're just talking simulation, you only need to know the initial state of the system. In practice, you'd need transducers for the full state or an observer (if your system is observable).

In Simulink, put down an integrator and take its output to be ##x##. Then use that output along with ##u## to form ##\dot{x}##, which is the input for the integrator you just put down. Enter the initial state into the IC-field of the integrator, choose solver etc. and simulate.
 
milesyoung said:
If we're just talking simulation, you only need to know the initial state of the system. In practice, you'd need transducers for the full state or an observer (if your system is observable).

In Simulink, put down an integrator and take its output to be ##x##. Then use that output along with ##u## to form ##\dot{x}##, which is the input for the integrator you just put down. Enter the initial state into the IC-field of the integrator, choose solver etc. and simulate.

Output of the state-space block of simulink is only one of the state variables.

C*x = [0 1]*[y';y]

So I can't reach the state x.
Also simulink doesn't allow me to choose the C and Identity to get the x itself directly as output.
 
zoom1 said:
Output of the state-space block of simulink is only one of the state variables.

C*x = [0 1]*[y';y]

So I can't reach the state x.
Also simulink doesn't allow me to choose the C and Identity to get the x itself directly as output.
Are you talking about this block?

If so, when you place it in your diagram, just set C = 1, D = 0, so the output is equal to the state ##x##.

Edit: If you have an older version of Simulink with a different implementation of the block, upload a screenshot of the configuration window for the block (the one that pops up when you double-click it), so I can see what you're on about.
 
Last edited:
milesyoung said:
Are you talking about this block?

If so, when you place it in your diagram, just set C = 1, D = 0, so the output is equal to the state ##x##.

Edit: If you have an older version of Simulink with a different implementation of the block, upload a screenshot of the configuration window for the block (the one that pops up when you double-click it), so I can see what you're on about.

I am using the exacty block you showed but don't know why it does not work. I found a way around it by implementing the state space diagram with my own blocks.

However, I am not getting the response I am looking for.
My plant is = 1/s(s+1)

desired poles location's characteristic equation is s^2 + 3.28s + 12.96

So, I found the K1 and K2 values for the state feedback as 12.96 and 2.28 respectively.

When I apply the step input, at steady state system response's amplitude is 0.077 , but it should be 1, right ?

But design criteria I used to model the characteristic equation are met (20% overshoot and less than 0.5 sec. rise time)

Why there is such a steady state error ?
 
Could you upload your Simulink model? If the matrices aren't defined in the Simulink diagram, then please include a MATLAB script to initialize them as well.
 
milesyoung said:
Could you upload your Simulink model? If the matrices aren't defined in the Simulink diagram, then please include a MATLAB script to initialize them as well.

There it is;
http://dfiles.eu/files/24m30ce99
 
zoom1 said:
I am using the exacty block you showed but don't know why it does not work. I found a way around it by implementing the state space diagram with my own blocks.

However, I am not getting the response I am looking for.
My plant is = 1/s(s+1)

desired poles location's characteristic equation is s^2 + 3.28s + 12.96

So, I found the K1 and K2 values for the state feedback as 12.96 and 2.28 respectively.

When I apply the step input, at steady state system response's amplitude is 0.077 , but it should be 1, right ?

But design criteria I used to model the characteristic equation are met (20% overshoot and less than 0.5 sec. rise time)

Why there is such a steady state error ?

if your closed loop transfer function is 1/(s^2 + 3.28s + 12.96), then your steady state gain will be 1/12.96, which is ~0.077. So your response is expected. You need to adjust the DC gain going in!

EDIT:
Also IMO you should almost always implement the state space diagram with your own blocks, as it can give you more insight into state values in simulation should you need them. Note there are exceptions
 
donpacino said:
if your closed loop transfer function is 1/(s^2 + 3.28s + 12.96), then your steady state gain will be 1/12.96, which is ~0.077. So your response is expected. You need to adjust the DC gain going in!

EDIT:
Also IMO you should almost always implement the state space diagram with your own blocks, as it can give you more insight into state values in simulation should you need them. Note there are exceptions

But if I am controlling the system, it should track the reference with the desired criteria. So, what else can I change in the system to get it track the reference ?
 
  • #10
zoom1 said:
But if I am controlling the system, it should track the reference with the desired criteria. So, what else can I change in the system to get it track the reference ?
Full-state feedback allows you to set conditions for the eigenvalues of the closed-loop system matrix ##\mathbf{A} - \mathbf{BK}##, but you have no guarantee of any constraint on the steady-state errors between input and output channels. You'll need a slightly different control structure to handle that.

Try prescaling your input by 12.96 and see if that doesn't give you approximately zero steady-state error to a step input. I can post the design procedure a bit later.

Edit: The prescaler is trivial here since your system is so simple (SISO) - you just have to bring the DC gain up like donpacino mentioned.
 
  • #11
milesyoung said:
Full-state feedback allows you to set conditions for the eigenvalues of the closed-loop system matrix ##\mathbf{A} - \mathbf{BK}##, but you have no guarantee of any constraint on the steady-state errors between input and output channels. You'll need a slightly different control structure to handle that.

Try prescaling your input by 12.96 and see if that doesn't give you approximately zero steady-state error to a step input. I can post the design procedure a bit later.

Oh I see, then this is the trade-off between steady state error and being able to put the poles anywhere you wish as long as the plant is controllable
 
  • #12
zoom1 said:
Oh I see, then this is the trade-off between steady state error and being able to put the poles anywhere you wish as long as the plant is controllable
No, the Wikipedia page is just very light on details. It doesn't show you the control structure or design procedure to introduce a reference input without major shortfalls.
 
  • #14
milesyoung said:
See the first couple of slides 'Reference inputs: Case 1' here:
http://courses.ece.ubc.ca/eece491m/lectures/Lecture12.pdf

for a common method.

Ok, I got it.

I designed an observer over my model which is simply;

x'_head = Ax_head + Bu + L(y-Cx_head)

and used the x_head from the observer's output to multiply with K gain and feed back to the system with negative sign.

It worked perfectly, but now I want to inspect the poles and zeros of the overall system, so I need to find a TF between my refence and output. That was easy with classical methods but with state space matrices I have no idea how to get the TF. Couldn't find any piece of information on the web as well.

Any idea how to do that ?
 
  • #15
zoom1 said:
Ok, I got it.

I designed an observer over my model which is simply;

x'_head = Ax_head + Bu + L(y-Cx_head)

and used the x_head from the observer's output to multiply with K gain and feed back to the system with negative sign.

It worked perfectly, but now I want to inspect the poles and zeros of the overall system, so I need to find a TF between my refence and output. That was easy with classical methods but with state space matrices I have no idea how to get the TF. Couldn't find any piece of information on the web as well.

Any idea how to do that ?
Is the addition of the observer something you actually want?

If your goal was to ensure zero steady-state error to a step input, you could just have used the method shown in 'Case 1' in those slides - that was for full-state feedback, i.e. the control structure you already had in place.
 
  • #16
milesyoung said:
Is the addition of the observer something you actually want?

If your goal was to ensure zero steady-state error to a step input, you could just have used the method shown in 'Case 1' in those slides - that was for full-state feedback, i.e. the control structure you already had in place.

Yes I built the observer intentionally. It's clear that the pre-scaling works as I wished. But I just want to inspect the dynamics of the observer as well. So, that's why I am looking for close loop transformation.
 
  • #17
zoom1 said:
Ok, I got it.

I designed an observer over my model which is simply;

x'_head = Ax_head + Bu + L(y-Cx_head)

and used the x_head from the observer's output to multiply with K gain and feed back to the system with negative sign.

It worked perfectly, but now I want to inspect the poles and zeros of the overall system, so I need to find a TF between my refence and output. That was easy with classical methods but with state space matrices I have no idea how to get the TF. Couldn't find any piece of information on the web as well.

Any idea how to do that ?

You can dump data to the MATLAB workspace and do a bode plot to find the poles & zeros. That's how I've always done it. There may be a better way...
 
  • #18
The sad news is there is no super easy way to do it (in comparison to a TF system in MATLAB where you simply type in poles(sys) ).
If you find a very easy tool to do it with let me know.
 
  • #19
donpacino said:
You can dump data to the MATLAB workspace and do a bode plot to find the poles & zeros. That's how I've always done it. There may be a better way...

How do you do exactly ? You only have the input and output. So, how can you plot the bode ?
And then how do you deduce the poles and zeros from bode plot ?
 
  • #20
zoom1 said:
And then how do you deduce the poles and zeros from bode plot ?
If you are asking for methodology how to approximate TF from Bode, then:
 
  • #21
zoom1 said:
How do you do exactly ? You only have the input and output. So, how can you plot the bode ?
And then how do you deduce the poles and zeros from bode plot ?

to evaluate that the poles and zeros are correct you need to observe the frequency response, as seen in the bode plot, and explained by zoki.

To get the bode plot from a time based simulation environment such as simulink (and a time based environment such as real life!) , you have to realize what the frequency response is. It's the gain (output/input) with respect to frequency. So you simply vary the frequency of the input, look at the STEADY STATE gain, and that's all she wrote.

Now doing that is easier said than done, you can brute force it by simply varying the input and capturing the data, or using an array with various step sizes and multiple models. Then you would export the data to MATLAB to analyze.

That being said the engineers at mathworks are smart and provide you with tools! see below
http://www.mathworks.com/help/slcon...ency-response-using-linear-analysis-tool.html

If you don't have the control systems toolbox, I'm not sure of any easy way to do it other than brute force. If you have to brute force, be smart about the frequencies you pick. Look at the expect bode plot and think about what you need to check
 

Similar threads

  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 4 ·
Replies
4
Views
5K
  • · Replies 31 ·
2
Replies
31
Views
5K
  • · Replies 17 ·
Replies
17
Views
3K
  • · Replies 13 ·
Replies
13
Views
6K
Replies
0
Views
2K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 4 ·
Replies
4
Views
1K
  • · Replies 14 ·
Replies
14
Views
2K
  • · Replies 19 ·
Replies
19
Views
2K