How to get mobility from velocity and force

3 次查看(过去 30 天)
Dear all,
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.
Thank you all in advance.

采纳的回答

Joe
Joe 2015-8-10
编辑:Joe 2015-8-10
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.
  5 个评论
Joe
Joe 2015-8-12
1) I don't further smoothing is necessary for the quality of your results if you are only concerned about the damped natural frequency and damping of the first peak. If you'd like to try and get a smoother response curve, the best way to do that would be to take multiple test measurements and average them together in the frequency domain.
2) If your main purpose is to get the damped natural frequency and damping ratio of the soil region, you have two options.
A) Time domain: Count distance between peaks of the decaying response, the inverse of the period is the damped natural frequency. Then, use the "log decrement" method to find the damping ratio. The Wikipedia page on log decrement does a good job of explaining how to use it.
B) Frequency domain: The location of your primary response peak is the damped natural frequency. To obtain the damping ratio, use the "half power bandwidth" method, explained here. Basically, you go down by a factor of sqrt(2) from the peak, look at the width of the peak there, and use that to find the damping ratio.
If you are going to be doing this type of work more often in the future, there are dedicated texts for soil dynamics - "Principles of Soil Dynamics" seems to be well reviewed.
vu ngothanh
vu ngothanh 2015-8-12
Thank you very much.
I will learn more about it through your advices.
Thanks you for your time to help me. I greatly appreciate it.
Wish you have a nice day.

请先登录,再进行评论。

更多回答(1 个)

Image Analyst
Image Analyst 2015-8-10
Just add a dot before the slash.
mobility=velocity ./ force;
I'm assuming you know how to get your data into a variable in MATLAB. If you don't know how to do that, then look into csvread(), dlmread(), importdata(), xlsread(), textscan(), fread(), fgetl(), or functions like that.
  5 个评论
Image Analyst
Image Analyst 2015-8-10
I can't help you. I don't know that test. Maybe you need to take the absolute value of the velocity, or maybe the what you think is the velocity is really the acceleration - I have no idea. All I know is that the syntax for dividing those two arrays, whatever they may represent, is correct. You need to dig further to find out if the arrays really represent what you think they do.
vu ngothanh
vu ngothanh 2015-8-11
Yes. Thanks you very much for your time for me.
Thanks again.
Wish you have a nice day.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Agriculture 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by