Integration of acceleration signal for complex modulus calculation

2 次查看(过去 30 天)
Hi everyone,
i need some advice to determine the complex modulus (storage modulus and loss modulus) of a viscoelastic dampening element. I made an experiment with a dampened mass on a electro dynamic exciter and mesured the input (not dampened) and output (dampened) acceleration.
I have the following plan to calculate the complex modulus:
  1. The first step would be to get the displacement of the vibrating mass by integration
  2. And from there calculate the stress σ and strain ε in the dampening element.
  3. Then I would need the phase between stress and strain to calculate the complex modulus:
I made a script but the problem is, that the displacment increases with time. I expect the displacement to be sinusoidal and avereging around 0.
Regarding the other steps I'm not quite shure if I'm on the right path. I included some test data in a txt.zip. I had to shorten it due to size restrictions.
Your help is greatly appreciated
[FileNameXLS,FilePath] = uigetfile('*.txt','Select One or More Files','MultiSelect', 'on');
TotalFileName = string(fullfile(FilePath,FileNameXLS));
clear Time ACC;
T = readtable(TotalFileName);
%%
ACC = T{:,3}; % output[m/s^2)
Time = T{:,1}; % [s]
%%
%Find the beginning of the sweep with acc 1*g
ind_start = (1:find(ACC>9.8,1))';
ACC(ind_start) =[];
Time(ind_start) =[];
%find where the acc is 0 "clean start"
ind_z = (1:find(ACC<=0.1,1))';
ACC(ind_z) =[];
Time(ind_z) =[];
%%
vel0 = 0;
pos0 = 0;
VEL = vel0 + cumtrapz(Time,ACC);
POS = pos0 + cumtrapz(Time,VEL);
figure(1)
plot(Time,ACC,Time,VEL,Time,POS);
legend('ACC','VEL','POS')
This is the figure i get with the entire signal (1000s). I included a shorter signal due to it being to large of a file. As you can see the POS (displacement) takes of and that doesn't make any sense.
%---further steps----
mass = 0.1535; %[kg]
crossSect = (1-0.116)*((pi*(0.023^2))/4); %Cross section of the element. [m^2]
%sigma_0:stress
%epsilon_0:strain
%phi: phaselag between stress and strain
%sigma_0 = (ACC*mass)/crossSect; %stress
%epsilon_0 = ?
%storage mod E' = (sigma_0/epsilon_0)*cos(phi)
%loss mod E'' = (sigma_0/epsilon_0)*sin(phi)

采纳的回答

Star Strider
Star Strider 2021-2-8
My guess is that the first integration is also creating a constant of integration, and that would show up as a constant offset that could be eliminated by subtracting the mean of the acceleration and the mean of the velocity from the respective integrations.
Try this:
VEL_1 = vel0 + cumtrapz(Time,ACC-mean(ACC));
POS_1 = pos0 + cumtrapz(Time,VEL-mean(VEL));
That creates an acceptable result and has a logical mathematical basis (at least in my opinion). I cannot determine if it actually solves the problem, so I leave that determination to you, and this approach for you to experiment with.
  2 个评论
Delme
Delme 2021-2-8
First of all thank you so much for taking the time to answer my question.
Unfortunately though its not quite the output i expected. I ran it with the entire signal (1000s) and according to this, it made just one cycle and the displacement is more than 200m. :D
Star Strider
Star Strider 2021-2-8
My pleasure!
I have no idea what you are doing, or what result to expect.
However, my Answer apparently did solve the original problem, since the integrations now remain reasonably bounded, and that they were not was the original problem.
If my Answer helped you solve your problem, please Accept it!
.

请先登录,再进行评论。

更多回答(0 个)

产品

Community Treasure Hunt

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

Start Hunting!

Translated by