Немного о себе

Здесь можно представиться в качестве нового участника и немного рассказать о себе.
SergM
новичок
Сообщения: 32
Зарегистрирован: 30 сен 2026, 15:48
Пол: Мужской
Статус: Неопределившийся
Откуда: Донецк

Re: Немного о себе

Сообщение SergM » 04 окт 2026, 13:30

Вот так укладывается в 14 тактов и 5 регистров. На слух вроде бы есть едва заметная разница, возможно связанная с тем, что на выходе 8 бит, а не 16.
спойлер

Код: Выделить всё

static uint8_t rand3(Gen24State *obj)
{
    const uint8_t x0 = obj->x, z0 = obj->z;
    obj->x = x0 ^ obj->y;
    obj->y = x0 ^ z0;
    obj->z = (x0 << 1) ^ obj->y ^ rotl8(z0, 1) ^ rotl8(z0, 7);
    return obj->x + rotl8(z0, 7);
}
Dig386 писал(а): ↑Кстати, а не возникает ли из-за короткого периода 2^24-1 ощущения, что генератор белого шума повторяет словно зацикленный фрагмент записи?
На моём - нет. На этом - тоже. Период достаточно большой, при частоте дискретизации 62.5 кГц, это почти 4,5 минуты. Такое может быть, если генератор на каком-то коротком участке даёт артефакт, тогда будет слышно как он повторяется. Вроде бы именно это и было с xorshift.

До этого использовал аналоговый генератор шума на лавинном эффекте. Он сразу даёт спектр близкий к розовому, но на слух - шум явно грязный. Слегка "царапающий", похож на шум старого ненастроенного радиоприемника. Иногда какие-то шорохи появлялись, иногда щелчки. Было даже (читал про такое же на форуме электронщиков), что какие-то неразборчивые голоса мерещились. Выключил - пропали. Включил - снова что-то такое есть. Но возможно и другое объяснение: он просто принял какой-то радиосигнал, аналоговые на это чувствительны. С цифровым генератором ни разу такого не было, и вообще чище звучит.
Dig386 писал(а): ↑Насколько я помню, на части из них уже могут быть специализированные инструкции для реализации AES? Просто если эти инструкции там есть и они достаточно быстрые, то это полностью решает вопрос с качеством ГПСЧ.
Не изучал. На ESP32, возможно, есть - там Wi-Fi встроенный. Даже если и нет, у них на порядок большее быстродействие, можно было обойтись без особых ухищрений и ассемблера.

Аватара пользователя
Dig386
администратор
Сообщения: 6331
Зарегистрирован: 05 сен 2010, 21:30
Пол: Мужской
Статус: Аутичный
Откуда: Москва

Re: Немного о себе

Сообщение Dig386 » 04 окт 2026, 14:21

SergM писал(а): ↑Вот так укладывается в 14 тактов и 5 регистров. На слух вроде бы есть едва заметная разница, возможно связанная с тем, что на выходе 8 бит, а не 16.
Насколько я понял, Вы изменили выходную функцию? Если что, что изначальный вариант x0 + z0 я позаимствовал из генераторов для "больших машин", где у процессора есть конвейер и где выходная функция может исполняться параллельно с самим LFSR. И Вы адаптировали её под микроконтроллер, использовав значения, полученные в конце вычислений?

Ещё мне не вполне ясно, как тестировать маленькие генераторы, т.к. серьёзные тесты он провалит, и нужно придумать "несерьёзный" тест, различающий "хорошие" и "плохие" генераторы с 24-битным состоянием. Я использовал подсчёт частот байт в выборке порядка мегабайт по размеру, а также 32-битный одномерный Birthday Spacings, т.е. по сути базовые тесты на равномерность на малых выборках.
SergM писал(а): ↑До этого использовал аналоговый генератор шума на лавинном эффекте.
Года два назад собирал аналоговый генератор шума, основанный как раз на использовании одного из переходов транзистора КТ315 как стабилитрона. И оно даже шумело, шум был похож на шипение. Дальше я хотел использовать звуковую карту как АЦП, провести кондиционирование шума с помощью хеш-функции Blake2s, но в итоге меня остановило то, что этому генератору нужно было вольт 15, т.е. от батареек запитывать неудобно а если делать блок питания - надо было уже думать, как случайно не спалить ноутбук. Да и уровень сигнала надо было согласовывать с тем, что нужно звуковой карте.
обойтись без особых ухищрений и ассемблера.
Если там машинное слово - 32 бита, то да, подойдут обычные xoroshiro или xoshiro. Также при проектировании ГПСЧ для x86-64 или ARM про ассемблер забывать нельзя, т.к. алгоритм должен быть ощутимо быстрее поточных шифров, иначе зачем он нужен?

