Vehicle Dynamics - Optimization of bump oscillation profile using MATLAB
AIM: To calculate the natural frequencies of the vehicle at different conditions and optimize the bump oscillation profile.
OBJECTIVE:
1. Calculate the following parameters. Use the same front and rear spring rates for all three load conditions.The front sprung mass natural frequency target at half load is 1.15 Hz. Keep this fixed
- Recommended rear sprung mass frequency based on speed and wheelbase at half load condition
- Front sprung mass natural frequency at half load . This will be based on (i).
- Front spring rate
- Rear spring rate
- Front sprung mass natural frequencies at curb and GVW
- Rear sprung mass natural frequencies at curb and GVW
- Front unsprung mass natural frequency at all three load conditions
- Rear unsprung mass natural frequency at all three load conditions
- Rear/Front frequency ratio for all three load conditions
2. Plot the bump oscillation profile for all three load conditions
GIVEN:

Front sprug mass frequency, `f_f=1.15Hz`
SOLUTION:
I. Calculations to determine the required parameters:
1. Recommended rear sprung mass frequency (`f_r`)
Time lag, `t_l`= `(wheelbase)/(speed) = (2700*10^-3)/(60*(0.447))=0.101sec`
`f_r =1/((1/f_f)-t_l)=1/((1/1.15)-0.101)=``1.301Hz`
2. Front sprung mass frequqency, `f_f = 1.15Hz`
3. Front spring rate (`K_(s_f)`)
We know, `f_f = 1/(2pi)sqrt(K_(r_f)/m_(s_f))`
`therefore 1.15 = 1/(2pi)*sqrt(K_(r_f)/456.875`
`=> K_(r_f) = 23.854N/(mm)`
Now, `K_(r_f) = (K_(w_f)*K_(t_f))/(K_(w_f)+K_(t_f))`
`=> K_(r_f) = (K_(r_f)*K_(t_f))/(K_(t_f)-K_(r_f))= (245*23.854)/(245-23.854)=``26.426N/(mm)`
Now, motion ratio
`MR^2= K_w/K_s`
`=> K_(s_f) = K_(w_f)/(MR^2)=26.426/(0.97)^2=28.086N/(mm)`
4. Rear spring rate (`K_(s_r)`)
Using same procedure as above, we determine the rear spring rate and it is found be,
`K_(s_r)= 39.251N/(mm)`
5. Front sprung mass frequency
frequency formula is, `f_(s_f) = 1/(2pi)sqrt(K_(r_f)/m_(s_f)`
(i) At curb, front natural frequency = `1.221Hz`
(ii) At GVW, front natural frequency = `1.128Hz`
6. Rear sprung mass frequency
formula, `f_(s_r) = 1/(2pi)sqrt(K_(r_r)/m_(s_r)`
(i) At curb, rear natural frequency = `1.544Hz`
(ii) At GVW, rear natural frequency = `1.196Hz`
7. Front unsprung mass natural frequency at all three conditions
frequency formula for unsprung mass is, `f_u = 1/(2pi)sqrt((K_w+K_t)/m_u`
The frequency is equal at all three conditions, front natural frequency = `12.361Hz`
8. Rear unsprung mass natural frequency at all three conditions
frequency formula for unsprung mass is, `f_u = 1/(2pi)sqrt((K_w+K_t)/m_u`
The frequency is equal at all three conditions, rear natural frequency = `15.192Hz`
9. Rear/Front frequency ratios
| mass | Curb | Half Load | GVW |
| Sprung Mass | 1.264 | 1.131 | 1.061 |
| Unsprung Mass | 1.229 | 1.229 | 1.229 |
Excel sheet (snapshot):

