Уравнение для неравномерного распределения предметов

Я пишу программу javascript, которая отправляет список MIDI-сигналов за определенный период времени.

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

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

Вот картинка, чтобы наглядно представить, о чем я говорю

Есть ли простая логарифмическая/экспоненциальная функция, с помощью которой я могу вычислить эти значения? Я особенно надеюсь, что можно будет использовать одно и то же уравнение для обоих, просто изменив переменную.

Большое спасибо!


person Matthew    schedule 08.05.2018    source источник


Ответы (1)


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

В обоих ваших случаях похоже, что вы начинаете с начального временного интервала: назовем его a. Тогда следующий интервал — это значение, умноженное на постоянный коэффициент: назовем его r. В первом уменьшающемся случае ваше значение r находится между нулем и единицей (около 0,6), а во втором случае ваше значение r больше единицы (около 1,6). Таким образом, ваши временные интервалы в нотации Python равны

a, a*r, a*r**2, a*r**3, ...

Тогда время каждого сигнала равно сумме геометрического ряда,

a * (1 - r**n) / (1 - r)

где n — номер импульса (1 для первого, 2 для второго и т. д.). Эта формула действительна, если r не равно единице, но если r равно единице, то последовательность является тривиальной последовательностью обычного сигнала, а n-й сигнал дается в момент времени.

a * n

Это не «фиксированный результат», поскольку у вас есть две степени свободы — вы можете выбирать значения a и r.

Если вы хотите более равномерно распределить сигналы, просто приблизите r к единице. Значение, равное единице, абсолютно ровное, значение, находящееся дальше от единицы, более слипается на одном конце. Одним из недостатков этого метода является то, что если интервалы сигналов уменьшаются, то в какой-то момент сигналы полностью прекратятся, а именно в

a / (1 - r)

Если у вас есть уже отправленные или полученные сигналы и вы хотите найти значение r, просто найдите временной интервал между тремя последовательными сигналами, а r — это значение временного интервала между 2-м и 3-м сигналом, деленное на время интервью между 1-й и 2-й сигнал. Если вы хотите убедиться, что эта модель хороша для данного набора сигналов, проверьте значение r для нескольких сигналов — если значение r почти постоянно, то это хорошая модель.

person Rory Daulton    schedule 08.05.2018
comment
Спасибо за ваш ответ! Кажется, я понимаю, что вы предлагаете. Просто чтобы уточнить: изображение в ОП не в масштабе — я просто нанес несколько точек на график, чтобы показать, чего я в конечном итоге пытаюсь достичь. Основываясь на вашем ответе, два вопроса: 1) как найти постоянное отношение r и 2) это, кажется, дает фиксированный результат. Что бы я изменил, чтобы эти сигналы распределялись более или менее равномерно? р? - person Matthew; 09.05.2018
comment
@Matthew: см. дополнения к моему ответу. - person Rory Daulton; 09.05.2018