Pull to refresh

Comments 51

ох уж эта манера письма, как будто вы пишете не людям, а рецензентам из акад. наук. Чтобы хоть что-то понять, пришлось читать дважды очень медленно. Но понятие разгона и расширения динамического диапазона я так и не осилил.

ps
принята к публикации LAP LAMBERT Academic Publishing

Это, если честно, не дает вам чести. Они публикуют всех, независимо от содержания работы =)
принята к публикации LAP LAMBERT Academic Publishing

Это, если честно, не дает вам чести. Они публикуют всех, независимо от содержания работы =)

Ссылка на Amazon страницу хорошо смотрится в резюме.

Это если Вы подаёте резюме на непрофильное направление. Если же общаетесь с профессионалами, то публикация LAP смотрится плохо.

Мой текущий работадатель был впечетлён ссылкой.

Совершенно нечитабельно. После прочтения остался неразрешённым вопрос, в чем преимущество перед аналогами? «Предпрослушивание» в прикладном мире называется «прогрессивное декодирование». Расширение динамического диапазона за пределы слышимости сомнительное достижение.
По вопросу «в чем преимущество перед аналогами?» — мне не известны аналогичные алгоритмы, расчитывающие уравнения по исходному аудио потоку, но по степени сжатия сравними с FLAC.
Простите, но не понял смысла вашей фразы
расчитывающие уравнения по исходному аудио потоку
.
За неимением аналогичного танка, сравниваем с бричкой.

Известные мне аудио форматы основаны на линейном базисе аппроксимации и сохраняют в файл реакцию базиса на входной поток, но фрактальный анализ позволяет найти уравнения, близко аппроксимирующие аудио поток. Это как разница между растровыми и векторными шрифтами.

Как я уже написал выше, отсутствие прямого аналога не освобождает от необходимости сравнить с другими алгоритмами сжатия. Вы смело сравнили степень сжатия с FLAC, но он сжимает без потерь, в отличие от вашего алгоритма. Даже если уровень сжатия сопоставим, то можно ли сравнивать производительности этих алгоритмов? Иначе выходит, что ваш алгоритм проигрывает по всем параметрам, кроме оригинальности.

Прошу, не будте таким жестоким. Представленный алгоритм отличается только оригинальностью (производительность очень и очень низкая — на кодирование 4 минутного трека требуется 2 часа!!!). Он представляет необычное инженерное приложение необычной математической концепции.
По поводу выигрыша, и проигрыша — формат FLAC имеет только одно преимущество перед другими форматами, но он популярен. В конечном счёте все решает рынок :)

Ни капли жестокости, обычная объективность. Чтобы алгоритм нашёл свою нишу, ему не обязательно быть популярным, достаточно обладать каким-то преимуществом, либо в производительности, либо в качестве работы. Но ваш алгоритм не обладает таковыми перед существующими аналогами. Он сжимает с потерями, значит с lossless кодеками его сравнивать нельзя, тогда надо смотреть на ogg и mp3, а с ними ваш алгоритм не может тягаться ни по времени сжатия, ни по степени.
Вероятно, ваш алгоритм мог бы заменить какой-то компонент в уже существующем алгоритме сжатия и тем самым повысить степень сжатия. Подумайте над этим.
А пока вы сделали работу just for fun.

Я не отрицаю что этот проект — "just for fun", как и большенство на GitHub. Это интересная инженерная задачка — применить элементы рекурсии к задаче, обычно решаемой не рекурсивными алгортмами. Идея сравнить фрактальные преобразования и искуственные нейронные сети мне показалась весьма занимательной.

где-то в середине поста.
Именно эта проблема и не позволяет перейти фрактальному анализу изображений из области экзотических исследований в сферу индустриальных стандартов.

Пока формат хуже MP3. По степени сжатия сравними с FLAC.

