Итак... Продолжим!
Начал я с алгоритма ограничителя. Вообще то мой опыт говорит мне, что на окраску звука любого перегруза влияет в основном выходной ограничитель из всей цепочки каскадов усиления-ограничения. Объясняется это довольно просто - при слабом сигнале или малом гейне звук проходит через все каскады постепенно усиливаясь, но не ограничиваясь до самого конца, ибо имеет недостаточную амплитуду. И только последний каскад имеет шанс его ограничить - и именно с него и начинается ограничение. Естественно, от его передаточной характеристики и зависит тон перегруза на малом гейне... По мере нарастания сигнала или увеличения гейна подключаются и предыдущие каскады, но их влияние сказывается заметно меньше, ибо выходной каскад намного раньше уходит в ограничение сигнала, а в режиме ограничения коэффициент усиления каскада резко падает...
В общем - возьмем самый ламповый из ламповых усилков и дадим большой сигнал с большим гейном - и получим классический прямоугольник, как на самом последнем транзисторе...
Я проделывал такое неоднократно, изучал поведение и отдельной лампы и в связке - и вижу процесс именно так.

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

).
Так что мягкое ограничение нам все равно пригодится - цифровой дисторшн я задумал, как универсальный, от блюза - до металла!

Для органа я делал уже ограничитель - но там очень большой гейн и не был нужен, для начала я сделал просто хардлимит - установил порог, выше и ниже которого сигнал просто обрезался и оставался на уровне этого порога. Для органа звучало неплохо, но я решил немного смягчить. Для этого задал еще один порог, ниже жесткого, и по достижении его сигнал уменьшал скорость нарастания (усиление) вдвое. Это легко реализовывалось в программе... Но особой разнице в звуке я не услышал - то ли нужно было повозиться с порогами, то ли слишком резко менялось усиление в точке первого порога... Для органа этот алгоритм подходил, а вот для гитары - я решил его переделать...
Поскольку вся обработка сигнала идет в цифире - почему бы не задать параметры ограничителя таблицей? Тогда меняя таблицу, легко менять характер ограничения. Ничто не мешает использовать разные таблицы для разных каскадов и даже для разной полярности сигнала! (асимметричное ограничение, как у вакуумного триода). Сочетая это с разным числом каскадов, можно получить очень разный звук!
Методом небольшого тыка

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