Transfer function of higher order
3 次查看(过去 30 天)
显示 更早的评论
Dear all,
I need to input a transfer function of the form shown below:
G(s) = 1/{((s+1)^10)*((s+3)^10)}
I have two questions:
1)- I am using conv command in a for loop to generate (s+1)^10, the most interesting thing that i observe that the roots of the polynomial that i obtain is NOT 1 with algebraic multiplicity of 10. Even if you go for (s+1)^3 or (s+1)^4, the roots won't be three times or four times 1 but somewhere near to 1 (not exactly 1). WHY IT IS SO?
2)- Surprisingly, the system G, when converted to ss form using tf2ss, the state-space realization is not minimal. BUT how on earth this is possible? there is no zero in G, where the pole zero cancellation is occurring so that the G is not controllable or observable?
Thanks in advance.
1 个评论
Azzi Abdelmalek
2012-8-1
编辑:Azzi Abdelmalek
2012-8-1
when matlab resolves roots of your polynom, it uses a numerical method, that means there will be some errors calculations. so, where is the problem? i checked that the system is not controllable, i think it's the representation tf2ss is not adequate.
回答(2 个)
Azzi Abdelmalek
2012-8-1
编辑:Azzi Abdelmalek
2012-8-1
% to generate use poly without loop instead conv:
N=1 % numerator
D=poly([ones(1,10)*(-1) ones(1,10)*(-3)]) % -1 and -3 are your poles
[A,b,c,d]=tfn2ss(N,D) % my function to find another ss representation (see below)
%then check your controllabilité
% the function ft2re
function [F,h,c,d]=tfn2ss(N,D)
if nargin==1;D=N;N=1;end
D1=D(2:end);n=length(D1);m=length(N);
if m==n;N1=N;else N1=[zeros(1,n-m) N];end
F=[-D1' [eye(n-1) ; zeros(1,n-1)]];h=N1'; c=[1 zeros(1,n-1)];d=0;
% for more details about this function
2 个评论
Azzi Abdelmalek
2012-8-1
编辑:Azzi Abdelmalek
2012-8-1
you are right, the controllabilite is ok; but not the obs. the problem is numeric
Azzi Abdelmalek
2012-8-1
编辑:Azzi Abdelmalek
2012-8-1
%we now both that your system is observable and controllable , then the problem is numeric, i suggest that you multiply your denominator by 0.0001
D=D*0.0001
% after when you calculate your observator or controller, you have to take into account that your output signal is multiplied by (1/0.0001)
% i advise you also to use my function tfn2ss, i tried it and it works. it did'nt work with tf2ss (it just works for controllability)
3 个评论
Azzi Abdelmalek
2012-8-1
编辑:Azzi Abdelmalek
2012-9-12
what I suggested is not to replace D with 0.0001 * D when you simulate your system. It's just to calculate your observator, once the calcus finished, you change just the loi of your observator or controller.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Dynamic System Models 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!