Из всех надмножеств 12-ступенного строя, пожалуй, лучший — 72EDO. Под него был изготовлен легендарный советский синтезатор АНС. В нём удобно запоминать и играть мелодии, в этот строй хорошо укладываются многие натуральные интервалы:
квинта (3/2) в 72edo — 42 ступени — равна квинте 12edo (6*7=42);
большая терция (5/4) — 23 ступени — на 1/6 полутона меньше аналогичного интервала в 12edo;
малая терция (6/5) — 19 ступеней — на 1/6 полутона больше аналогичного интервала в 12edo;
натуральная септима (7/4) — 58 ступеней — на 1/3 полутона меньше малой септимы в 12edo;
полуувеличенная кварта (11/8) — 33 ступени — равна 4.5 полутона в 12edo;
существуют большой тон (9/8) — 12 ступеней и малый тон (10/9) — 11 ступеней;
при движении по терциям/секстам добавляется или отнимается одна ступенька (1/72 октавы), а по квинтам и квартам — нет.
Надмножества строя 12edo, конечно, удобны тем, что они делят ступени 12edo на равные части. Но всё-таки, если рассмотреть ряд 12edo, 24edo, 36edo и т.д., то с уменьшением ступени относительная погрешность только растёт, и они всё хуже выполняют свою задачу — аппроксимацию натуральных гармоник.
Тут нужен другой математический подход. Пусть x — число ступеней в октаве. Для каждого из базовых интервалов (2/1, 3/1, 5/1 и т.д.) желательно, чтобы в него умещалось целое число ступеней. Построим функцию от х, значение которой тем выше, чем лучше аппроксимируются наши интервалы:
f(x) = cos(2πx) + cos(2πx log(3)/log(2)) + cos(2πx log(5)/log(2)) + cos(2πx log(7)/log(2)) +…
Если взять последовательные максимумы данной функции, то получится множество оптимальных делений октавы.
Также можно почитать о поиске равномерных строёв на Xenharmonic Wiki: https://en.xen.wiki/w/The_Riemann_Zeta_Function_and_Tuning
Пожалуйста, сейчас я вам накидаю ссылок. Исполнитель: Gary Garrett. Песня в натуральном строе, с наглядной визуализацией всей гармонии: Flying Dream https://youtu.be/jA1C9VFqJKo
Исполнитель: Dolores Catherino. Композиция Towards the Continuum, служащая "мостом" от стандартного строя 12edo к континууму. Клавиатура Tonal Plexus, 106 ступеней в октаве. https://youtu.be/8re6rFj7q10
Исполнитель: Brendan Byrnes. Красивая игра на 22-ступенной гитаре. https://youtu.be/qHHv3mwJTlg
Хотя, кажется, я знаю, как избавиться от "длинного хвоста".
В своём текущем виде функция g(t) как фильтр никуда не годится. При t=-1 и t=-10000 значения g(t) различаются всего в 100 раз. Например, при обработке аудиосигнала разрешением 16 бит длина фильтра составит порядка миллиарда сэмплов.
Надо проинтегрировать сигнал и продифференцировать фильтр.
g'(t) = { 1/(2sqrt(pi)(-t)^(3/2)) при t≤0; 0 при t > 0 }.
Эта функция при t=-1 и t=-10000 убывает в 1000000 раз. В том же примере со звуком, если вместо g(t) продискретизировать g'(t), длина КИХ-фильтра составит всего около 1000 сэмплов.
Вот как, оказывается всё просто, дробное интегрирование и дифференцирование можно свести к операции свёртки, правда, в обобщённом виде (там повсюду будут вырожденные функции и несобственные интегралы), что эквивалентно умножению Фурье-образа сигнала на образ фильтра:
Допустим, функция f(t) — гауссовский белый шум, а F(ω) — её Фурье-образ, комплексный белый шум, равномерный вдоль всей оси частот. Посмотрим, как меняется Фурье-образ при дифференцировании/интегрировании f(x).
При n = 0 («белый» шум): f(t) → F(ω)
При n = 1 («синий» шум): f'(t) → iω * F(ω). Амплитуда становится прямо пропорциональна частоте.
При n = -1 («красный» шум): ∫f(t)dt → -i/ω * F(ω). Амплитуда обратно пропорциональна частоте, при ω=0 она обращается в бесконечность. Это соответствует тому, что значения винеровского процесса (точнее, их дисперсия) бесконечно растут со временем, и при интегрировании белого шума на практике нужно подавлять низкие частоты.
При n = -0.5 («розовый» шум): f(-0.5)(t) → (iω)^(-0.5) * F(ω).
Если представить «полуинтеграл» от f(t) как свёртку (f ∗ g)(t), то преобразование Фурье даст sqrt(2π)*F(ω)*G(ω), что позволяет выразить G(ω) = 1/sqrt(2πiω), тогда функция g(t) равна 1/sqrt(-πt) при t<=0 и 0 при t>0.
Теперь понятно, почему никто не использует «полуинтегрирование». Функция 1/sqrt(-πt) имеет очень длинный хвост, т.е. очень медленно убывает при устремлении t в -∞, поэтому КИХ-фильтр получается слишком длинным и вычисление свёртки будет затратно.
если вы пользуетесь софтом от MetaQuotes, то возможно вам будут интересен пример из CodeBase: https://www.mql5.com/ru/code/20588 — и также на этом сайте есть множество статей на данную тему.
Интересно, существует ли математически точный алгоритм генерации розового шума?
Поясню. Предлагаемый алгоритм суммирования октавных полос — быстрый, удобный, но неточный. На графиках АЧХ видны неравномерности спектра, ступеньки через каждую октаву.
Белый шум получить проще простого, это последовательность независимых случайных значений, и он имеет ровный спектр. Красный шум (Броуновский, часто Brown неверно переводят как "коричневый") представляет собой интеграл белого шума. Он имеет спад 6 дБ на октаву. Все промежуточные случаи являются результатом дробного интегрирования белого шума, и именно эта тема у автора оказалась не раскрыта. Т.е., так называемый "розовый" шум со спадом АЧХ в 3 дБ на октаву представляет собой полуинтеграл белого шума. Хотелось бы задать вопрос математикам, есть ли какой-нибудь способ вычислить его с достаточной точностью за приемлемое время?
Как уже подсказали выше, можно использовать мультисэмплинг, но он бывает разный. Вдобавок, алгоритмы с проходом по пикселям и по полигонам дают разные результаты на стыках двух фигур. Но сам по себе мультисэмплинг не решает проблему АА, а отодвигает её в более высокое разрешение. Вот отличная статья о растеризации с фильтрами высших порядков: Analytic Rasterization of Curves with Polynomial Filters, особенно показательны рисунки 5 и 6.
У принтера высокое пространственное разрешение, но низкое разрешение по глубине цвета — как правило, 1 бит — есть краска или нет краски. Сглаживание и хинтинг ему не нужны, они только испортят края полигонов. Профессиональные принтеры сами интерпретируют тот же PostScript как им требуется. На бытовых принтерах задача отрисовки возлагается на софт — что приложение отправит драйверу, то и будет напечатано.
Это понятие идёт из темы цифровой обработки сигналов. "Квадрат" возникает, например, при передискретизации изображения из низкого разрешения в высокое методом ближайшего соседа. Один чёрный пиксель превращается в чёрный квадрат. При уменьшении картинки происходит обратный процесс — исходное изображение делится на квадраты, каждый из которых после вычисления среднего значения цвета превращается в один пиксель. "Квадрат" — это очень простой, но плохой фильтр, дающий заметный алиасинг. Для лучшего сглаживания мелких деталей перед уменьшением масштаба нужно пройтись по изображению фильтром нижних частот, т.е. удалить высокие частоты, чтобы избежать появления артефактов алиасинга.
Применительно к теме статьи — при рендеринге векторной графики, обладающей бесконечной чёткостью, в пиксельную, имеющую конечную чёткость, также имеет место передискретизация. Она может быть проведена без фильтра нижних частот (алгоритм Брезенхема), с простейшим фильтром — тот самый "квадрат" (алгоритм Ву), или с более сложным фильтром свёртки. На практике обычно на один пиксель редко приходится много мелких элементов векторной графики, и точности алгоритма Ву вполне хватает. Но если вы захотите, к примеру, отрендерить сетку из прямых чёрных линий, отстоящих друг от друга на 0.9 пикселя, то на каждые 9 квадратных пикселей придётся 10 линий, и вы получите артефакт алиасинга — 1 пиксель из 9 будет темнее остальных. В таком случае, чтобы получить равномерный фон, вам понадобится хороший фильтр нижних частот, а не "квадрат".
Отличная статья, и спасибо автору за то, что он коснулся проблемы гамма-коррекции в цветовых каналах sRGB и показал "как привыкли" и "как надо" смешивать цвета.
Странная политика. Гугл плей мог бы быть центром притяжения для инди-разработчиков, которые бы наполняли его уникальным контентом, мог бы стать агрегатором новых технологий и идей, но нет. Чего стоит одна только история приложения для определения пульса по лицу. Прогресс ускоряется с каждым годом, и отставание в этой гонке смерти подобно. Зачем так делать, непонятно.
Я пока склоняюсь к версии, что нейронная сеть зрительного анализатора попросту обладает достаточно большим запасом времени на обучение, чтобы «запомнить» образ во всех возможных его положениях. Когда ребёнок учится читать по буквам, вначале он фиксирует взгляд по центру каждой буквы, запоминая её форму, а потом с помощью постоянных многократных саккад (мелких движений глаз) постепенно вырабатывает способность воспринимать те же самые буквы, расположенные эксцентрично — этот навык при дальнейшем обучении даёт возможность охватывать одним взглядом слог или целое слово. Для обучения НС существуют разнообразные нейромедиаторы, выполняющие функции поощрения, наказания и ряд других, и, по-видимому, в мозге по умолчанию включён режим «слабого поощрения», чтобы вся проходящая через нейроны информация «укрепляла» существующие между ними синапсы. Обратные связи между корой и ЛКТ, вероятно, нужны для того, чтобы подсказывать нейронам ЛКТ, что изображение, двигающееся по сетчатке, следует понимать одинаково, независимо от того, где оно расположено, для того чтобы «подключить» множество нейронов предыдущего слоя к одному нейрону следующего слоя. Это можно считать аналогом пулинга в свёрточных нейронных сетях, где на каждом слое уменьшается разрешение картинки и увеличивается сложность выделяемых деталей. Только в отличие от искусственных CNN, где одним ядром сканируется всё изображение, здесь одной «фиче» более-менее равномерно обучается весь слой.
Если представить себе афферентный зрительный путь человека как обычную многослойную нейронную сеть (я пока не беру в рассмотрение такие вещи, как временные ритмы, латеральное торможение, обратные связи и др.), в которой сигнал распространяется послойно от входов к выходам, то очевидно, что один и тот же зрительный стимул, спроецированный на разные области сетчатки, возбуждает разные группы нейронов в каждом слое. Вообще, для нейронной сети это будут разные входные данные.
Как известно, первичная обработка изображения происходит уже в сетчатке (имеются три типа ганглиозных клеток, реагирующие на световой on-off, контрастный и синий стимулы). В латеральном коленчатом теле таламуса выделяют 6 слоёв клеток, в каждом слое имеются нейроны, которые в своём перцептивном поле распознают определённые специфические стимулы, например, грани, движение и т.д. Но у меня вызывает удивление, каким образом данная нейронная сеть, структура которой практически полностью сформирована к моменту рождения, обучается различать предмет не по локализации, а по форме.
Конечно, в процессе обучения постоянно возникают и исчезают миллионы синапсов. Но при этом все нейроны жёстко «привязаны» к своим местам, они не могут перемещаться и «сканировать» изображение, для того чтобы найти в нём какую-то деталь. Вместо этого существует некий непостижимый, но мощный и эффективный механизм параллельного обучения кучи нейронов одному элементу изображения.
Да, существует множество видов патологии макулы с разными формами нарушения центрального зрения. Но речь немного не о том. Если взять небольшой центральный участок сетчатки, к примеру, в пределах перифовеа, с достаточно высокой остротой зрения (допустим, не менее 0,4) и спроецировать одно и то же изображение в разные его места, то восприниматься оно будет одинаково. См. далее.
Как известно, глаз отличается от фотоаппарата тем, что высоким разрешением обладает лишь маленький участок его поля зрения радиусом порядка полградуса, и это позволяет сильно сэкономить на количестве передаваемых данных. (Для масштаба, 1 градус — это объект размером 5,2 мм на расстоянии 300 мм от глаз, размер его изображения на сетчатке около 0,4 мм, а минимальный различимый элемент изображения имеет размер порядка 40 угловых секунд.)
Но интересно даже не это, а то, каким образом зрительный анализатор одинаково воспринимает одну и ту же картинку в разных частях поля зрения, если сигнал проходит при этом через разные нейроны.
В мозге нет свёрточных нейронных сетей. Нельзя просто так взять и переключить группу нейронов зрительной коры, чтобы они обрабатывали сигнал, возникший, к примеру, не слева, а справа от точки фиксации.
Возьмём любой стимул, пусть это будет буква… буква Б. Посмотрим прямо на неё, потом чуть левее, чуть правее, выше, ниже. Каким участком поля зрения её ни разглядывай, по-прежнему это будет Б. Как это мозг так делает?
Можно подробнее? Я, признаюсь, не помню, чтобы на МК-61 был способ заполнить одновременно разряды мантиссы и порядка произвольными символами…
Давно это было, да и калькулятор уже не работает, но, слава энтузиастам, есть его точный эмулятор. Попробую кое-что вспомнить:
1. На МК-61 стоял 12-разрядный индикатор, но 1 и 10 разряды были «физически неполноценными», у знака мантиссы был только один сегмент — минус, у знака порядка — только четыре верхних сегмента.
2. Был способ поместить цифру в знак мантиссы — сформировать число с порядком от 400 до 409, результат появлялся в регистре С. Но дисплей (см. п. 1) ничего кроме минуса не показывал. В эмуляторе этот трюк работает, и там действительно появляется цифра 2 или 9.
3. Отобразить символ в знаке порядка можно с помощью «длинного монстра» или АСО-анализа, но при этом получается несохраняемое число.
4. Можно создать 3ГГОГ с произвольной мантиссой, поместив её в регистр Y, в регистр Х — символ «пусто» и нажав Fx² CX XY. Потом из него как-то получается число с той же мантиссой и порядком --L. При любых изменениях этого порядка с помощью «ВП-число» шестнадцатеричные символы пропадают. Большего я добиться не мог :)
Из всех надмножеств 12-ступенного строя, пожалуй, лучший — 72EDO. Под него был изготовлен легендарный советский синтезатор АНС. В нём удобно запоминать и играть мелодии, в этот строй хорошо укладываются многие натуральные интервалы:
квинта (3/2) в 72edo — 42 ступени — равна квинте 12edo (6*7=42);
большая терция (5/4) — 23 ступени — на 1/6 полутона меньше аналогичного интервала в 12edo;
малая терция (6/5) — 19 ступеней — на 1/6 полутона больше аналогичного интервала в 12edo;
натуральная септима (7/4) — 58 ступеней — на 1/3 полутона меньше малой септимы в 12edo;
полуувеличенная кварта (11/8) — 33 ступени — равна 4.5 полутона в 12edo;
существуют большой тон (9/8) — 12 ступеней и малый тон (10/9) — 11 ступеней;
при движении по терциям/секстам добавляется или отнимается одна ступенька (1/72 октавы), а по квинтам и квартам — нет.
Надмножества строя 12edo, конечно, удобны тем, что они делят ступени 12edo на равные части. Но всё-таки, если рассмотреть ряд 12edo, 24edo, 36edo и т.д., то с уменьшением ступени относительная погрешность только растёт, и они всё хуже выполняют свою задачу — аппроксимацию натуральных гармоник.
Тут нужен другой математический подход. Пусть x — число ступеней в октаве. Для каждого из базовых интервалов (2/1, 3/1, 5/1 и т.д.) желательно, чтобы в него умещалось целое число ступеней. Построим функцию от х, значение которой тем выше, чем лучше аппроксимируются наши интервалы:
f(x) = cos(2πx) + cos(2πx log(3)/log(2)) + cos(2πx log(5)/log(2)) + cos(2πx log(7)/log(2)) +…
Если взять последовательные максимумы данной функции, то получится множество оптимальных делений октавы.
Также можно почитать о поиске равномерных строёв на Xenharmonic Wiki: https://en.xen.wiki/w/The_Riemann_Zeta_Function_and_Tuning
Пожалуйста, сейчас я вам накидаю ссылок.
Исполнитель: Gary Garrett. Песня в натуральном строе, с наглядной визуализацией всей гармонии: Flying Dream https://youtu.be/jA1C9VFqJKo
Исполнитель: Dolores Catherino. Композиция Towards the Continuum, служащая "мостом" от стандартного строя 12edo к континууму. Клавиатура Tonal Plexus, 106 ступеней в октаве. https://youtu.be/8re6rFj7q10
Исполнитель: Brendan Byrnes. Красивая игра на 22-ступенной гитаре. https://youtu.be/qHHv3mwJTlg
Хотя, кажется, я знаю, как избавиться от "длинного хвоста".
В своём текущем виде функция g(t) как фильтр никуда не годится. При t=-1 и t=-10000 значения g(t) различаются всего в 100 раз. Например, при обработке аудиосигнала разрешением 16 бит длина фильтра составит порядка миллиарда сэмплов.
Надо проинтегрировать сигнал и продифференцировать фильтр.
g'(t) = { 1/(2sqrt(pi)(-t)^(3/2)) при t≤0; 0 при t > 0 }.
Эта функция при t=-1 и t=-10000 убывает в 1000000 раз. В том же примере со звуком, если вместо g(t) продискретизировать g'(t), длина КИХ-фильтра составит всего около 1000 сэмплов.
Допустим, функция f(t) — гауссовский белый шум, а F(ω) — её Фурье-образ, комплексный белый шум, равномерный вдоль всей оси частот. Посмотрим, как меняется Фурье-образ при дифференцировании/интегрировании f(x).
При n = 0 («белый» шум): f(t) → F(ω)
При n = 1 («синий» шум): f'(t) → iω * F(ω). Амплитуда становится прямо пропорциональна частоте.
При n = -1 («красный» шум): ∫f(t)dt → -i/ω * F(ω). Амплитуда обратно пропорциональна частоте, при ω=0 она обращается в бесконечность. Это соответствует тому, что значения винеровского процесса (точнее, их дисперсия) бесконечно растут со временем, и при интегрировании белого шума на практике нужно подавлять низкие частоты.
При n = -0.5 («розовый» шум): f(-0.5)(t) → (iω)^(-0.5) * F(ω).
Если представить «полуинтеграл» от f(t) как свёртку (f ∗ g)(t), то преобразование Фурье даст sqrt(2π)*F(ω)*G(ω), что позволяет выразить G(ω) = 1/sqrt(2πiω), тогда функция g(t) равна 1/sqrt(-πt) при t<=0 и 0 при t>0.
Теперь понятно, почему никто не использует «полуинтегрирование». Функция 1/sqrt(-πt) имеет очень длинный хвост, т.е. очень медленно убывает при устремлении t в -∞, поэтому КИХ-фильтр получается слишком длинным и вычисление свёртки будет затратно.
если вы пользуетесь софтом от MetaQuotes, то возможно вам будут интересен пример из CodeBase: https://www.mql5.com/ru/code/20588 — и также на этом сайте есть множество статей на данную тему.
Интересно, существует ли математически точный алгоритм генерации розового шума?
Поясню. Предлагаемый алгоритм суммирования октавных полос — быстрый, удобный, но неточный. На графиках АЧХ видны неравномерности спектра, ступеньки через каждую октаву.
Белый шум получить проще простого, это последовательность независимых случайных значений, и он имеет ровный спектр. Красный шум (Броуновский, часто Brown неверно переводят как "коричневый") представляет собой интеграл белого шума. Он имеет спад 6 дБ на октаву. Все промежуточные случаи являются результатом дробного интегрирования белого шума, и именно эта тема у автора оказалась не раскрыта. Т.е., так называемый "розовый" шум со спадом АЧХ в 3 дБ на октаву представляет собой полуинтеграл белого шума. Хотелось бы задать вопрос математикам, есть ли какой-нибудь способ вычислить его с достаточной точностью за приемлемое время?
У принтера высокое пространственное разрешение, но низкое разрешение по глубине цвета — как правило, 1 бит — есть краска или нет краски. Сглаживание и хинтинг ему не нужны, они только испортят края полигонов. Профессиональные принтеры сами интерпретируют тот же PostScript как им требуется. На бытовых принтерах задача отрисовки возлагается на софт — что приложение отправит драйверу, то и будет напечатано.
Это понятие идёт из темы цифровой обработки сигналов. "Квадрат" возникает, например, при передискретизации изображения из низкого разрешения в высокое методом ближайшего соседа. Один чёрный пиксель превращается в чёрный квадрат. При уменьшении картинки происходит обратный процесс — исходное изображение делится на квадраты, каждый из которых после вычисления среднего значения цвета превращается в один пиксель. "Квадрат" — это очень простой, но плохой фильтр, дающий заметный алиасинг. Для лучшего сглаживания мелких деталей перед уменьшением масштаба нужно пройтись по изображению фильтром нижних частот, т.е. удалить высокие частоты, чтобы избежать появления артефактов алиасинга.
Применительно к теме статьи — при рендеринге векторной графики, обладающей бесконечной чёткостью, в пиксельную, имеющую конечную чёткость, также имеет место передискретизация. Она может быть проведена без фильтра нижних частот (алгоритм Брезенхема), с простейшим фильтром — тот самый "квадрат" (алгоритм Ву), или с более сложным фильтром свёртки. На практике обычно на один пиксель редко приходится много мелких элементов векторной графики, и точности алгоритма Ву вполне хватает. Но если вы захотите, к примеру, отрендерить сетку из прямых чёрных линий, отстоящих друг от друга на 0.9 пикселя, то на каждые 9 квадратных пикселей придётся 10 линий, и вы получите артефакт алиасинга — 1 пиксель из 9 будет темнее остальных. В таком случае, чтобы получить равномерный фон, вам понадобится хороший фильтр нижних частот, а не "квадрат".
Отличная статья, и спасибо автору за то, что он коснулся проблемы гамма-коррекции в цветовых каналах sRGB и показал "как привыкли" и "как надо" смешивать цвета.
Как известно, первичная обработка изображения происходит уже в сетчатке (имеются три типа ганглиозных клеток, реагирующие на световой on-off, контрастный и синий стимулы). В латеральном коленчатом теле таламуса выделяют 6 слоёв клеток, в каждом слое имеются нейроны, которые в своём перцептивном поле распознают определённые специфические стимулы, например, грани, движение и т.д. Но у меня вызывает удивление, каким образом данная нейронная сеть, структура которой практически полностью сформирована к моменту рождения, обучается различать предмет не по локализации, а по форме.
Конечно, в процессе обучения постоянно возникают и исчезают миллионы синапсов. Но при этом все нейроны жёстко «привязаны» к своим местам, они не могут перемещаться и «сканировать» изображение, для того чтобы найти в нём какую-то деталь. Вместо этого существует некий непостижимый, но мощный и эффективный механизм параллельного обучения кучи нейронов одному элементу изображения.
Но интересно даже не это, а то, каким образом зрительный анализатор одинаково воспринимает одну и ту же картинку в разных частях поля зрения, если сигнал проходит при этом через разные нейроны.
В мозге нет свёрточных нейронных сетей. Нельзя просто так взять и переключить группу нейронов зрительной коры, чтобы они обрабатывали сигнал, возникший, к примеру, не слева, а справа от точки фиксации.
Возьмём любой стимул, пусть это будет буква… буква Б. Посмотрим прямо на неё, потом чуть левее, чуть правее, выше, ниже. Каким участком поля зрения её ни разглядывай, по-прежнему это будет Б. Как это мозг так делает?
Калькулятору уже 30 лет, но до сих пор обнаруживается что-то новое.
Давно это было, да и калькулятор уже не работает, но, слава энтузиастам, есть его точный эмулятор. Попробую кое-что вспомнить:
1. На МК-61 стоял 12-разрядный индикатор, но 1 и 10 разряды были «физически неполноценными», у знака мантиссы был только один сегмент — минус, у знака порядка — только четыре верхних сегмента.
2. Был способ поместить цифру в знак мантиссы — сформировать число с порядком от 400 до 409, результат появлялся в регистре С. Но дисплей (см. п. 1) ничего кроме минуса не показывал. В эмуляторе этот трюк работает, и там действительно появляется цифра 2 или 9.
3. Отобразить символ в знаке порядка можно с помощью «длинного монстра» или АСО-анализа, но при этом получается несохраняемое число.
4. Можно создать 3ГГОГ с произвольной мантиссой, поместив её в регистр Y, в регистр Х — символ «пусто» и нажав Fx² CX XY. Потом из него как-то получается число с той же мантиссой и порядком --L. При любых изменениях этого порядка с помощью «ВП-число» шестнадцатеричные символы пропадают. Большего я добиться не мог :)