Рассчитать время начала и длительность цифрового сигнала в питоне - PullRequest
0 голосов
/ 13 декабря 2011

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

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

У меня есть список кортежей в следующем формате (фиктивные данные):

[(150, 150),
 (450, 90),
 (750, 150),
 (1050, 90),
 (1350, 150),
 (1650, 90),
 ...
 (1950, 150)]

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

Я хочу получить строки, представляющие начальное время и продолжительность интервала (поскольку каждая выборка имеет фиксированную известную длительность, определяемую частотой выборки), например:

[('00:12.000', '2.245'),
 ('00:15.057', '2.158'),
 ('00:18.857', '3.045'),
 etc.]

(ВАЖНО: эти значения не предназначены для расчета, просто для того, чтобы дать представление о структуре и форматировании. Значения представляют собой произвольно набранные числа)

Я могу представить себе очень уродливые способы получить это с помощью округления и вычитания, деления по модулю и тому подобного, но я думаю, что Python со всеми этими прекрасными модулями управления временем ДОЛЖЕН иметь питонский способ получить то, что мне нужно.

Любой

Спасибо за чтение! (и надеюсь, что будущие ответы могут пролить свет на путь других людей в будущем)

1 Ответ

1 голос
/ 13 декабря 2011
from datetime import timedelta

il = [(150, 150),
      (450, 90),
      (750, 150),
      (1050, 90),
      (1350, 150),
      (1650, 90),
      (1950, 150)]

sr = 12.5
tl = list(tuple((str(timedelta(seconds=j/sr)) for j in i)) for i in il)

for t in tl:
    print(t)

печать:

('0:00:12', '0:00:12')
('0:00:36', '0:00:07.200000')
('0:01:00', '0:00:12')
('0:01:24', '0:00:07.200000')
('0:01:48', '0:00:12')
('0:02:12', '0:00:07.200000')
('0:02:36', '0:00:12')

[Редактировать: удалить комментарий о несоответствии выходных данных.]

time не поддерживает форматирование строки для указания отображаемых полей или количества дробных цифр. Используйте re.match(), чтобы убрать то, что вам не нужно, или конвертировать секунды в int и обратно в строку, чтобы получить фиксированный формат dd.ddd.

...