LINUX.ORG.RU
ФорумTalks

{пятница замри}помогите перевести значения скорости в ускорение

 , ,


0

0

есть значения скорости (в км/ч), измерянные с периодом в 50мс. из них строится график. помогите перевести эти значения в ускорение, дабы из них тоже построить график.

я пытался подобрать формулу/алгоритм, но у меня получается либо опять график скорости либо достаточно ровная линия с очень частыми но очень маленькими колебаниями.

понимаю что задача пустяковаю, но мозг уже плавится. если есть кто жывой^Wтрезводумающий — подскажите

======================= UPDATE ===========================

ftor, djzielony угадали - показания сняты с машины, которая проехала тестовой участок

на скрине, который я выложыл, у меня есть все тот же график (синий), который тут все советовали. Красным на том же рисунке изображен график того же ускорения но снятого с другого датчика (точнее данные с которого, оно посчитано).

на рисунке, который сделал djzielony есть три графика. последний из них очень похож на мой красный и как раз он мне и нужен. а данные для него готовятся двумя методами из scipy (если кто знает что они делают на самом деле - YAW)

b,a = ss.butter(rz, f/Fs/2, btype='low')
acc_filt = ss.lfilter(b,a, acc)

когда я «подписывался» на данное задание, меня уверяли что все математика уже есть. но как оказалось не вся. ну и я решил посмотреть что я смогу сделать.. ну а дальше вы все знаете.

да, спасибо тем, кто давал дельные советы

★★★★★

Последнее исправление: ZuBB (всего исправлений: 2)

Ответ на: комментарий от Manhunt

Подскажи пожалуйста годный учебник, чтобы раскрывалась такая тема: есть грубая и неточная матмодель системы, система функционирует под влиянием воздействий извне, есть косвенные и неточные наблюдения над системой, нужно как можно точнее вычислить координаты системы (или производные от них) и оценить погрешность вычисления — какие к этому есть подходы, области применимости подходов, сравнение сильных и слабых сторон подходов.

Ну т.е. это тоже задача идентификации. Бендат-Пирсол (3 книжки), Льюнг. Есть даже в переводе на русский.

Ну а также любая литература по временным рядам, подавлению шумов и т.д. Я сам сейчас ищу побольше такого для списка литературы к экзамену. :)

zhuravlik ★★★★
()

Поправочка. Фильтрация ускорения (можно и скорости, операция то линейная) до 4 гертз.

Например так: http://oi50.tinypic.com/2z6t3is.jpg

import numpy as np
import scipy.signal as ss
import re
Fs = 1/0.05

expr = re.compile('''DEBUG curr speed km/h: (.+)''')
txt = open('in.txt')
speed_in_kmh = []
for line in txt:
	match = expr.search(line)

	if match:
		print line
		print match.group(1)
		speed_in_kmh.append(float(match.group(1)))

speed_in_ms = 1000/60/60. *np.array(speed_in_kmh)

acc = (speed_in_ms[1:] - speed_in_ms[:-1])*Fs
acc[-1] = 0 #manual artifact hacking

np.savetxt('acc_table.txt', acc)
f = 4
rz = 3
b,a = ss.butter(rz, f/Fs/2, btype='low')
acc_filt = ss.lfilter(b,a, acc)

#for painting
import pylab as py
py.figure()
t = np.arange(0, len(acc)/Fs, 1/Fs)
py.subplot(311)
py.plot(t, speed_in_ms[0:-1])
py.xlabel('Time, [s]')
py.ylabel('Speed, [m/s]')



py.subplot(312)
py.plot(t, acc)
py.xlabel('Time, [s]')
py.ylabel('Acceleration, [m/s^2]')
py.subplot(313)

py.plot(t, acc_filt)
py.xlabel('Time, [s]')
py.ylabel('Acceleration filtered, [m/s^2]')
py.show()

djzielony
()
Последнее исправление: djzielony (всего исправлений: 2)
Ответ на: комментарий от tyakos

Также всем разупорину в этом треде. ТС не понимает ничего, а вы ему что, дифференцировать best fit function предлагаете? У него данные разбросаны черт знает как. Фух.

P.S. Всё в СИ, конечно же.

tyakos ★★★
()
Последнее исправление: tyakos (всего исправлений: 1)
Ответ на: комментарий от ZuBB

А вообще то, нет. Если верить данным, то там была довольно большая акселерация. Но, похоже это только момент включения датчика, так как значения подскакивают с нуля до 2 метров в секунду за одну пробку (sample).

djzielony
()
Ответ на: комментарий от ftor

Точно, разгон, переход с 1 на вторую, со второй на третью, потом на четвертую торможение и движение с нормальной скоростью.

djzielony
()
Ответ на: комментарий от zhuravlik

Бендат-Пирсол (3 книжки), Льюнг. Есть даже в переводе на русский.

