The transfer function of a small position Sensor

8 views (last 30 days)
GHADAH AL-OBAIDI on 28 Sep 2021
Commented: Star Strider on 4 Oct 2021
I have the below matlab code and I would like to find :
1. First Order Fit: try (polyfit), Find the Matlab function for fitting: P = WHAT_FUNCTION(WHAT TO FIT as what is x, WHAT TO FIT as what is y, ORDER); Force_Nm_Linear = P(1) * Displacement_d_mm + P(2);
2. Second Order Fit, same as above: what is x, y, ORDER P = WHAT_FUNCTION(WHAT TO FIT, WHAT TO FIT, ORDER); Force_Nm_2nd_Order = P(3) + P(2)*Displacement_d_mm + P(1)*Displacement_d_mm.*Displacement_d_mm;
Note: we have to set some of the coefficients to = 0 to check if it can be ignored:
P(3) = 0;
Force_Nm_2nd_two_Terms = P(3) + P(2)*Displacement_d_mm + P(1)*Displacement_d_mm.*Displacement_d_mm;
My Matlab code is::::::::::::::::
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all;
close all;
clc;
Displacement_d_mm = [0, 0.08, 0.16, 0.24, 0.32, 0.4, 0.48, 0.52];
Force_Nm = [0, 0.578, 1.147, 1.677, 2.187, 2.648, 3.089, 3.295];
% Part A: First Order Fit:
% In this case, x is the displacement and y is the force.
% where d is the displacement and F the force
P = polyfit(Displacement_d_mm, Force_Nm, 1);
Force_Nm_Linear = P(1) * Displacement_d_mm + P(2); % F = 6.3221d + 0.089
% Part B:
Displacement_d_mm_b = [0, 0.32, 0.52];
Force_Nm_b = [0, 2.187, 3.295];
% Second Order Fit:
P = polyfit(Displacement_d_mm, Force_Nm, 2);
Force_Nm_2nd_Order = P(3) + P(2)*Displacement_d_mm + P(1)*Displacement_d_mm.*Displacement_d_mm;

Star Strider on 28 Sep 2021
If you actually want the transfer function, use the System Identification Toolbox functions —
Displacement_d_mm = [0, 0.08, 0.16, 0.24, 0.32, 0.4, 0.48, 0.52] % Output 'y(t)'
Displacement_d_mm = 1×8
0 0.0800 0.1600 0.2400 0.3200 0.4000 0.4800 0.5200
Force_Nm = [0, 0.578, 1.147, 1.677, 2.187, 2.648, 3.089, 3.295] % Input 'u(t)'
Force_Nm = 1×8
0 0.5780 1.1470 1.6770 2.1870 2.6480 3.0890 3.2950
Ts = 1; % Sampling Interval (Replace With Actual Value)
idd = iddata(Displacement_d_mm(:), Force_Nm(:), Ts)
idd = Time domain data set with 8 samples. Sample time: 1 seconds Outputs Unit (if specified) y1 Inputs Unit (if specified) u1
ff_sys = tfest(idd,1)
ff_sys = From input "u1" to output "y1": 5.26 --------- s + 29.14 Continuous-time identified transfer function. Parameterization: Number of poles: 1 Number of zeros: 0 Number of free coefficients: 2 Use "tfdata", "getpvec", "getcov" for parameters and their uncertainties. Status: Estimated using TFEST on time domain data "idd". Fit to estimation data: 77.7% FPE: 0.00339, MSE: 0.001541
figure
compare(idd, ff_sys)
Experiment to get different results.
.
Star Strider on 4 Oct 2021
As always, my pleasure!
.

Categories

Find more on Least Squares 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!

Translated by