Clear Filters
Clear Filters

I'm trying to perform Frequency domain analysis using Bode plot for a 2-DOF Quarter car system, but I'm encountering some issues

11 views (last 30 days)
The Quarter model is implemented in a 2-DOF system, where the suspension's damping coefficient, C, is varied by each control logic to improve ride comfort. The input data is determined by ISO 8608 for road roughness, and I'm trying to plot its Bode plot. However, the output data looks like this, and the Bode plot looks like this. Could you tell me what the problem might be?
deflection_FFT = squeeze(out.deflection_FFT.data);
deflection_fft = fft(deflection_FFT);
passive_car_fft = fft(passive_car_acceleration_data);
skyhook_car_fft = fft(skyhook_car_acceleration_data);
ADD_car_fft = fft(ADD_car_acceleration_data);
mix_car_fft = fft(mix_car_acceleration_data);
Fs = 200;
N = length(deflection_fft);
f = (0:N-1)*(Fs/N);
figure;
% Passive Car
subplot(1, 1, 1);
semilogx(f, 20*log10(abs(passive_car_fft./deflection_fft)), 'b-');
hold on;
% Skyhook Car
semilogx(f, 20*log10(abs(skyhook_car_fft./deflection_fft)), 'r-');
% ADD Car
semilogx(f, 20*log10(abs(ADD_car_fft./deflection_fft)), 'g-');
% Mix Car
semilogx(f, 20*log10(abs(mix_car_fft./deflection_fft)), 'k-');
hold off;
title('Bode Plot of Car Systems');
xlabel('Frequency (Hz)');
ylabel('Magnitude (dB)');
legend('Passive Car', 'Skyhook Car', 'ADD Car', 'Mix Car','Location','best');
grid on;

Answers (1)

Balavignesh
Balavignesh on 21 May 2024
Hi 진서,
I would require the data you used to exactly reproduce the issue on my end. However, your approach to analyze the frequency response of a 2-DOF Quarter car system using Bode plots is fundamentally correct. But there are a few issues that might lead to unexpected results or make the Bode plot look incorrect.
Here are some potential reasons that causes the discrepancy :
  • Nyquist Frequency and Aliasing : Ensure that your sampling frequency 'Fs' is sufficiently high relative to the highest frequency component of your signal to satisfy the Nyquist criterion. If your 'Fs' is too low, consider increasing it or applying a low-pass filter before sampling.
  • Windowing : Applying a window function to your time-domain signals before performing the 'FFT' can reduce spectral leakage and improve the clarity of the Bode plot. This is especially useful if the signal is not periodic within the chosen FFT window.
  • Division by Zero or Small Numbers : When dividing by 'deflection_fft' to obtain the transfer function, ensure that 'deflection_fft' does not contain zeros or very small numbers that could lead to division by zero or inflate the magnitude unrealistically due to numerical errors. Applying a small threshold or using regularization can mitigate this. You could implement something similar to this :
epsilon = 1e-6; % Small number to prevent division by zero
deflection_fft_magnitude = abs(deflection_fft);
deflection_fft_magnitude(deflection_fft_magnitude < epsilon) = epsilon; % Regularize small values
% Then use deflection_fft_magnitude for division in your semilogx calls
If even after addressing these considerations, the Bode plot still looks incorrect, consider isolating each step of the process (e.g., inspect the FFT of input and output signals separately, check the time-domain signals) to ensure that each part is behaving as expected. This methodical approach can help identify where the issue might be arising.
Kindly have a look at the following documentation links to have more information on:
Hope that sheds some light on the matter.
Balavignesh

Products


Release

R2024a

Community Treasure Hunt

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

Start Hunting!