Modal analysis of Vibration Data Using FFT

13 views (last 30 days)
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
CapeAeorspace
CapeAeorspace on 15 Jun 2021
@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
Sulaymon Eshkabilov
Sulaymon Eshkabilov on 15 Jun 2021
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.
CapeAeorspace
CapeAeorspace on 15 Jun 2021
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

Find more on Vibration Analysis in Help Center and File Exchange

Products


Release

R2021a

Community Treasure Hunt

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

Start Hunting!