How to Add Poles and Zeros on specific Frequencies while Estimating Transfer Function Using MATLAB (idfrd, tfest)
6 views (last 30 days)
Show older comments
Hello Respected Community Members,
I used MATLAB's idfrd, tfest tool to estimate the transfer function of my AFM Plant (PZT Actuator and Leaf Spring) using experimental data in the frequency domain; a picture of the Bode Plot (Estimated Transfer Function) is attached. The accuracy of my predicted transfer function is 88.46%.
I began at tfsys = tfest(sysfr, 1,1) and finished at tfest(sysfr,31,31).
I am happy with the higher order transfer function, but I want to add poles or zeros to the areas that are circled in the attached image since I am worried about low frequencies. How to add poles and zeros to/on these specific regions?
I've included my MATLAB code and CSV file with this query.
I'd also need advice from experts on how I could make my transfer function more precise using another estimation method or non-linear MATLAB techniques.
T1 = readtable('E2I_CSV.csv');
% Fill With Actual Sampling Frequency
FHz = T1.F;
Ts = 1/(2*(max(FHz)+10000))
for k = 1:size(T1,1)-1
if FHz(k+1) == FHz(k)
FHz(k+1) = FHz(k+1)+0.5; % 'Brute Force' Interpolation
end
end
Mag = T1.G;
PhDeg = T1.P;
Response = Mag.*exp(1j*deg2rad(PhDeg)); % Complex Vector
sysfr = idfrd(Response, FHz, Ts, 'FrequencyUnit','Hz')
%bode(sysfr);
tfsys = tfest(sysfr,31,31); %88.46%
%tfsys = tfest(sysfr,32,31); %87.67%
%tfsys = tfest(sysfr,30,30); %87.65%
%tfsys = tfest(sysfr,20,19); %84.65%
%tfsys = tfest(sysfr,16,15); %82.55
%tfsys = tfest(sysfr,14,13); %81.36
%tfsys = tfest(sysfr,12,11); %79.27
%tfsys = tfest(sysfr,10,9); %77.2%
%tfsys = tfest(sysfr,9,8); %75.85%
%tfsys = tfest(sysfr,5); %97.77 accurate
figure
compare(sysfr, tfsys)
% get(sysfr)
0 Comments
Answers (0)
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!