# Double integration of the acceleration signals to obtain displacment signals

323 views (last 30 days)

Show older comments

Hi,

In order to obtain the displacement signals from the acceleration data, The following steps are used to convert the acceleration data to achieve the displacement values:

1- The acceleration signals are filtered [High pass filter]

2- The cumtrapz is applied to integrate the displacement to obtain the velocity

3- The velocity signals are filtered [High pass filter]

4- Finally, the filtered signals of velocity is integrated to get the displacement signals.

The concern is still about the correct methods and the accuracy of the results which are obtained.

Please have look at the Matlab Program as stated below; If there any comments and contribution regarding the proposed methodology please do not hesitate to shear us your experience, Thank you

%%accelerations are integrated twice to produce displacements

clear all

close all

clc

time = load('D:\Users\Desktop\time.txt');

acc = load('D:\Users\Desktop\data.txt');

figure

plot(time,acc)

xlabel('Time (sec)')

ylabel('Acceleration (mm/sec^2)')

%%Design High Pass Filter

fs = 8000; % Sampling Rate

fc = 0.1/30; % Cut off Frequency

order = 6; % 6th Order Filter

%%Filter Acceleration Signals

[b1 a1] = butter(order,fc,'high');

accf=filtfilt(b1,a1,acc);

figure (2)

plot(time,accf,'r'); hold on

plot(time,acc)

xlabel('Time (sec)')

ylabel('Acceleration (mm/sec^2)')

%%First Integration (Acceleration - Veloicty)

velocity=cumtrapz(time,accf);

figure (3)

plot(time,velocity)

xlabel('Time (sec)')

ylabel('Velocity (mm/sec)')

%%Filter Veloicty Signals

[b2 a2] = butter(order,fc,'high');

velf = filtfilt(b2,a2,velocity);

%%Second Integration (Velocity - Displacement)

Displacement=cumtrapz(time, velf);

figure(4)

plot(time,Displacement)

xlabel('Time (sec)')

ylabel('Displacement (mm)')

##### 6 Comments

Samuel Hudson
on 14 Jul 2022

Would you be willing to provide a sample of data that works in this code?

### Answers (7)

UTS
on 18 Dec 2014

##### 1 Comment

Matthew Nijsten
on 27 Mar 2018

as k
on 3 Apr 2016

##### 0 Comments

as k
on 3 Apr 2016

##### 0 Comments

Hasan Siddiqui
on 14 Jul 2016

##### 0 Comments

Adi Negoro
on 24 Apr 2017

I'm newbie,

how to understand the "fc=0.1/30; % Cut off Frequency"?

##### 7 Comments

Vincent den Ouden
on 26 May 2022

Aashish Sah
on 19 May 2020

Edited: Aashish Sah
on 19 May 2020

Hi,

I have one question regarding this code. I have acceleration data in terms of g, so I multiply by 9.8 to get in terms of ms^-2. The displacement should then be in terms of m. However, when I apply the filter to my acceleration data, it normalizes the data. For example, the max and min of raw acceleration data is [10.5, 9.6] ms^-2 and after I apply the filter I get [0.68 -0.56]. It seems that filtering process normalizes the raw data between -1 and 1.

This introduces an issue for me since I wish to compare the actual displacement from different accelerometer sensors.

Any suggestions?

##### 1 Comment

Broc Sommermeyer
on 15 Nov 2020

### See Also

### Categories

### Community Treasure Hunt

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

Start Hunting!