function [opoles] = ... chooseObserverPoles(A, B, C, Tso, poleMethod, fullOrder, mStates) addpath('digcontr'); addpath('ele503'); load('sroots.mat'); [n, p] = size(B); fprintf('Choosing observer poles... '); if fullOrder fprintf('Full order Observer... '); switch poleMethod case PoleMethod.Bessel fprintf('Using Bessel poles\n'); opoles = get_spoles(n)/Tso; case PoleMethod.PlantZeros fprintf('Using plant zeros\n'); plant = ss(A, B, C, zeros(p)); plantZeros = tzero(plant); fprintf('Found %d plant zeros\n', length(plantZeros)) opoles = []; if isempty(plantZeros) == false for zero = plantZeros' opoles = [opoles zero]; end % Fill in the rest with bessel poles opoles = [opoles get_spoles(n - length(plantZeros))/Tso]; else if n == 6 fprintf('Using Bessel s1 s2 s3\n'); opoles = [s1/Tso s2/Tso s3/Tso]; elseif n == 9 fprintf('Using Bessel s2 s3 s4\n'); opoles = [s2/Tso s3/Tso s4/Tso]; end end end else fprintf('Reduced order observer... '); fprintf('Using Bessel poles\n'); opoles = get_spoles(nStates-mStates)/Tso; end