How to Add Poles and Zeros on specific Frequencies while Estimating Transfer Function Using MATLAB (idfrd, tfest)

6 visualizaciones (últimos 30 días)
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))
Ts = 1.2500e-05
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')
sysfr = IDFRD model. Contains Frequency Response Data for 1 output(s) and 1 input(s). Response data is available at 1001 frequency points, ranging from 100 Hz to 3e+04 Hz. Sample time: 1.25e-05 seconds Status: Created by direct construction or transformation. Not estimated.
%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)

Respuestas (0)

Community Treasure Hunt

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

Start Hunting!

Translated by