Interpreting Phase Bode Plot from Empirical Transfer Function
Show older comments
I have an experiment where a vehicle body is supported and a freely hanging wheel with an added known imbalance mass on the tire. The tire is driven up to 40 mph and allowed to spin down from there or held at a constant speed depending on the test. This system is treated as a mass-spring damper where the input to the system is the vertical component of the known imbalance mass's centrifugal force calculated as
Taking the fourier-transform of the measured raw wheel acceleration in the vertical direction,
, and the calculated vertical force,
, then creating an empirical transfer function,
, yields a magnitude plot which consistently matches a "theoretical" bode plot made using nominal vehicle suspension values and the tf() function from the following transfer function.
, and the calculated vertical force,
, yields a magnitude plot which consistently matches a "theoretical" bode plot made using nominal vehicle suspension values and the tf() function from the following transfer function.The phase plot of this empirical transfer function is obtained using the following code :
Fs = 5000;
L = length(t);
xfft = Fs*(0:(L/2))/L;
% Calculate FFT for measured acceleration
ff_a_z = fft(a_z);
a_z_ff = ff_a_z/L;
a_z_ff_p1 = a_z_ff(1:L/2+1);
a_z_ff_p1(2:end-1) = 2*a_z_ff_p1(2:end-1);
% Calculate FFT for calculated force
ff_F_t = fft(F_t);
F_t_ff = ff_F_t/L;
F_t_ff_p1 = F_t_ff(1:L/2+1);
F_t_ff_p1(2:end-1) = 2*F_t_ff_p1(2:end-1);
% Empirical Transfer Function
G = a_z_ff_p1./F_t_ff_p1';
%Get phase of TF in degrees
figure
G_ang = unwrap(angle(G))*180/pi;
semilogx(xfft*2*pi, G_ang)
hold on
%semilogx(wout, phase)
legend(["Empirical TF", "Theoretical TF"])

The empirical phase of
consistently takes this shape with 2 peaks but with the peaks varying up to 600 degrees. This does not take the 2nd overdamped phase form that I was expecting to see. I am aware that the empirical transfer function will not be accurate at frequencies that the system has not been excited in, but in the range of interest, 10 to 52 rad/s, there is significant excitation. I noticed that the individual phases of the vertical acceleration and force are every large, but they grow larger together and somewhat "cancel" eachother out.

That being said, because I am dividing a complex number by a complex number in
, then the following is also true:

Trying this method shows a much more "consistent" phase of
but only after "rewrapping" the phase so it lies within a reasonable range
% Phase of individual F(s) and A_z(s) spectra
F_t_ang = unwrap(angle(F_t_ff_p1))*180/pi;
a_z_ang = unwrap(angle(a_z_ff_p1))*180/pi;
% Pure Difference
G_ang2 = a_z_ang - F_t_ang';
% With "Rewrapping"
G_diff = mod(((a_z_ang - F_t_ang') + 180), 360) - 180;

And a zoomed in view:

Questions:
- Why does my phase consistently show a ~-150 degree phase angle after "rewrapping". I'm expecting a positive angle between 180 and 0?
- Is it appropriate for me to "rewrap" it as I have it here?
- Will any non-linearities have a large consistent affect on the phase plot of this system?
- Is this indicative that the system order is more complex then a mass-spring-damper?
- Can I use knowledge of my system order (i.e. 2 zeros @ 0 Hz and 2 poles) to try and manipulate this phase diagram to make more sense?
The code I'm using was "validated" against a simulated model of the mass-spring-damper using an integrator and the empirical and theoretical magnitude and phase bode plots matched almost perfectly (as expected from a perfectly linear system).
Accepted Answer
More Answers (0)
Categories
Find more on Pulse and Transition Metrics 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!