SergM
новичок
Сообщения: 32
Зарегистрирован: 30 сен 2026, 15:48
Пол: Мужской
Статус: Неопределившийся
Откуда: Донецк

Re: Немного о себе

Сообщение SergM » 04 окт 2026, 18:58

Dig386 писал(а): ↑Насколько я понял, Вы изменили выходную функцию? Если что, что изначальный вариант x0 + z0 я позаимствовал из генераторов для "больших машин", где у процессора есть конвейер и где выходная функция может исполняться параллельно с самим LFSR. И Вы адаптировали её под микроконтроллер, использовав значения, полученные в конце вычислений?
Первоначальный вариант требует лишнюю временную переменную, для которой нужен лишний регистр. Да, отличие только в выходной функции. Можно еще взять вариант return obj->x + obj->z, будет то же, что и в оригигале, только результаты смещены на одну итерацию. Тогда 15 тактов и 5 регистров.
Dig386 писал(а): ↑Ещё мне не вполне ясно, как тестировать маленькие генераторы, т.к. серьёзные тесты он провалит, и нужно придумать "несерьёзный" тест, различающий "хорошие" и "плохие" генераторы с 24-битным состоянием.
Наверное, тест зависит от задачи. Большой период, отсутствие смещения, минимальная автокорреляция... может быть, что-то еще.
Dig386 писал(а): ↑Года два назад собирал аналоговый генератор шума, основанный как раз на использовании одного из переходов транзистора КТ315 как стабилитрона. И оно даже шумело, шум был похож на шипение. Дальше я хотел использовать звуковую карту как АЦП, провести кондиционирование шума с помощью хеш-функции Blake2s, но в итоге меня остановило то, что этому генератору нужно было вольт 15, т.е. от батареек запитывать неудобно а если делать блок питания - надо было уже думать, как случайно не спалить ноутбук. Да и уровень сигнала надо было согласовывать с тем, что нужно звуковой карте.
Да, как раз такой у меня и был. Только никакой цифровой обработки.
Есть другой вариант, хотел попробовать, да руки не дошли. Intel в своих процессорах для аппаратного генератора рисуют схему, похожую на RS-триггер: подают импульс одновременно на оба входа, и одновременно снимают. Триггер в идеале устанавливается в случайное состояние. Для него не нужно высокое напряжение, и на выходе - логические уровни. Вот только там возможно еще какие-то ухищрения есть вроде особого расположения транзисторов на кристалле. Получится ли такой генератор на дискретных элементах - не знаю. Скорее всего, будет смещенный (если вообще заработает). Постобработка точно понадобится, у Intel'а они его через AES пропускают.

Аватара пользователя
Dig386
администратор
Сообщения: 6331
Зарегистрирован: 05 сен 2010, 21:30
Пол: Мужской
Статус: Аутичный
Откуда: Москва

Re: Немного о себе

Сообщение Dig386 » 05 окт 2026, 12:45

SergM писал(а): ↑Вот только там возможно еще какие-то ухищрения есть вроде особого расположения транзисторов на кристалле.
Полагаю, что такая схема уже очень сильно будет зависеть от конкретных свойств её элементов, а если на плате прямо распаивать - то ещё и от помех, разводки и т.п. Кстати, тот же стабилитрон в принципе можно запитать от блокинг-генератора, но я бы крепко подумал, можно ли такое к ноутбуку подключать, т.к. там могут быть импульсы с довольно высоким напряжением.
SergM писал(а): ↑Наверное, тест зависит от задачи. Большой период, отсутствие смещения, минимальная автокорреляция... может быть, что-то еще.
Если речь про очень жесткие ограничения, как у Вас - то да, наверное. Я похожим образом, кстати, и тестировал свой вариант LFSR: доказывал максимальность периода (не той тестовой программой), затем отсутствие смещения проверял через частотный тест для отдельных байт, а вместо вычисления автокорреляции у меня был birthday spacings test. Но для ГПСЧ общего назначения, т.е. просто "для расчётов", я простейшие проверки на равномерность распределения представляю себе куда более брутально:
1) Математически доказанный период не менее 2^60.
2) Частотный тест на выборке 1 терабайт, можно как построить гистограммы для 8- и 16-битных фрагментов, так и посчитать веса Хемминга для блоков покрупнее (32-65536 бит) и тоже сравнить их частоты с теоретическими. Похожие тесты есть в PractRand.
3) Критерии промежутков между днями рождения и критерий конфликтов в разных вариантах (разная размерность, старшие/младшие биты и т.п.).
4) Критерий интервалов, он же gap test. Несколько разных модификаций.
5) Можно ещё MaxOfT, для 8-32-мерных случаев. П. 3-5 есть в TestU01.
SergM писал(а): ↑Скорее всего, будет смещенный (если вообще заработает). Постобработка точно понадобится, у Intel'а они его через AES пропускают.
Насколько мне известно, там используется конструкция, похожая на системный криптогенератор, т.е. алгоритмы Fortuna или Yarrow. Но есть ещё rdseed, дающая возможность почти напрямую получить доступ к аппаратному ГСЧ, но она медленнее rdrand. Я ещё обратил внимание на то, что Вы получаете 32 бита от rdrand, хотя размер машинного слова на x86-64 - 64 бита. Не исключаю, что взять сразу 64 бита - это быстрее.

