Modal analysis of Vibration Data Using FFT

Hi,
I have gathered vibration data from an accelerometer attached to a housing with a spinning disk on the inside. I would like to find at what frequency the housing and disk assembly has a mode using fft analysis.
I have smoothed the data for the X-axis and will only be using that data for the FFT. The data gathered is time dependant and sampled at 150Hz. The disk is slowly ramped up to 6000rpm independant of the accelerometer sampling period.The accelerometer data clearly shows that there are larger vibrations at different speeds, however I am not able to see this on the FFT ?
Please may you help me get the FFT to display modes in a clear format.
wheels = [2067];
% FFT = 0;
FFT = 1;
SaveFile = 0;
% SaveFile = 1;
for x = 1:length(wheels)
wheel = wheels(x)
fname = [int2str(wheel) '.txt']
%fname = '2273_old.txt'
%original = strcat('Original_',fname)
%copyfile(original, fname)
commaReplace(fname)
T = readtable(fname,'Delimiter','tab');
T = table2cell(T);
L = length(T(:,1));
Gyro_x = T(:,1);
Gyro_y = T(:,2);
Gyro_z = T(:,3);
Accel_x = T(:,4);
Accel_y = T(:,5);
Accel_z = T(:,6);
Mag_x = T(:,7);
Mag_y = T(:,8);
Mag_z = T(:,9);
Temp_x = T(:,10);
Temp_y = T(:,11);
Temp_z = T(:,12);
for x= 1:L
Accel_X(x) = Accel_x{x,1};
Accel_Y(x) = Accel_y{x,1};
Accel_Z(x) = Accel_z{x,1};
end
bound = find(Accel_Z>1.02);
start = bound(1)
Xo = Accel_X;
Yo = Accel_Y;
Zo = Accel_Z;
%% Averaging of data
sample = 300;
coeff = ones(1, sample)/sample;
%cmddenoise
sigden = cmddenoise(Accel_X,'db1',6);
Accel_X = sigden;
figure(3)
plot(sigden);
%%
figure(2)
subplot(3,1,1)
plot(Accel_X)
hold on
plot(sampleX);
hold off
hold on
%plot(Accel_Y)
title(["X-Axis Vibration"])
subplot(3,1,2)
plot(Accel_Y)
hold on
title(["Y-Axis Vibration"])
subplot(3,1,3)
plot(Accel_Z)
hold on
title(["Z-Axis Vibration"])
%%
if FFT == 1
Fs = 150; %Hz
T_step = 1/Fs;
time = [0:T_step:(length(Accel_X)-1)*T_step];
time = time';
accel_data = [Accel_X' Accel_Y' Accel_Z'];
Fn = Fs/2; % Nyquist Frequency
LF = length(Accel_X);
Tr = linspace(0,1,LF)*T_step; % Create Time Vector
% Dr = resample(accel_data(:,1), Tr); % Resample To Constant Sampling Interval
% Dr = accel_data(:,1:end); % IMU samples at constant 150 hz
Dr = accel_data(:,1);
Dr_mc = Dr - mean(Dr); % Subtract Mean
FDr_mc = fft(Dr_mc)/LF; % Fourier Transform
Fv = linspace(0, 1, fix(numel(FDr_mc)/2)+1)*Fn; % Frequency Vector
% Fv = linspace(0, 1, fix(size(FDr_mc,1)/2)+1)*Fn; % Frequency Vector
Iv = 1:numel(Fv); % Index Vector
figure()
plot(Fv, abs(FDr_mc(Iv))*2)
grid
hl = legend('X-Axis','Y-Axis','Z-Axis');
title(hl, 'Axis')
xlabel('Frequency (Hz)')
ylabel('Amplitude')
title(['FFT of CubeWheel CW' int2str(wheel)])
if SaveFile == 1
saveas(gcf,['CW' int2str(wheel) '_FFT'],'png')
close all
else
pause
end
end
end

1 Comment

@Star Strider I have been following multiple of your answers to try and get this correct. Thank you for the in depth coverage on multiple topics.

Sign in to comment.

Answers (1)

Sulaymon Eshkabilov
Sulaymon Eshkabilov on 15 Jun 2021
Edited: Sulaymon Eshkabilov on 15 Jun 2021
In FFT based freq response analysis, 150Hz sampling isn't appropriate for your data (6000 rpm = 100 Hz data). You should have collected your data at or beyond 1000 Hz sampling rate that would have given you am adequate signal resolution in your computed FFT data. This is most crucial initial observation.
Your code for FFT calcs seems to be ok.

3 Comments

Thank you for the prompt response. I agree that the sampling rate is inadequate for speeds up to 6000rpm but unfortunately currently this is the only sensor we have. That being said surely I should still be able to get a valid fft from the vibration data ?
The calculations are based purely on the accelerometer readings and its sampling period. If we assume we do not want to correlate the speed to the vibration data but merely use different speeds to make different vibrations, should the fft not show spikes at certain frequencies as we can see larger amplitudes in acceleration at certain time intervals in the data ?
I've analyzed one set of X-axis acceleration data and see that you have a significant aliasing problem with your measured data. Thus, I don't think you can get any feasible FFT analysis with your data. Sorry for that. You need to perform your measurement at lower rpm of your system at least to grasp lower frequencies around 10 .. 25 Hz. Once you get your new data, then I can have a look at for once more.
Note that lower frequency rpm means you can run your system at low rpm values, e.g. 2000 rpm. Make sure to run the system at one consistent rpm for some time while collecting the data and then move to the next rpm value.
Your code's FFT part has some flaws but they are not the cause of a bad FFT analysis.
Good luck.
Thank you for your response and willingness to help in the future. I will gather data for step speeds at set RPM instead of a ramp input.
Many thanks

Sign in to comment.

Categories

Products

Release

R2021a

Asked:

on 15 Jun 2021

Commented:

on 15 Jun 2021

Community Treasure Hunt

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

Start Hunting!