Hello I am using the command 'hinfnorm' to calculate the infinity norm of a descriptor linear system described by a ltisys command... Sometimes, hinfnorm command says that the descriptor linear system has closed-right-half plane poles while when i check the eigen values of that same system by eig(sys_descriptor)... the real part of the all the eigens values are negative. What is going wrong with this. is hinfnorm not reliable? or eig doesn't give eigen values for descriptor system?
Thanks in advance.

4 Comments

Oleg Komarov
Oleg Komarov on 5 Jun 2012
Negative by how much?
by a decent value, i mean may be around -0.369...
secondly, for a SISO system i checked the bode diagram and the peak value is -260dB so the h infinity norm must be very small but the hinfnorm shows it somewhere around 60. which is extremely weird.
Jan
Jan on 8 Jul 2012
Edited: Jan on 8 Jul 2012
This became the ugliest thread in the forum, because necessary information about the problem are distributed to different answers and related comments are posted as further answers. Please follow the layout:
  1. All information, which define the problem, are found in the question.
  2. Clarifications of the problem are added by editing the question. The [EDITED] tag helps to recognize changes.
  3. Answers are posted as answers.
  4. Comments to answers are posted as comments to answers.
  5. Questions for clarifications are posted as comments to the question.
Thanks. The readability of the threads are important for all users.
(This message should not be closed, just cleaned up.)

Sign in to comment.

Answers (17)

Suat Gumussoy
Suat Gumussoy on 14 Jun 2012

1 vote

Could you send me or post your plant that you used for norm computation? I suggest you to use norm(sys,inf,tol) with desired tolerance tol. norm function implements the state-of-the-art numerical methods and it is likely to give reliable answers.

2 Comments

M.Mohsin Siraj
M.Mohsin Siraj on 14 Jun 2012
for example, the system below:
A = [-1 0 0 0; 0 -2 0 0;0 0 -0.4172 -0.07477;0 0 -0.1495 -0.6489];
B = [4;2;3 8.718;7.071];
C = [19 25 -4.166 -2.946]
D = 0 ;
E = [1 0 0 0;0 1 0 0; 0 0 0.4172 0.07477;0 0 0.07477 0.3244];
sys = dss(A,B,C,D,E);
sys_lti = ltisys(A,B,C,D,E);
figure, bode(sys)
hinfnorm(sys_lti)
The bode diagram(equivalent to Sigma in SISO as here) shows that the peak is at extremely low value while the hinfnorm command shows the hinfinity norm to be 69.555.
Isn't is strange?
M.Mohsin Siraj
M.Mohsin Siraj on 14 Jun 2012
it*

Sign in to comment.

Suat Gumussoy
Suat Gumussoy on 14 Jun 2012

1 vote

Some other things... assuming that plant matrices E,A,B,C,D, you can create and ss object by
sys = dss(A,B,C,D,E); and eigenvalues can be computed by pole(sys)
In order to compute eigenvalues of descriptor system, you need to do eig(A,E) since the system is descriptor and don't forget to exclude eigenvalues at infinity since these corresponds to the null space of E.
Suat Gumussoy
Suat Gumussoy on 14 Jun 2012

1 vote

B data has incompatible dimensions.
Suat Gumussoy
Suat Gumussoy on 14 Jun 2012
As I pointed out earlier, svd plot (in this case bode) and norm(sys,inf) are consistent.
>> [f,w]=norm(sys,inf)
f =
0.0086
w =
0
Note that in 2012b, all norm computations are done via getPeakGain function which is the function norm relies on. I'll get back for hinfnorm.
Suat Gumussoy
Suat Gumussoy on 14 Jun 2012

1 vote

Which matlab version do you have?
Suat Gumussoy
Suat Gumussoy on 14 Jun 2012

1 vote

I double checked the computation in your version of MATLAB R2011a, norm(sys,inf) gives 0.0086 at frequency 0 and this is consistent with bode plot. Again getting back to hinfnorm.
Suat Gumussoy
Suat Gumussoy on 14 Jun 2012
About hinfnorm... this function is not implemented to be used with descriptor systems. see line 45 in hinfnorm function
[a,b,c,d] = unpck(sys);
it passes a,b,c,d data not e. In fact, you may not pass e, since it gives an error as
K>> [a,b,c,d,e] = unpck(sys); Error using unpck Too many output arguments.
On the other hand, if you want to compute norm without e,
sys = ss(A,B,C,D); sys_lti = ltisys(A,B,C,D);
they give similar norm norm(sys,inf)
ans =
34.6214
>> hinfnorm(sys_lti,1e-6) norm between 34.6214 and 34.6215 achieved near 0.79022
If you want to use hinfnorm, since your E is not singular, you may write as ss object and then compute norm
sys1=ss(E\A,E\B,C,D); sys_lti1=pck(sys1.A,sys1.B,sys1.C,sys1.D) hinfnorm(sys_lti1,1e-6)
hinfnorm(sys_lti1,1e-6) norm between 0.0086415 and 0.0086415 achieved near 0
which gives similar result as norm(.,inf).
Hope this helps.
Suat Gumussoy
Suat Gumussoy on 14 Jun 2012