(drive link for the excel sheet: https://drive.google.com/file/d/1ZCEFlJXVvtHrVT0YBLMW5n7dSwybBHd_/view?usp=sharing )
II. MATLAB code to plot Bump oscillation profile:
The following code calculates the parameters and plots the bump oscillation profiles for all the three conditions.
The snapshots of the output of following code are attached below the code.
Code:
clear all
close all
clc
%% bump oscillation profile at half load
%weights in kg per corner
Ws_front = 456.875;
Ws_rear = 380.625;
Wu_front = 45;
Wu_rear = 30;
WB = 2700; %wheel base in mm
V = 60; %speed of vheicle in mph
%motion ratios
MR_f = 0.97;
MR_r = 0.85;
%time lag in sec
tl = (WB*(10^(-3)))/(60*(0.447));
%recommended natural frequencies at half load
fs_front = 1.15;
fs_rear = 1/((1/fs_front)-tl);
%rates in N/mm
%tire rate (same for all)
kt = 245;
%ride rates
kr_front = (((fs_front*2*pi)^2)*(Ws_front))/1000;
kr_rear = (((fs_rear*2*pi)^2)*(Ws_rear))/1000;
%wheel rates
kw_front = (kt*kr_front)/(kt-kr_front);
kw_rear = (kt*kr_rear)/(kt-kr_rear);
%spring rates
ks_front = kw_front/(MR_f)^2;
ks_rear = kw_rear/(MR_r)^2;
%unsprung mass frequencies
fu_front = (1/(2*pi))*((kw_front+kt)*1000/Wu_front)^0.5;
fu_rear = (1/(2*pi))*((kw_rear+kt)*1000/Wu_rear)^0.5;
%plotting the graphs
%time range in sec
time = linspace(0,3.5,400);
i = 1;
for t = linspace(0,3.5,400)
As_front(i) = exp(-t)*sin(2*pi*fs_front*t);
As_rear(i) = exp(-t)*sin(2*pi*fs_rear*(t-tl));
Au_front(i) = exp(-t)*sin(2*pi*fu_front*t);
Au_rear(i) = exp(-t)*sin(2*pi*fu_rear*(t-tl));
i=i+1;
end
figure(1)
subplot(2,1,1)
plot(time,As_front,'linewidth',2)
hold on
plot(time,As_rear,'linewidth',2)
title('Bump oscillation profile for Sprung mass at half load')
xlabel('Time (s)')
ylabel('Amplitude (m)')
legend('Front','Rear')
grid on
subplot(2,1,2)
plot(time,Au_front,'linewidth',2)
hold on
plot(time,Au_rear,'linewidth',2)
title('Bump oscillation profile for Unsprung mass')
xlabel('Time (s)')
ylabel('Amplitude (m)')
legend('Front','Rear')
grid on
saveas(1,'half_load','jpeg')
%% bump oscillation profile at curb
%weights in kg per corner
Wsc_front = 405;
Wsc_rear = 270;
Wuc_front = 45;
Wuc_rear = 30;
%motion ratios
MR_f = 0.97;
MR_r = 0.85;
%spring rates
ksc_front = ks_front;
ksc_rear = ks_rear;
%wheel rates
kwc_front = ksc_front*(MR_f)^2;
kwc_rear = ksc_rear*(MR_r)^2;
%ride rates
krc_front = (kt*kwc_front)/(kt+kwc_front);
krc_rear = (kt*kwc_rear)/(kt+kwc_rear);
%sprung mass frequencies
fsc_front = (1/(2*pi))*((krc_front*1000)/Wsc_front)^0.5;
fsc_rear = (1/(2*pi))*((krc_rear*1000)/Wsc_rear)^0.5;
%unsprung mass frequencies
fuc_front = (1/(2*pi))*((kwc_front+kt)*1000/Wuc_front)^0.5;
fuc_rear = (1/(2*pi))*((kwc_rear+kt)*1000/Wuc_rear)^0.5;
%plotting the graphs
%time range in sec
time = linspace(0,3.5,400);
j = 1;
for tc = linspace(0,3.5,400)
Asc_front(j) = exp(-tc)*sin(2*pi*fsc_front*tc);
Asc_rear(j) = exp(-tc)*sin(2*pi*fsc_rear*(tc-tl));
Auc_front(j) = exp(-tc)*sin(2*pi*fuc_front*tc);
Auc_rear(j) = exp(-tc)*sin(2*pi*fuc_rear*(tc-tl));
j=j+1;
end
figure(2)
subplot(2,1,1)
plot(time,Asc_front,'linewidth',2,'color','red')
hold on
plot(time,Asc_rear,'linewidth',2,'color','yellow')
title('Bump oscillation profile for Sprung mass at curb')
xlabel('Time (s)')
ylabel('Amplitude (m)')
legend('Front','Rear')
grid on
subplot(2,1,2)
plot(time,Auc_front,'linewidth',2,'color','red')
hold on
plot(time,Auc_rear,'linewidth',2,'color','yellow')
title('Bump oscillation profile for Unsprung mass')
xlabel('Time (s)')
ylabel('Amplitude (m)')
legend('Front','Rear')
grid on
saveas(2,'curb','jpeg')
%% bump oscillation profile at GVW
%weights in kg per corner
Wsg_front = 475;
Wsg_rear = 450;
Wug_front = 45;
Wug_rear = 30;
%motion ratios
MR_f = 0.97;
MR_r = 0.85;
%spring rates
ksg_front = ks_front;
ksg_rear = ks_rear;
%wheel rates
kwg_front = ksg_front*(MR_f)^2;
kwg_rear = ksg_rear*(MR_r)^2;
%ride rates
krg_front = (kt*kwg_front)/(kt+kwg_front);
krg_rear = (kt*kwg_rear)/(kt+kwg_rear);
%sprung mass frequencies
fsg_front = (1/(2*pi))*((krg_front*1000)/Wsg_front)^0.5;
fsg_rear = (1/(2*pi))*((krg_rear*1000)/Wsg_rear)^0.5;
%unsprung mass frequencies
fug_front = (1/(2*pi))*((kwg_front+kt)*1000/Wug_front)^0.5;
fug_rear = (1/(2*pi))*((kwg_rear+kt)*1000/Wug_rear)^0.5;
%plotting the graphs
%time range in sec
time = linspace(0,3.5,400);
k = 1;
for tg = linspace(0,3.5,400)
Asg_front(k) = exp(-tg)*sin(2*pi*fsg_front*tg);
Asg_rear(k) = exp(-tg)*sin(2*pi*fsg_rear*(tg-tl));
Aug_front(k) = exp(-tg)*sin(2*pi*fug_front*tg);
Aug_rear(k) = exp(-tg)*sin(2*pi*fug_rear*(tg-tl));
k=k+1;
end
figure(3)
subplot(2,1,1)
plot(time,Asg_front,'linewidth',2,'color','blue')
hold on
plot(time,Asg_rear,'linewidth',2,'color','green')
title('Bump oscillation profile for Sprung mass at GVW')
xlabel('Time (s)')
ylabel('Amplitude (m)')
legend('Front','Rear')
grid on
subplot(2,1,2)
plot(time,Aug_front,'linewidth',2,'color','blue')
hold on
plot(time,Aug_rear,'linewidth',2,'color','green')
title('Bump oscillation profile for Unsprung mass')
xlabel('Time (s)')
ylabel('Amplitude (m)')
legend('Front','Rear')
grid on
saveas(3,'GVW','jpeg')
(drive link for the code file: https://drive.google.com/file/d/1YS_PDP5v3Bqki6cMTWH4cNLADGI3E8DK/view?usp=sharing )
Output:
1. Half load condition

2. Curb condition

3. GVW condition

CONCLUSION:
1. All the frequencies for all teh three conditions have been determined based on the given data.
2. Bump oscillation profile have been plotted for all three conditions. We can see from the graphs that the front and rear frequencies are almost in phase with each other at half load and GVW conditions, i.e., they are optimized.