How to get mobility from velocity and force

Illustration
Rebecca-lim - 2021-02-11T10:06:48+00:00
Question: How to get mobility from velocity and force

I have a data of velocity (get from accelerometer) and force data (get from hammer). Now, I need to get mobility from them. I already know that mobility=velocity/force. But I don't know how code it. I just begin learning about signal processing for a week.

Expert Answer

Profile picture of Prashant Kumar Prashant Kumar answered . 2025-11-20

I have a background in structural dynamics, not soil mechanics, but this test looks similar enough. You have measurements of acceleration (NOT velocity, unless your accelerometer is doing something it shouldn't) and force in the time domain. You want to get a mobility measurement in the frequency domain. The basic steps you have to follow are:
1) Convert your time domain measurements to the frequency domain
2) Determine the accelerance of your system (accelerance = acceleration/force)
3) Convert from accelerance to mobility
In more detail:
1) Use FFT to go from time domain to frequency domain. MATLAB's default FFT function is a little annoying to use if your background is not signal processing; you have to handle scaling yourself, and you are only going to want the first half of the FFT measurements. The other half are redundant if your signal is real-valued. Do something like this:
 function [X, freqs] = easy_fft(x, fs)
  L = length(x);
  NFFT = 2^nextpow2(length(x));
  X = fft(x, NFFT);
  X = 2/L*X(1:NFFT/2 + 1); % 2/L is the required scaling
  freqs = fs/2*linspace(0,1,NFFT/2+1); % Frequency vector
 end

Then do

 fs = 1/y(2, 1); % Convert time step to sample rate
 [A, freq] = easy_fft(y(:, 2), fs); % Acceleration
 [F, ~] = easy_fft(y(:, 3), fs); % Force
Now you have complex frequency domain vectors A and F. Don't take the real part of anything, they must be complex.
 
2) Now get the accelerance. We know that A = HF and want H; in your case the simple element-wise division
 H = A./F;
will work. (This ONLY works for single-input, single-output systems such as what you have here). H is now your accelerance.
 
3) The conversion to mobility is just a scaling factor. Divide the accelerance by i*omega to get the mobility:
 
 omega = 2*pi*freq; % Convert to rad/s
 mobility = H./(1i*omega); % Acceleration = i*omega*Velocity for a periodic steady-state response

To replicate the plot you showed, take the absolute value of mobility and put it on a log scale vs. frequency.

 

 semilogy(freq, abs(mobility));

Apologies if there are any bugs in what I wrote, I didn't test it on anything. Hopefully you get the idea.


Not satisfied with the answer ?? ASK NOW

Get a Free Consultation or a Sample Assignment Review!