SergM
новичок
Сообщения: 32
Зарегистрирован: 30 сен 2026, 15:48
Пол: Мужской
Статус: Неопределившийся
Откуда: Донецк

Re: Немного о себе

Сообщение SergM » 05 окт 2026, 20:56

Dig386 писал(а): ↑Полагаю, что такая схема уже очень сильно будет зависеть от конкретных свойств её элементов, а если на плате прямо распаивать - то ещё и от помех, разводки и т.п.
Вероятно, да. И длина проводов может влиять, и различие параметров транзисторов. Можно добавить обратную связь, которая будет заставлять выдавать генератор в среднем равное количество нулей и единиц (у Intel'а она есть). Вот только, в итоге может получиться последовательность 01010101...

Вспомнил ещё одну конструкцию с аппаратным генератором случайных чисел. Кажется, в 1989 году в журнале "Радио" было описание мелодичного дверного звонка, в котором мелодия генерируется случайным образом. Два генератора: "тактовый" (около 3 Гц) и "кодирующий" (где-то 30-50 кГц). Когда на выходе тактового "0" - кодирующий генератор наращивает 4-битный счётчик, а когда "1" - счётчик остановлен, получившееся число от 1 до 16 задаёт коэффициент деления для третьего (тонального) генератора, звучит соответствующий тон. Схема работала, мелодия звучала как случайная. Вот только (как я потом понял), она была основана на нестабильности частоты генераторов: они были собраны на микросхемах К155ЛА3 по схеме мультивибратора, которая из-за особенностей схемотехники, не отличается стабильностью, частота плавает буквально "от косого взгляда". Когда пытался повторить эту идею на микросхемах КМОП серии К176, у меня ничего не вышло: генератор не давал случайных чисел.
Dig386 писал(а): ↑Кстати, тот же стабилитрон в принципе можно запитать от блокинг-генератора, но я бы крепко подумал, можно ли такое к ноутбуку подключать, т.к. там могут быть импульсы с довольно высоким напряжением.
Вместо блокинг-генератора можно собрать умножитель напряжения на переключаемых конденсаторах. При кратности умножения 3, и напряжении питания 5 В, на выходе (с учётом потерь на диодах), получится около 12 В, этого должно быть достаточно. А выход можно защитить парой кремниевых диодов, соединённых встречно-параллельно. Но да, я бы такие эксперименты предпочёл делать на чём-нибудь автономном вроде Arduino, ESP32 или может быть, Raspberry Pi.
Dig386 писал(а): ↑Но для ГПСЧ общего назначения, т.е. просто "для расчётов", я простейшие проверки на равномерность распределения представляю себе куда более брутально:
Для библиотек общего назначения вроде glibc это наверное, разумный компромисс. Для спецприменений может понадобиться что-то другое, особым требованием может быть лимит по времени, или например, криптостойкость. А может быть, что-то ещё.

Хорошо помню, как писал на школьном компьютере программу на бейсике, которая "случайным" образом ставила точки на экране. Вместо "звёздного неба" они рисовала сплошные наклонные линии - такой там был ГПСЧ.
Dig386 писал(а): ↑Насколько мне известно, там используется конструкция, похожая на системный криптогенератор, т.е. алгоритмы Fortuna или Yarrow.
Почитал. Да, верно, AES в него входит, но это ещё не всё. Общий алгоритм действительно напоминает Фортуну.
Dig386 писал(а): ↑Но есть ещё rdseed, дающая возможность почти напрямую получить доступ к аппаратному ГСЧ, но она медленнее rdrand.
Эту мой процессор не поддерживает.
Dig386 писал(а): ↑Я ещё обратил внимание на то, что Вы получаете 32 бита от rdrand, хотя размер машинного слова на x86-64 - 64 бита. Не исключаю, что взять сразу 64 бита - это быстрее.
Попробовал. Действительно, rdrand64 выдаёт числа с той же скоростью, что и rdrand32, но 64-битные.

Аватара пользователя
Dig386
администратор
Сообщения: 6331
Зарегистрирован: 05 сен 2010, 21:30
Пол: Мужской
Статус: Аутичный
Откуда: Москва

Re: Немного о себе

Сообщение Dig386 » 05 окт 2026, 23:11

SergM писал(а): ↑Но да, я бы такие эксперименты предпочёл делать на чём-нибудь автономном вроде Arduino, ESP32 или может быть, Raspberry Pi.
Или, возможно, надо делать развязку через оптопару.
SergM писал(а): ↑они были собраны на микросхемах К155ЛА3 по схеме мультивибратора, которая из-за особенностей схемотехники, не отличается стабильностью
Т.е. по сути получалась аналоговая схема на логических элементах?
SergM писал(а): ↑Для библиотек общего назначения вроде glibc это наверное, разумный компромисс.
В стандартных библиотеках языка Си с ГПСЧ обычно всё плохо, они от того генератора из Бейсика, рисующего прямые линии, не так далеко ушли. Да и API стандартной библиотеки языка Си для ГПСЧ плохо спроектирован с точки зрения многопоточности. В частности, в glibc до сих пор используется аддитивный генератор Фибоначчи с запаздываниями с двумя лагами, он проваливает ряд тестов и может искажать результаты симуляций. В msvcrt - какой-то LCG чуть ли не из GW-BASIC (период как у Вашего генератора примерно), а в musl - 64-битный LCG (может, чуть поприличнее остальных, но всё равно ужасен). В плане "спецприменений" у меня позиция довольно жёсткая: выбором по умолчанию для вещей вроде стандартной библиотеки языка должен быть какой-нибудь ARX-шифр вроде ChaCha, LEA, ThreeFish, Speck128/128 с инициализацией по умолчанию от системного криптогенератора, просто без "наворотов" вроде обновления ключа на ходу на ходу. Например, Винья, один из ведущих разработчиков ГПСЧ, последнее время продвигает именно такой подход: https://prng.di.unimi.it/. С математической точки зрения это примерно аналогично подходу к реализации синуса и косинуса из той же стандартной библиотеки, а именно сопоставимая с машинным эпсилоном точность.

И остаются два "спецприменения" - это собственно криптография с системными CSPRNG и вычисления с жесткими требованиями к производительности ГПСЧ (где как раз LCG и LFSR могут быть полезны).

SergM
новичок
Сообщения: 32
Зарегистрирован: 30 сен 2026, 15:48
Пол: Мужской
Статус: Неопределившийся
Откуда: Донецк

Re: Немного о себе

Сообщение SergM » 06 окт 2026, 10:24

Dig386 писал(а): ↑Или, возможно, надо делать развязку через оптопару.
Да, но оптопара - это уже скорее для цифровых сигналов. Аналоговый через неё протолкнуть сложнее.

Кстати, а веб-камеру с заклеенным окном не пробовали? ПЗС-камеры хорошо шумят, при максимальном усилении получается много цветного шума.
Dig386 писал(а): ↑Т.е. по сути получалась аналоговая схема на логических элементах?
Скорее, да. Там ещё и сами особенности технологии ТТЛ: большой входной ток, который плавает от температуры и напряжения питания. При том, что эти микросхемы довольно прожорливые, сами себя нагреть могут.
Логические элементы КМОП тоже можно перевести в аналоговый режим, но ведут они себя намного стабильнее.
Dig386 писал(а): ↑с инициализацией по умолчанию от системного криптогенератора,
Это может быть и вредным. Иногда нужно получить повторяемую последовательность чисел. На этом принципе, например, работала космическая игрушка "Elite", которая на основе ГПСЧ рисовала "галактические карты", и генерировала текстовые описания и "рыночные цены".
Dig386 писал(а): ↑В стандартных библиотеках языка Си с ГПСЧ обычно всё плохо, они от того генератора из Бейсика, рисующего прямые линии, не так далеко ушли.
Может быть, тянут для совместимости, чтобы в старых исходниках ничего не сломалось.

В Qt есть два генератора: старый qrand - многопоточная версия стандартного glibc, и новый - QRandomGenerator. Судя по исходникам, во втором используется Mersenne Twister, который, оказывается, давно уже есть в стандартной библиотеке C++ (std::mersenne_twister_engine).

Аватара пользователя
Dig386
администратор
Сообщения: 6331
Зарегистрирован: 05 сен 2010, 21:30
Пол: Мужской
Статус: Аутичный
Откуда: Москва

Re: Немного о себе

Сообщение Dig386 » 06 окт 2026, 13:05

SergM писал(а): ↑Кстати, а веб-камеру с заклеенным окном не пробовали? ПЗС-камеры хорошо шумят, при максимальном усилении получается много цветного шума.
Пока ещё нет, но, возможно, имеет смысл.
SergM писал(а): ↑Это может быть и вредным. Иногда нужно получить повторяемую последовательность чисел.
Для таких случаев сид всегда можно явно установить при начале работы программы. Инициализация же по умолчанию ГПСЧ на основе криптографичесокго примитива от системного CSPRNG снизит риски катастрофических последствий при ошибочном использовании этих функций для генерации паролей и токенов.
SergM писал(а): ↑Судя по исходникам, во втором используется Mersenne Twister, который, оказывается, давно уже есть в стандартной библиотеке C++ (std::mersenne_twister_engine).
Да, его добавили в стандарт С++11, там два вихря Мерсенна - std::mt19937 и std::mt19937_64. Это уже более-менее приличные генераторы: статистические тесты, которые они проваливают, либо прицельно бьют в их алгебраическую структуру (linear complexity и matrix rank, что для LFSR типично), либо требуют хитрых настроек или петабайтных выборок. И ещё вихрю Мерсенна надо около 2 килобайт оперативной памяти.

Аватара пользователя
IAS
участник
Сообщения: 234
Зарегистрирован: 19 апр 2026, 09:03
Пол: Мужской
Статус: Аутичный
Откуда: Москва

Re: Немного о себе

Сообщение IAS » 07 окт 2026, 15:20

SergM писал(а): ↑На статьи о СА наткнулся случайно, увидел что-то знакомое, решил пройти тесты. Получил неожиданно высокий результат. Как будто прозрел: многое стало понятным. Официального диагноза нет (да и не слишком он мне нужен), и пока ещё не знаю как это открытие повлияет на мою жизнь. Возможно, что и не слишком. Читаю статьи, рассказы других аспи, изучаю… что-то похоже, что-то — нет, и в общем у меня не настолько всё трагично.
Всё один-в-один как у меня :) А ещё говорят, двух похожих аспи не найти. Практически по всем пунктам моя жизнь. Насчёт пользы от диагноза скажу что она есть, но больше психологическая. Как-то легче становится, когда однажды узнаёте, что все эти многочисленные отличия и странности жизни имеют общую причину и своё название. Многое проясняется, наводит на мысли, заставляет глубже копнуть тему и прочесть литературу. По-моему, ничего, кроме пользы, в этом нет. У меня диагноз есть, хотя я его вовсе не хотел получать. Как вы верно заметили, в жизни всё не так трагично, чтобы жаловаться доктору. Но так случилось, что доктор сам меня разглядел. Когда сильно волнуюсь (а в кабинете это случается), весь маскинг слетает и начинаю вести себя естественно :)))

