# FFT of accelerometer signal: How to get a correct amplitude & noise reduction

I’m a student studying on vibration analysis & testing. I’ve performed low level sine sweep test of a simple rectangular PCB with clamped boundary conditions on two ends of it. That test was performed with an amplitude of 0.5 g (g=9.8m/s^2) and a frequency range was from 20 to 500Hz).

From the accelerometer attached at the center of the PCB, I obtained following time profile (Sampling frequency: Approx. 1600 Hz) (see Fig. 1).

Then, I’ve created this MATLAB code to perform the FFT, to find amplitudes at 1st and 2nd eigenfrequencies of the tested PCB.

==========================================================================

clear all; close all; clc;

t=acc(:,1);             % input t (time) data
x=acc(:,2);             % input x (magnitude) data

dt=(t(2)-t(1));         % sampling frequency
fs=1/dt;
L=length(t);            % time data length

X=fft(x,L)/L;           % fft of magnitude x

amp=2*abs(X(1:L/2));
freq=fs/2*linspace(0,1,L/2);

figure
plot(t,x);              % accelerattion x (time domain)
xlabel('Time (s)'); ylabel('Acceleration (g)');
hold

figure
loglog(freq,amp);       % accelerattion X (freq domain)
xlabel('Frequency (Hz)'); ylabel('Acceleration (g)');
xlim([20 500])
hold


==========================================================================

The result of FFT shows unreasonably low amplitude of 0.1352 g at 1st eigenfrequency. In addition, there is many unidentified errors in the FFT processed signal (see Fig. 2).

I believe that I’ve implemented basic FFT functions required to perform a correct amplitude in frequency domain. So, I tried again by using following combination of cosine functions as an input:

t=0:1/1000:200-1/1000;      % input t (time) data
x=36*cos(2*pi*50*t)+100*cos(2*pi*100*t)+150*cos(2*pi*200*t);    % input x (magnitude) data


In this case, however, the results give the correct amplitudes for each peak of the spectrum (see Fig. 3).

So there are two questions to improve the FFT results; 1) Why the FFT results from my accelerometer signal produces unreasonably low amplitude, even if those of cosine function gives correct results? 2) How to get rid of the dirty noise signals, in order to obtain clear signal (Does the window function is effective to reduce such kind of error?). Thank you for your advice in advance.

• If I understand correctly from your testing, you swept the sine input signal. Wouldn't this explain the low level output compared to your second test where you have the sine wave constant throughout your data? – Dan Boschen May 7 '19 at 2:46