1 vote

You're welcome. If you have singular E, I suggest to use dss and create ss object. bode, sigma and norm are defined for descriptor systems. These functions are continuously updated and improved with each release whereas in general hinfnorm is not.
Suat Gumussoy
Suat Gumussoy on 20 Jun 2012

1 vote

Bode, sigma plot and norm commands work for descriptor systems. Assuming system matrices are a,b,c,d,e. Define your descriptor system as sys=dss(a,b,c,d,e) and you can use them as bode(sys), sigma(sys), norm(sys,.).
M.Mohsin Siraj
M.Mohsin Siraj on 14 Jun 2012
for example, the system below:
A = [-1 0 0 0; 0 -2 0 0;0 0 -0.4172 -0.07477;0 0 -0.1495 -0.6489];
B = [4;2;3 8.718;7.071];
C = [19 25 -4.166 -2.946]
D = 0 ;
E = [1 0 0 0;0 1 0 0; 0 0 0.4172 0.07477;0 0 0.07477 0.3244];
sys = dss(A,B,C,D,E);
sys_lti = ltisys(A,B,C,D,E);
figure, bode(sys) ;
hinfnorm(sys_lti)
The bode diagram(equivalent to Sigma in SISO as here) shows that the peak is at extremely low value while the hinfnorm command shows the hinfinity norm to be 69.555. Isn'tsit strange?
M.Mohsin Siraj
M.Mohsin Siraj on 14 Jun 2012
Sorry for the typo...
B = [4; 2; 8.718; 7.071]
That's the correct B.
M.Mohsin Siraj
M.Mohsin Siraj on 14 Jun 2012
the norm command as follows:
norm(sys,inf)
gives the h infinity norm of 3.1974e-014.
M.Mohsin Siraj
M.Mohsin Siraj on 14 Jun 2012

0 votes

I have MATLAB 7.12.0 R2011a.

1 Comment

Jan
Jan on 8 Jul 2012
Please post comments to an answer as a comment, not as an additional answer. Details about your question should be added by editing the original question, such that readers get all required information in one message, not distributed over the question, some answers without a fixed order and some comments.

Sign in to comment.

M.Mohsin Siraj
M.Mohsin Siraj on 14 Jun 2012

0 votes

Thank you so much for your detailed answers.... One thing, are 'bode' or 'sigma' and 'norm' defined for descriptor systems as well? Actually in this particular example, my E is not singular otherwise generally it is singular.
Thanks a lot again.

1 Comment

Suat Gumussoy
Suat Gumussoy on 13 Jul 2012
Yes, they do support descriptor systems.

Sign in to comment.

M.Mohsin Siraj
M.Mohsin Siraj on 15 Jun 2012

0 votes

Thanks, how can i confirm that the bode and sigma plots and norm does consider the descriptor systems? Also I read in one of the User Guide about Control system Toolbox ver 4.2, that dss doesn't support a non singular E but a badly conditioned E (nearer to singularity) can be considered. I can send you the user guide, if required.

2 Comments

Craig
Craig on 15 Jun 2012
See the following release notes: http://www.mathworks.com/help/toolbox/control/rn/f0-82252.html
Release Notes: Version 7.0 (R2006a) Control System Toolbox Software
LTI Objects
Descriptor and Improper State-Space Models Fully Supported
There is now full support for descriptor state-space models with a singular E matrix. This now lets you build state-space representations, such as PID, and manipulate improper models with the superior accuracy of state-space computations. In previous versions, only descriptor models with a nonsingular E matrix were supported.
M.Mohsin Siraj
M.Mohsin Siraj on 15 Jun 2012
Thanks for your answer... Can you kindly further comment on my first question about the use of bode, sigma plot and norm command for descriptor systems? Do they support descriptor systems or they are only designed to work with ordinary state-space realization.

Sign in to comment.

M.Mohsin Siraj
M.Mohsin Siraj on 30 Jun 2012
Thanks for your answer. But now consider the following simple first order descriptor system
a =
x1
x1 0.04178
b =
u1
x1 -4.697
c =
x1
y1 4.166
d =
u1
y1 0
e =
x1
x1 0.03067
sys = dss(0.04178,-4.697,4.166,0,0.03067);
[hinf f] = norm(sys);
ans =
468.3365
it is an unstable system, but the norm command still calculates its h-infinity norm. Isn't it strange?

