Estimating a second order transfer function for a over damped second order system.
101 views (last 30 days)
Show older comments
I have been tasked with estimating a second order transfer function for a set of data given that has been given to me. The form of this transfer function is;
G(S) = (k * w^2) / (s^2 + 2Cws + w^2)
where k is the steady state gain, w is the undamped natural frequency and C is the dampening ratio.
I have previously used the tfest function to estimate a first order transfer function which seems to be correct, but I am unsure how to create the second order transfer function in the overdamped shape that I need.
Im not looking for the complete answer as I still want to solve the problem myself, but if anybody could suggest some points where I may be going wrong that would be appreciated.
1 Comment
Mathieu NOE
on 23 Nov 2020
hello
so If you were successfull on a first order system, what blocks you for a second order system ?
in my 2020b release the function for transfer estimate is : tfestimate
have you time domain data and already computed the complex transfer function Txy = tfestimate(X,Y) ?
all the best
Answers (3)
Nagasai Bharat
on 25 Nov 2020
Hi,
In order to do an estimate of a second order transfer function the tfest function can be used with suitable arguments of np,nz (number of poles and zeros in the transfer funcition) along with the data you have.
PS: tfestimate is a function in the signal processing toolbox which does the similar tasks as tfest in the system identification toolbox
3 Comments
Mathieu NOE
on 29 Nov 2020
well
could you share your data and your code and explain why you expect to identify an overdamped system ?
Paul
on 29 Nov 2020
I haven't yet tried this myself, but in the System Identification Toolbox idproc looks like it will allow you to specify a second order model with two real poles and procest is the function to estimate the model parameters
doc idproc
doc procest
0 Comments
Mathieu NOE
on 30 Nov 2020
so this is the poor's man (no ID toolbox ) , frequency domain ID
it may help you
all the best
clc,close,clear;
File1 = fopen('Set9_1.txt');
Set9_1 = fscanf(File1,'%f',200);
dt = 1;
T = 1:dt:200;
step_resp = Set9_1;
% Actuator_Exp = plot(T,step_resp,'r');
% convert to impulse response = time derivative of step response
imp_resp = [diff(step_resp)./dt; 0];
% frequency response function (impulse response = FIR filter)
Fs = 1/dt;
freq = logspace(-3,log10(Fs/3),100);
b = imp_resp';
a = [1 zeros(1,length(imp_resp)-1)];
[g,p] = dbode(b,a,dt,2*pi*freq);
p = p-p(1); % phase must start at zero
% from there we can compute all transfer function parameters
static_gain = g(1);
% at cut off frequency (fc) : transfer function phase is - 90°
fc = interp1(p,freq,-90); % fc = 0.0555 Hz
wc = 2*pi*fc;
% search for the Q factor : Q is the amplitude of the normalized (modulus = 1 at f = 0 Hz)
% transfer function at f = fc
mod_at_fc = interp1(freq,g,fc);
Q = mod_at_fc/(static_gain); % Q = 0.61
% let's compare the model frequency response function with the identified model
num = [0 0 static_gain];
den = [1/wc^2 1/(wc*Q) 1];
[g_id,p_id] = bode(num,den,2*pi*freq);
figure(2),
subplot(2,1,1),loglog(freq,g,'b',freq,g_id,'r');grid
title('Sys TF');
ylabel('magnitude')
legend('measure','model')
subplot(2,1,2),semilogx(freq,p,'b',freq,p_id,'r');grid
ylabel('phase (°)')
xlabel('Frequency (Hz)')
legend('measure','model')
axis([min(freq) max(freq) -360 0]);
% step response of identified model
sr_id = step(num,den,T);
figure(3),
plot(T,step_resp,'b',T,sr_id,'r');grid
title('Sys step response');
legend('measure','model')
See Also
Categories
Find more on Transfer Function Models in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!