Spectral factorization of polynomial x(s)

9 views (last 30 days)
As a part of the algorithm that is used for Optimal robust stabilization I have to find stable polynomial such that:
Where and are numerator and denominator of a transfer function , and .
I have managed to find and by using:
s = tf('s');
% input of transfer function
transfer_function = input("Input the transfer function: ")
%ex: 1/s^3
[b,a] = tfdata(transfer_function);
arrayB = cell2mat(b);
arrayA = cell2mat(a);
syms s;
b = poly2sym(arrayB,s);
a = poly2sym(arrayA,s);
% b(-s) and a(-s)
minus_b = subs(b,s,-s);
minus_a = subs(a,s,-s);
expression = a*minus_a+b*minus_b;
But I am having trouble finding and .
I have tried using spectral factorization with the function spectralfact(), but it does not seem to work. Can you give me any tips on how to procede from here?

Accepted Answer

Torsten
Torsten on 15 May 2022
Edited: Torsten on 15 May 2022
Let
a(s)*a(-s)+b(s)*b(-s) = p0 + p1*s + ... + p2n*s^(2*n)
Determine the roots of
a(s)*a(-s) + b(s)*b(-s)
The 2*n roots appear in pairs
s1,-s1,s2,-s2,...,sn,-sn
Take
s1,s2,...,sn
and build the polynomial
d(s)=a*(s-s1)*(s-s2)*...*(s-sn)
with a constant "a" to be determined.
Then
d(s)*d(-s) = a^2*(-1)^n*(s+s1)*(s+s2)*...*(s+sn)*(s-s1)*(s-s2)*...*(s-sn)
This means that
a(s)*a(-s) + b(s)*b(-s) = d(s)*d(-s)
if
p2n = a^2*(-1)^n
thus
a = sqrt(p2n/(-1)^n)
I leave it to you to implement this in MATLAB.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!