2017-01-03 10 views
1

У меня есть данные о перемещении и времени перемещения объекта.Как найти точные точки отдыха?

Объект колеблется вокруг нуля. То есть, во-первых - он приводится в движение с небольшим усилием, затем он приходит в покой. снова применяется небольшая сила, и объект включается в движение.

я обнаружил скорость и ускорение с помощью

V= [0 ; diff(disp) ./ diff(times)]; 
A= [0; diff(V) ./ diff(times)]; 

Я думал найти точки, где скорость равна нулю. Но я думаю, что таких случаев больше, чем требуется. Найти график ниже:

скорость участок

enter image description here

Я заинтересован в круги только значения времени. Есть ли способ получить их?

наблюдаю рисунком

  1. скорость увеличивается, то уменьшается почти такое же количество.
  2. Затем из-за трения он пересекает ноль на меньшее количество и снова становится отрицательным
  3. наконец-то остановился, но очень маленькая скорость все еще присутствует.
  4. Именно эта точка касания к нулю, которую я хочу. Затем снова применяется сила и повторяется один и тот же цикл.

Pl примечание, что у меня нет времени применения силы. Иначе ничего не поделаешь.

Кроме того, я сделал график ускорения. Но кажется, что это бесполезно.

Я использую matlab.

+1

Кажется, что больше, чем просто точки, которые вы кружаете, где скорость проходит на ноль. Каков ваш критерий для выбора этих пунктов над другими? – BillBokeey

+0

Принятие производной от шумных сигналов приведет к увеличению шума. Более того, для вторых производных и т. Д.Вы можете попробовать использовать фильтр дифференциации, например [Savitzky-Golay] (http://stackoverflow.com/a/23964378/2278029) или [другие методы] (http://www.holoborodko.com/pavel/numerical-methods/ численно-производная/гладко с низким уровнем шума-дифференциаторы /). – horchler

ответ

3

Вот один из способов, чтобы найти приблизительные нули в решетчатых данных:

% some dummy synthetic data 
x = linspace(0, 10, 1e3); 
y = exp(-0.3*x) .* sin(x) .* cos(pi*x); 

% its derivative (presumably your "acceleration") 
yp = diff(y) ./ diff(x); 

% Plot data to get an overview 
plot(x,y), hold on 


% Find zero crossings (product of two consecutive data points is negative) 
zero_x = y(1:end-1) .* y(2:end) < 0; 

% Use derivative for linear interpolation between those points 
x_cross = x(zero_x) + y(zero_x)./yp(zero_x); 

% Plot those zeros 
plot(x_cross, zeros(size(x_cross)), 'ro') 

Результат:

graph of dummy function and its zeros

Затем до вас, чтобы выбрать , которые нулей вам нужно, потому что я не мог понять из вопроса, что сделало эти точки в кругах настолько особенными ...

0

Точки покоящиеся вы просили иметь следующее свойство:

йх/= v = 0

d^2 х/д^2 = а = 0 # в случае, что объект становится v = 0, на нем нет силы.

Таким образом, вы можете проверить также вторую формулу для фильтрации точек покоя.