Э-ээ, спасибо. А можешь поточнее названия указать?

Ну а также любая литература по временным рядам, подавлению шумов и т.д.

Хочется именно годной литературы, а не любой. Нехватка свободного времени, читать всё вподряд — не вариант.

Manhunt ★★★★★
()
Последнее исправление: Manhunt (всего исправлений: 1)
Ответ на: комментарий от Manhunt

Кстати, да. Я тоже буду благодарен за хорошую литературу.

djzielony
()

status update

привет еще раз!

нет я не пьян (пока) а таблетки можна было принять только в виде анальгина

я наконец то добрался домой, а это значит что пятница наступила окончательно и необратимо. всем спасибо за советы. если есть желающие — завтра продолжим. правда в более щадящем режиме.

всем еще раз спасибо. приятного вечера!

ZuBB ★★★★★
() автор топика
Последнее исправление: ZuBB (всего исправлений: 1)
Ответ на: комментарий от Manhunt

Э-ээ, спасибо. А можешь поточнее названия указать?

Легко ищется же.

Бендат-Пирсол

Измерение и анализ случайных процессов

Прикладной анализ случайных данных

Применения корреляционного и спектрального анализа

Льюнг «Идентификация систем. Теория для пользователя.»

zhuravlik ★★★★
()

Тебе надо наделать промежуточных точек и тогда уже считать ускорение.
Иначе ты пропускаешь точки где надо, пропуская самое интересное (специально такая задача, наверное).

moscwich
()
Последнее исправление: moscwich (всего исправлений: 2)
Ответ на: комментарий от moscwich

Но вообще между данными точками графика скорости может быть что угодно, и ты не сказал ничего, что могло бы позволить нам поставить там что-то конкретно, а значит в рамках данной задачи правильным решением является предложенное здесь изначально, по крайней мере оно уж точно правильнее твое красного графика, вероятность истинности которого бесконечно мала. В рамках данной задачи.
Более того, с физической точки зрения предложенное решение является верным, с определенной точность, в любом случае.

moscwich
()
Последнее исправление: moscwich (всего исправлений: 2)
Ответ на: комментарий от moscwich

а значит в рамках данной задачи правильным решением является предложенное здесь изначально

В рамках данной задачи правильным решением является взять разностную схему более высокого порядка. Например центральную разность (2-ой порядок)

a=(v(t+dt)-v(t-dt))/2dt

Или ещё более высокий порядок.

yvv ★★☆
()
Ответ на: комментарий от Manhunt

Численное дифференцирование спасет отца русской демократии. Особенно симметричная формула.

LongLiveUbuntu ★★★★★
()

/me раздолбил себе всё лицо фейспалмами и теперь плачу кровавыми слезами... Сколько уже было обсуждений про то какое нужно и какое не нужно программисту образование. А оно, как выясняется-то нужно и всякое.

imul ★★★★★
()
Ответ на: комментарий от yvv

Можно делать квадратичную интерполяцию по трём точкам и вычислять ускорение в точке дальнейшим дифференцированием.

imul ★★★★★
()
Ответ на: комментарий от imul

Можно делать квадратичную интерполяцию по трём точкам и вычислять ускорение в точке дальнейшим дифференцированием.

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

Но программистам математика не нужна! )))

yvv ★★☆
()
Последнее исправление: yvv (всего исправлений: 1)

Какого рода график? Аппроксимируй прямой линией и ты уже получил ускорение.

Artificial_Thought ★★★★
()

:-DDDDDDDDD Вот и выросло поколение.

drSchur ★★★
()
Ответ на: комментарий от djzielony

твой график №3 то что надо. сейчас его вкурю

ZuBB ★★★★★
() автор топика
Ответ на: комментарий от djzielony

как я уже говорил, ваш график №3 то что мне нужно.

у вас данные для него «готовятся» вызовами 2х функций (butter, lfilter) из пакета scipy.

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

у меня целевая платформа — built in Javascript VM (не браузер), поэтому заюзать scipy я не могу

ZuBB ★★★★★
() автор топика
Ответ на: комментарий от ZuBB

butter создает частотный фильтр (точнее создает параметры полиномов для фильтрации из данных параметров). lfilter ими фильтрует сигнал, в одностороннем порядке, так что появляются сдвиги фаз для разных частот. Есть filtfilt, тогда он фильтрует в две стороны и сдвига по фазе нет. http://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.lfilter.html тут даже написаны формулы. Но, я не очень знаю математические методы цифровой фильтрации, только немного пользоваться ими.

http://en.wikipedia.org/wiki/Digital_biquad_filter#Direct_Form_2 может.

Если у тебя там под рукой будет трансформата Фурье, то можешь попробовать сделать Фурьеровский фильтр - трансформировать сигнал в домен частот, умножить ненужные частоты на ноль и потом странсформировать обратно в домен времени.

djzielony
()
Последнее исправление: djzielony (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.