Interpreting Phase Bode Plot from Empirical Transfer Function
이전 댓글 표시
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).
채택된 답변
추가 답변 (0개)
카테고리
도움말 센터 및 File Exchange에서 Pulse and Transition Metrics에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