P. S. Я тоже пришёл в православие (из атеизма), когда мне было 19, на 3 курсе тех. универа. С тех пор ничуть не разочарован. Радиоэлектроникой увлекаюсь лет с восьми. В последние годы ударился в ремонт винтажного аудио и приёмной техники, попутно много читаю об истории радиозаводов. Компьютерной темой интересуюсь аж с 92 года, в итоге это стало профессией (работаю суппортом и админом в маленькой фирме).
F84.5 RAADS-R = 191

Аватара пользователя
bahsfr
новичок
Сообщения: 6
Зарегистрирован: 15 июл 2026, 14:04
Пол: Мужской
Статус: Аутичный
Откуда: Владимир
Контактная информация:

Re: Немного о себе

Сообщение bahsfr » 09 окт 2026, 11:18

Dig386 писал(а): ↑люблю doxygen и LaTeX-формулы
Спасибо огромное за наводку по doxygen. Ни разу не слышал о данной системе, но заинтересовало.

И в целом было крайне интересно почитать обсуждение, связанное с программированием. В последнее время интерес к низкоуровневому коду и архитектуре компьютера вышел на новый виток: никогда раньше с таким рвением не читал литературу по математике и компьютерным технологиям. С современными течениями IT не сошлось, а текущие темы для изучения довольно узконаправленные – воспринимаю это скорее как хобби (то же изучение, структурирование материала, эксперименты), нежели как фундамент для будущего поиска работы в этой сфере.
AQ = 42 : ASSQ = 43 : EQ = 22 : SPQ = 49.5 : TAS-20-R = 67

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя