randomized algorithm

backspin

Well-Known Member
10 Янв 2009
764
726
93
Ребят, любопытство не даёт покоя. Как в синтах (может в каждом по-разному) устроена схема рандомной выборки тех или иных параметров? Понятно что система не выбирает ничего случайно, но как организован процесс? Существует алгоритм, но как он работает? Если несложно, популяризируйте на простом языке.
 
Однако и вопросы у Вас! :)
Боюсь, что на этот вопрос могут дать ответ только разработчики инструментов.
 
Дык) Люди тут и аппаратуру ваяют. Хоть бы простой примерчик...
[DOUBLEPOST=1429287921,1429204549][/DOUBLEPOST]General dead комрад, просвети хоть кусочек, как оно сей шайтан-алгоритм работает?
 
Не уверен, что это есть в демке (у меня нормальная версия), но попробовать загрузить демо от НордМодуляра G2, дальше в меню Tools->Patch Mutator и понаблюдать что происходит
 
General dead комрад, просвети хоть кусочек, как оно сей шайтан-алгоритм работает?
никогда не интересовался. В вирусе есть, возможно произвольно тасуют какие то шаблоны с настройками, ибо если все будет совсем рандомно, то в 90% будет неюзаемый шлак получаться.
 
  • Like
Реакции: backspin
Линейный конгруэнтный метод. очень просто и нетребовательно по ресурсам. предположительно. вообще их куча, и может быть что угодно
Musical applications of microprocessors 1987 Hal Chamberlin - основы
 
Предлагаю такой вариант алгоритма:
1.Для каждого параметра, подлежащего рандомизации:
2. генерируется случайное число в диапазоне, допустимом для заданного параметра (например значение от 0 до 3, если генерируется случайная форма волны осциллятора в инструменте с 4 возможными формами волны (синус, пила, зуб, меандр));
3. отбрасываютя экстремальные значения, из-за которых может получиться "90% неюзаемого шлака" (для примера, частота обреза фильтра НЧ в диапазоне от 0 до 10, или, скажем время атаки огибающей амплитуды сигнала свыше 100 (здесь я имею ввиду значения СС в диапазоне от 0 до 127, а не абсолютные величины в Герцах или миллисекундах)). Если сгенерированное значение отброшено, переходим к п.2 для повторной генерирования требуемого параметра. Если значение принимается, переходим у п.1 для генерирования следующего параметра.
4.Конец алгоритма.
Достаточно просто. Все нюансы и сложности в отбраковке экстремальных значений, из-за которых может получиться, по словам уважаемого @General Dead, "90% процентов того самого неюзаемого шлака".
 
Линейный конгруэнтный метод
А я то голову ломаю, ну точно ведь, это ОН! Так бы сразу и сказали, успокоили, просветлили.:eek:

Предлагаю такой вариант алгоритма:
1.Для каждого параметра, подлежащего рандомизации:
2. генерируется случайное число в диапазоне, допустимом для заданного параметра (например значение от 0 до 3, если генерируется случайная форма волны осциллятора в инструменте с 4 возможными формами волны (синус, пила, зуб, меандр));
3. отбрасываютя экстремальные значения, из-за которых может получиться "90% неюзаемого шлака" (для примера, частота обреза фильтра НЧ в диапазоне от 0 до 10, или, скажем время атаки огибающей амплитуды сигнала свыше 100 (здесь я имею ввиду значения СС в диапазоне от 0 до 127, а не абсолютные величины в Герцах или миллисекундах)). Если сгенерированное значение отброшено, переходим к п.2 для повторной генерирования требуемого параметра. Если значение принимается, переходим у п.1 для генерирования следующего параметра.
4.Конец алгоритма.
Достаточно просто. Все нюансы и сложности в отбраковке экстремальных значений, из-за которых может получиться, по словам уважаемого @General Dead, "90% процентов того самого неюзаемого шлака".
Это приблизительно понятно, НО! Как именно
генерируется случайное число в диапазоне
Машина ведь не может сама случайно выбирать, есть алгоритм, но чтоб выбрать алгоритм должен быть.....другой алгоритм)))
Дико извиняюсь за тех.безграмотность.
 
Вся цифровая схемотехника построена на принципе выполнения микропрограмм (или программ, хранящихся в ПЗУ) цифровыми процессорами (специализированными или универсальными).
Микропрограммы получаются путем компиляции либо с языков программирования высокого уровня (грубо говоря, Си, Дэлфи и пр.) либо со специализированных языков типа Assembler, заточенных под конкретный тип процессора (микропроцессора).
В любой среде программирования (будь-то Microsoft Visual C++, или Borland Delphi, или любой другой узкоспециализированной) есть стандартные готовые библиотеки подпрограмм, уже написанных разработчиками среды программирования, которые программист может свободно включить в свой текст. В числе стандартных библиотек подпрограмм есть в том числе и средства генерирования случайных чисел в заданном диапазоне значений.
Исходный текст программы для конкретного инструмента затем компилируется средой программирования в машинный код (микропрограмму), которая затем записывается в ПЗУ. При включении инструмента эта микропрограмма грузится в ОЗУ и затем выполняется процессором.
Грубо говоря, где-то так.
@backspin, Вы это хотели понять?
 
Последнее редактирование:
  • Like
Реакции: backspin
яндекс и гугл первой ссылкой объясняет этот способ. и книгу я дал, она на самом деле очень интересна, если вас действительно интересуют тонкости.

к примеру рэндом в 16бит архитектуре может выдать 2^16 вариантов = 65536 значений. следовательно диапазон от 0 до 65535 либо от -32768 до 32767. далее представьте, что будет, если полученное разделить/умножить. делите на 2 = сужаете диапазон в 2 раза.. можно не делить, а представить число в фиксед поинт формате. к примеру Q15 будет выдавать вам диапазон от -1 до 0,9999. на компах не думаю, что этим пользуются, но в железе именно так, особенно в дспхах без плав. точки.
 
  • Like
Реакции: backspin
Спасибо, но не совсем то. Меня интересует ЧТО является ключевым фактором остановки на определённом числе. Например, в алгоритм задаётся временной параметр, допустим полсекунды на выбор, не знаю как правильно назвать, идёт отчёт чисел пусть от 0 до 256, система остановится на определённом числе, а в алгоритме номер два будет зашит другой временной интервал и соответственно получится друге число и т.д. Как то так я полагаю или совсем далеко от истины?
 
Как то так я полагаю или совсем далеко от истины?

Совсем далеко, к сожалению.
Самих алгоритмов генерации случайных чисел может быть огромное множество. В том числе и с использованием специализированных аппаратных датчиков случайных последовательностей, в которых "случайности" задаются физическими процессами, как например, шум полупроводниковых диодов. Затем эти последовательности обрабатываются при помощи математического аппарата, который держится в секрете спецслужбами, тестируются на "качество" такими же специализированными программами.
Для бытового применения, когда "суперслучайность" не нужна, используются т.н. генераторы псевдослучайных чисел, в которых используются предопределенные математические формулы с неким "почти "случайным начальным состоянием. Ну, например:
Последний самый младший бит в числе, являющимся количеством тиков, отсчитанным генератором опорной частоты в компьютере, начиная с первого января 1980 года (да-да, есть такие функции в стандартных библиотеках подпрограмм в системах программирования для ПК).
Берете таким образом несколько бит (например, два, если нужно получить число от 0 до 3; 7 бит для получения числа от 0 до 127 и пр.) и формируете "псевдослучайное" число. Надеюсь, понятно, что генерируемое таким образом число является именно псевдослучайным, а не случайным.
 
  • Like
Реакции: backspin
Спасибо, но не совсем то. Меня интересует ЧТО является ключевым фактором остановки на определённом числе.

В целочисленной математике, где можно использовать переполнение максимального значения, для получения белого шума вполне достаточно обычного next = a*previous + b. Если заглянуть в исходники, то там вы обычно увидите что-то вроде:
int rand(void)
{
next = next * 1103515245 + 12345;
return (unsigned int) (next/65536);
}

Для получения Гауссова распределения достаточно сгенерировать два псевдослучайных числа, как выше, сделать несколько несложных вычислений:

U1 = 1 - 2*rand1
U2 = 1 - 2*rand2

и проверить условие S = U1^2 + U2^2 <1 (псевдослучайное число в диапазоне от 0 до 1). Если нет, то повторить, если да, то после ещё небольшого допиливания получаются сразу два годных числа с нормальным распределением. Никакого мошенства, чистая математика, причём имеющая превосходную производительность хоть на 8 битных контроллерах с тактовой частотой на несколько мегагерц. Почему так, объясняют в книжках по теории вероятностей и математической статистике.
 
  • Like
Реакции: backspin

Сейчас просматривают