2 Comments

Suat Gumussoy
Suat Gumussoy on 13 Jul 2012
You're right. It should be called as L-infinity norm since it does not check whether the system is stable. However, when system is stable, L-infinity and H-infinity norms are equal. So user needs to check system stability himself. By the way, what you compute is h2 norm for h-infinity norm, you need
[hinf,f]=norm(sys,inf);
Suat Gumussoy
Suat Gumussoy on 13 Jul 2012
Stability can be easily checked by isstable(sys).

Sign in to comment.

Adipuram
Adipuram 25 minutes ago

0 votes

%% QUESTION 1: PAM - Signal-space representation of two signals
clc; clear; close all;
dt = 0.01;
t = 0:dt:1;
s1 = ones(size(t));
s2 = -ones(size(t));
E1 = sum(s1.^2) * dt;
phi1 = s1 / sqrt(E1);
c11 = sum(s1 .* phi1) * dt;
c21 = sum(s2 .* phi1) * dt;
figure;
subplot(2,2,1); plot(t,s1); grid on; title('Signal 1'); xlabel('Time'); ylabel('s_1(t)');
subplot(2,2,2); plot(t,s2); grid on; title('Signal 2'); xlabel('Time'); ylabel('s_2(t)');
subplot(2,2,3); plot(t,phi1); grid on; title('Basis function'); xlabel('Time'); ylabel('\phi_1(t)');
subplot(2,2,4); stem([c11 c21],[0 0],'filled'); grid on;
title('Signal-space representation of PAM'); xlabel('Basis coordinate'); ylabel('Amplitude');
%% QUESTION 2: PPM - Signal-space representation of two signals
clc; clear; close all;
dt = 0.01;
t1 = 0:dt:1;
t2 = (1+dt):dt:2;
t = [t1 t2];
s1 = [ones(size(t1)) zeros(size(t2))];
s2 = [zeros(size(t1)) ones(size(t2))];
E1 = sum(s1.^2) * dt;
phi1 = s1 / sqrt(E1);
c21 = sum(s2 .* phi1) * dt;
d2 = s2 - c21 .* phi1;
E2 = sum(d2.^2) * dt;
phi2 = d2 / sqrt(E2);
c11 = sum(s1 .* phi1) * dt;
c12 = sum(s1 .* phi2) * dt;
c22 = sum(s2 .* phi2) * dt;
figure;
subplot(2,3,1); plot(t,s1); grid on; title('Signal 1'); xlabel('Time'); ylabel('s_1(t)');
subplot(2,3,2); plot(t,s2); grid on; title('Signal 2'); xlabel('Time'); ylabel('s_2(t)');
subplot(2,3,3); plot(t,phi1); grid on; title('Basis function 1'); xlabel('Time'); ylabel('\phi_1(t)');
subplot(2,3,4); plot(t,phi2); grid on; title('Basis function 2'); xlabel('Time'); ylabel('\phi_2(t)');
subplot(2,3,5); stem([c11 c21],[c12 c22],'filled'); grid on;
title('Signal-space representation of PPM'); xlabel('\phi_1 coordinate'); ylabel('\phi_2 coordinate');
%% QUESTION 3: PAM - Add Gaussian noise and plot received signal-space points
clc; clear; close all;
dt = 0.01;
t = 0:dt:1;
s1 = ones(size(t));
s2 = -ones(size(t));
E1 = sum(s1.^2) * dt;
phi1 = s1 / sqrt(E1);
c11 = sum(s1 .* phi1) * dt;
c21 = sum(s2 .* phi1) * dt;
% Four independent noise realizations, matching the experiment's received signals.
rng('default');
noiseStd = 0.5;
n1 = noiseStd * randn(size(t));
n2 = noiseStd * randn(size(t));
n3 = noiseStd * randn(size(t));
n4 = noiseStd * randn(size(t));
r1 = s1 + n1; r2 = s2 + n1;
r3 = s1 + n2; r4 = s2 + n2;
r5 = s1 + n3; r6 = s2 + n3;
r7 = s1 + n4; r8 = s2 + n4;
received = {r1,r2,r3,r4,r5,r6,r7,r8};
figure;
for k = 1:8
subplot(4,4,k);
plot(t,received{k}); grid on;
title(sprintf('Received signal r_%d(t)',k)); xlabel('Time'); ylabel('Amplitude');
end
coords = zeros(1,8);
for k = 1:8
coords(k) = sum(received{k} .* phi1) * dt;
end
subplot(4,4,9:16);
stem(coords,zeros(size(coords)),'filled'); grid on;
title('Signal-space representation of received PAM signals');
xlabel('Projection on \phi_1'); ylabel('Orthogonal coordinate (0)');
%% QUESTION 4: PPM - Add Gaussian noise and plot received signal-space points
clc; clear; close all;
dt = 0.01;
t1 = 0:dt:1;
t2 = (1+dt):dt:2;
t = [t1 t2];
s1 = [ones(size(t1)) zeros(size(t2))];
s2 = [zeros(size(t1)) ones(size(t2))];
E1 = sum(s1.^2) * dt;
phi1 = s1 / sqrt(E1);
c21 = sum(s2 .* phi1) * dt;
d2 = s2 - c21 .* phi1;
E2 = sum(d2.^2) * dt;
phi2 = d2 / sqrt(E2);
rng('default');
noiseStd = 0.5;
received = cell(1,8);
for k = 1:4
n = noiseStd * randn(size(t));
received{2*k-1} = s1 + n;
received{2*k} = s2 + n;
end
figure;
for k = 1:8
subplot(4,4,k);
plot(t,received{k}); grid on;
title(sprintf('Received signal r_%d(t)',k)); xlabel('Time'); ylabel('Amplitude');
end
xCoord = zeros(1,8); yCoord = zeros(1,8);
for k = 1:8
xCoord(k) = sum(received{k} .* phi1) * dt;
yCoord(k) = sum(received{k} .* phi2) * dt;
end
subplot(4,4,9:16);
stem(xCoord,yCoord,'filled'); grid on;
title('Signal-space representation of received PPM signals');
xlabel('Projection on \phi_1'); ylabel('Projection on \phi_2');
%% QUESTION 5: PAM - Matched-filter demodulation
clc; clear; close all;
dt = 0.01;
t = 0:dt:1;
s1 = ones(size(t));
s2 = -ones(size(t));
E1 = sum(s1.^2) * dt;
phi1 = s1 / sqrt(E1);
% Matched-filter impulse responses are time-reversed versions of the signals.
h1 = fliplr(phi1);
h2 = fliplr(-phi1);
R = {s1,s2,s1,s2,s1,s2,s1,s2};
figure;
for k = 1:numel(R)
r = R{k};
y1 = conv(r,h1) * dt;
y2 = conv(r,h2) * dt;
[~,i1] = max(y1);
[~,i2] = max(y2);
subplot(4,2,k);
plot((0:numel(y1)-1)*dt,y1,'b'); hold on;
plot((0:numel(y2)-1)*dt,y2,'r'); grid on;
plot((i1-1)*dt,y1(i1),'bo','MarkerFaceColor','b');
plot((i2-1)*dt,y2(i2),'ro','MarkerFaceColor','r');
title(sprintf('Matched-filter output - r_%d',k));
xlabel('Time'); ylabel('Output');
legend('Filter for s_1','Filter for s_2','Location','best');
end
%% QUESTION 6: PPM - Matched-filter demodulation
clc; clear; close all;
dt = 0.01;
t1 = 0:dt:1;
t2 = (1+dt):dt:2;
t = [t1 t2];
s1 = [ones(size(t1)) zeros(size(t2))];
s2 = [zeros(size(t1)) ones(size(t2))];
h1 = fliplr(s1);
h2 = fliplr(s2);
% Use four pairs of received signals with independent additive Gaussian noise.
rng('default');
noiseStd = 0.25;
figure;
for k = 1:4
n = noiseStd * randn(size(t));
if mod(k,2)==1
r = s1 + n;
transmitted = 1;
else
r = s2 + n;
transmitted = 2;
end
y1 = conv(r,h1) * dt;
y2 = conv(r,h2) * dt;
[~,i1] = max(y1);
[~,i2] = max(y2);
decision = 1;
if y2(i2) > y1(i1)
decision = 2;
end
subplot(4,2,2*k-1);
plot(t,r); grid on; title(sprintf('Received PPM signal %d',k));
xlabel('Time'); ylabel('Amplitude');
subplot(4,2,2*k);
plot((0:numel(y1)-1)*dt,y1,'b'); hold on;
plot((0:numel(y2)-1)*dt,y2,'r'); grid on;
title(sprintf('Matched-filter output %d (decision s_%d)',k,decision));
xlabel('Time'); ylabel('Output');
legend('Filter for s_1','Filter for s_2','Location','best');
end

This question is closed.

Asked:

on 4 Jun 2012

Answered:

about 19 hours ago

Community Treasure Hunt

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

Start Hunting!