Ваше сравнение разгона с mp3 не понятно, у mp3 же вообще гибридный фильтрбанк (PFB + MDCT). Размер фрейма 1152 семпла, 32 subband (с децимацией), на каждое mdct преобразование остается 36 семплов. Откуда у вас 128?
Согласен с ошибкой о 128 семплов, но в «Salomon.D — data compression the complete reference 4th edition» — «The frequencies
have to be computed from the samples. This is why the first step in MPEG audio
encoding is a discrete Fourier transform, where a set of 512 consecutive audio samples is
transformed to the frequency domain. Since the number of frequencies can be huge, they
are grouped into 32 equal-width frequency subbands (layer III uses different numbers
but the same principle).» mdct не может быть над 36 семплами.
Простите, но вы приводите цитату из описания психоакустического анализа для MPEG1 Layer2. В том же документе на который вы ссылаетесь несколькими страницами далее будет уже про Layer3:
The MDCT uses n input samples xk (where n is either 36 or 12) to obtain n/2 (i.e.,
18 or 6) transform coefficients Si

Вот смотрю для подтверждения исходники Lame:
/*-------------------------------------------------------------------*/
/* */
/* Function: Calculation of the MDCT */
/* In the case of long blocks (type 0,1,3) there are */
/* 36 coefficents in the time domain and 18 in the frequency */
/* domain. */
/* In the case of short blocks (type 2) there are 3 */
/* transformations with short length. This leads to 12 coefficents */
/* in the time and 6 in the frequency domain. In this case the */
/* results are stored side by side in the vector out[]. */
/* */
/* New layer3 */
/* */
/*-------------------------------------------------------------------*/


Согласен с вашим замечанием, но тогда как MDCT может быть быстрым? Размер базиса должен быть равен степени 2 от натурального числа — 2^N.

Это интересное замечание.

Afaik не обязательно.
1. Для FFT есть эффективные алгоритмы не только для степеней двойки, но и для простых чисел и для произведения небольших простых чисел (они сложнее, чем для степени двойки) — вероятно, для MDCT они тоже есть.
2. Для небольших значений размера делаются свои алгоритмы со специфическими оптимизациями (типа учёта того, что cos(pi/4)=sin(pi/4) или что sin(pi/6)=1/2).
Какой-то псевдо-математический язык. Или неграмотный перевод. Лучше дайте ссылки ссылка на оригинальные работы на английском языке.
Что такое длина вектора, это норма или размерность? Что означают бинарные операции «кружочек» и «звёздочка»?

Всем, кто заинтересовался, посмотрите статью 2011-го года, опубликованную здесь же, на Хабре. Там есть и ссылка на статью в трудах конференции, где есть математическое описание алгоритма. Более полный список источников есть в Википедии.
Обычный перепост научной статьи, не думаю, что автор ставил перед собой задачу написать грамотно и понятно, скорее чтобы выглядело «умно». Так пишут чтобы было поменьше вопросов у рецензентов или оппонентов. Чем хуже понял смысл написанного — тем меньше задаст вопросов.

Подробные математические определения вы можете найти в моей книге по ссылкам. Если вам жалко денег(всего то 5000 руб. — 100 AUD), то можете поискать в Интернете мою оригинальную диссертацию. Как я указал в начале — "В данной публикации я хотел бы представить ряд идей и опыт практического воплощения элемента теории Хаоса — фрактального преобразования в проекте разработке нового алгоритма сжатия аудио данных." Основная цель статьи — указать на связь фрактальных преобразований и искуственных нейронных сетей.

Жалко? Ох, ЛОЛ. А ты смелый, псевдоучёный.
Это уже не первый случай, когда я сталкиваюсь с разработкой сомнительного качества и, на возникающие вопросы, автор отвечает предложением купить фекалию за большие деньги. Тенденция.

А кто вам предлагает что либо покупать? Это свободный мир Open Source.

Мне правда интересно, а «Хаос», в Вашем прочтении, это имя собственное? Почему с заглавной?
Мне правда интересно, а «Хаос», в Вашем прочтении, это имя собственное? Почему с заглавной?

С заглавной буквы для привлечения внимания. Сам термин "теория хаоса" крайне условен и связан с неустойчивостью динамических систем.

О, не надо подробностей, я более-менее представляю, что такое хаотические системы.
Чисто в режиме занудства: привлечение внимания в названии ещё понятно, но в комментариях? Впрочем, это риторический вопрос.
Извините, я не совсем понял. Вы делаете сжатие во временной области или частотной? Если временной, тогда искажения, вносимые алгоритмом, будут иметь намного более разрушительный характер. Ведь природа звука, как и механизм его восприятия, принципиально отличается от графики — ведь мы воспринимаем не мгновенные значения амплитуд как таковые, а спектральную составляющую звука (в сильно упрощённой интерпретации).

А поскольку ваш алгоритм с потерями, характер вносимых искажений намного более важен, чем время работы или степень сжатия. То, что не видно на картинке, будет ясно слышно в звуке, и наоборот — пример чего, например, является эффект Гиббса.

Сжатие в данном случае не совсем корретный термин. В алгоритме отсутствует сама концепция сжатия — удаления избыточности. Алгоритм НЕ включает психоакустические модели и НЕ включает удаление статистической избыточности. Алгоритм просто находит уравнения, выражаущие подобия. Сжатие получается за счёт того, что на 4 семпла по 16 бит (64 бита) алгоритм выдаёт 5 байт — 40 бит. Ядро алгоритмов сжатия с потерями изначально не формируют поток с меньшим числом бит — им требуется статистический кодер, который в данном алгоритме отсутствует. По поводу "будут иметь намного более разрушительный характер" — размер областей изменяется динамически от 32 семплов до 4 — 32/16/8/4 в зависимости от отклонения от среднего значения. Я думаю, что вы согласитесь, что во временной области аудио данные в пределах 4 семплов изменяются медленно. Конечно, особым случаем является шум и подобные ему звуки — при поиске подобия фактически оценивается корреляция разных областей. Корреляция шума близка к нулю и идентична корреляции для блоков без звука — тишины. Отклонения качества фрактального анализа от оригинального потока можно исправить путём вычисления отклонения фрактальной модели от оригинального потока.
По поводу "эффект Гиббса" — это явление характерно для востановления исходного сигнала по реакции ортогонального разложения — если часть данных была удалена или искажена, то возникает неполнота базиса. Однако, фрактальные преобразования формируют непрерывные не дифферинцируемые (аналитически) кривые (условия проекции одной области кривой в другую формирует точки разрыва первого рода). Это значит, что если в потоке есть резкие переходы значений большой амплитуды — точки разрыва первого рода, то они будут сохранены без "эффект Гиббса".

Я думаю, что вы согласитесь, что во временной области аудио данные в пределах 4 семплов изменяются медленно

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

Эффект Гиббса же я упомянул прямо с противоположной целью — как искажение, которое хорошо видно графически (в jpeg) и практически не слышно в звуке — mp3.
Не соглашусь, потому что такая формулировка как минимум некорректна. Но дело вовсе не в этом.

Соглашусь, что рассуждения о 4 семплах интуитивны(через 2 семпла — точки можно интерполировать только прямую линию, 3 семпла — точки для кривой и 4 семпла — точки для удобства на обычной процессорной архитектуре).


Если в результате вашего алгоритма на краях областей возникают разрывы,

Разрывы на краях областей могут возникать, если отклонения подобия будут велики. В проекте код сравнивает каждую текущую область с 1017 подобными областями. Значения разрывов крайне малы — в худшем случае 4 семпла по краям имеют усреднённое значение. Это НЕ приводит к паразитным гармоникам, потому что синтез и анализ ведутся во временной области — в таком случае понятие спектра и гармоники теряют смысл.

Сжатие в данном случае не совсем корректный термин. В алгоритме отсутствует сама концепция сжатия — удаления избыточности.

Я вижу противоречие. Разве у вас в заголовке не написано — «Новый Алгоритм Сжатия»? Алгоритм сжатия без концепции сжатия?

Я ошибочно указал


отсутствует сама концепция сжатия — удаления избыточности

Установление подобия между областями можно интерпретировать как удаление избыточности по аналогии с библиотечными алгоритмами энтропийного сжатия, однако дробность метрического пространства фрактальных преобразований наталкивается на ограничение неделимости одного семпла — каждый семпл подобен остальным и тогда возможен фрактальный анализ без потерь, но тогда на один семпл в 16 бит в алгоритме будет приходиться 5 байт — 40 бит. Эту ситуацию нельзя определить как сжатие. Однако, если определить минимальную область, на которой искуственно останавливаем делимость, равной 4 семплам, то на 4 семпла по 16 бит (64 бита) алгоритм выдаёт 5 байт — 40 бит. Это можно интерпретировать как сжатие, но с потерями. Уравнения фрактального преобразования выполняют сжатие в той-же мере, как параметрическое уравнение окружности сжимает растровое изображение окружности (по уравнению можно синтезировать растровое изображение окружности, идентичное оригинальному).

Прошу обратить внимание на "кривую Коха" — геометрический фрактал, который навёл меня на мысль о применения фрактальных преобразований в области звука — эта кривая похожа на осцилограмму звука.


image

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

Похожа, но не эквивалентна.


одному значению времени соответствует только одно значение амплитуды

В данном случае не надо прямо переносить "кривую Коха" на пространство аудио потока. Я хотел продемонстрировать применимость фрактальных преобразований 2D пространству в форме, похожей на осциллограмму. Выражение "одному значению времени соответствует только одно значение амплитуды" является только условием заполнения исходного множества — также как одному пикселю изображения соответствует одно значение яркости. Ещё раз — "одному значению времени соответствует только одно значение амплитуды" лишь условие ограничение, которое создаст фрактальное преобразование с подобным-же условием — если НЕТ семпла нарушающего подобного условия, то и фрактальное преобразование не создаст подобный семпл — данное условие будет отражено в УРАВНЕНИЯХ фрактальных преобразований.

Есть ли уже скомпилированный кодер? В вашем проекте я не нашёл консольной версии, только под Qt.

К сожалению, проект только под Qt. Этот проект был также поводом для обновления моего старого опыта на Qt. Проект преостановлен достаточно давно.

А можно узнать необходимую версию Qt?
Проект создавался под Qt 5.4 Open Source.
К сожалению, при попытке компиляции появляются ошибки,
например:
..\..\..\..\ROAD-development\ROADcodec\ROADdecoder\Driver\DataDriver.cpp: In static member function 'static std::unique_ptr<ROADdecoder::Driver::IDataReadDriver> ROADdecoder::Driver::DataDriver::getIDataReadDriver(std::shared_ptr<unsigned char>&, PlatformDependencies::ROADUInt32, Endian::EndianType)':
..\..\..\..\ROAD-development\ROADcodec\ROADdecoder\Driver\DataDriver.cpp:12:90: error: 'std::unique_ptr<Endian::IEndianConvertor>' is an inaccessible base of 'PlatformDependencies::Unique_ptr<Endian::IEndianConvertor>'
std::unique_ptr<IDataReadDriver> result(new DataReadDriver(aData, aLength, lconvertor));
^
..\..\..\..\ROAD-development\ROADcodec\ROADdecoder\Driver\DataDriver.cpp: In static member function 'static std::unique_ptr<ROADdecoder::Driver::IDataReadDriver> ROADdecoder::Driver::DataDriver::getIDataReadDriver(ROADdecoder::Driver::DataContainer*, PlatformDependencies::ROADUInt32, Endian::EndianType)':
..\..\..\..\ROAD-development\ROADcodec\ROADdecoder\Driver\DataDriver.cpp:23:90: error: 'std::unique_ptr<Endian::IEndianConvertor>' is an inaccessible base of 'PlatformDependencies::Unique_ptr<Endian::IEndianConvertor>'
std::unique_ptr<IDataReadDriver> result(new DataReadDriver(aData, aLength, lconvertor));

Я что-то не так делаю?
Почему вы не хотите выложить исполняемый файл(ы)?
Проект включает несколько веток разработки. Стабильным является master branch — tag v0.0.2. Я скомпилировал код этой ветки на Qt5.7 mingw32 без проблем. Я работаю на Windows и представил исходный код на Qt для кроплатформенного решения, поэтому исключил исполняемые файлы.
Исполняемый файл для Winamp можно найти сайте CodeProject.
Наконец-то смог откомпилировать проект и сделать несколько измерений. Так как результаты получились довольно объёмные, оформил их в виде отдельной статьи (в песочнице) с некоторыми дополнительными замечаниями.
Интересно будет ознакомиться с результатами, но ждать потребуется долго — месяц или два. На CodeProject модерация проходит быстрее.
Only those users with full accounts are able to leave comments. Log in, please.