Задача изменения голоса. Часть 3. Прикладные модели представления речевого сигнала: LPC

    image

    Продолжаем цикл статей, посвященных задаче изменения человеческого голоса, над решением которой мы работаем в компании i-Free. В предыдущей статье я попытался кратко рассказать о математическом аппарате, применяемом для описания сложных физических процессов, происходящих в речевом тракте человека при произнесении звуков. Были затронуты вопросы, связанные с моделированием акустики речевого тракта. Были описаны допустимые во многих случаях упрощения и аппроксимации. Итогом статьи было приведение физической модели распространения звука в речевом тракте к простому дискретному фильтру.

    В данной статье хочется с одной стороны продолжить предыдущие начинания, а с другой — немного отойти от фундаментальной теории и поговорить о более практических (более «инженерных») вещах. Кратко будет рассмотрена одна из прикладных моделей, часто применяемая при работе с речевым сигналом. Математическая база этого подхода, как это часто бывает, изначально была заложена в рамках исследований совершенно другой направленности. Тем не менее физические особенности речевого сигнала позволили применить данные идеи именно для его эффективного анализа и модификации.

    Предыдущая статья, в силу специфики рассматриваемого вопроса, была перенасыщена научными терминами и формулами. В данной — мы постараемся вместо детального описания математических построений сделать акцент на идеологическую концепцию и качественные характеристики описываемой модели.

    Далее будет более подробно рассмотрена теория модели LPC (Linear Prediction Coding) – замечательный стройных подход к описанию речевого сигнала, в прошлом определивший направление развития речевых технологий на несколько десятилетий и до сих пор часто применяемый, как один из базовых инструментов при анализе и описании речевого сигнала.



    Упрощенная дискретная модель речевого сигнала


    В данном пункте мы сделаем переход от дискретной модели речевого тракта из прошлой статьи, (та модель описывала только распространение звука в трубах с постоянной площадью поперечного сечения), к более полной модели, описывающей весь артикуляционный процесс. Основная идея модели формулируется достаточно просто — представим себе, что анализируемый нами дискретный сигнал y(n)* является выходом линейного цифрового фильтра** h, через который проходит некоторый «возбуждающий» сигнал x(n):
    _____________________________
    * — здесь и далее мы будет говорить только о дискретных сигналах и переменную времени t будем заменять на индекс дискретного отсчета n
    ** — сразу приносим извинения за некоторые ссылки на англоязычные источники, но нередко в них требуемый вопрос раскрыт более полно и в одном месте, надеемся языковой барьер не будет большой преградой.



    Логично предположить, что, изменяя коэффициенты фильтра h_k, а, возможно, в некоторых случаях сам «возбуждающий» сигнал, можно добиться другого звучания выходного звука*. На словах все весьма просто, но теперь попробуем разобраться, какое отношение эта совершенно абстрактная обобщенная идея может иметь к речевому сигналу.
    _____________________________
    * — как и в предыдущей статье, символом « _ » мы будем обозначать операцию индексирования, а символом « ^ » — операцию возведения в степень.

    Кратко напомним, а заодно немного обобщим рассказанное в самой первой статье. Формирование звуков речи можно, с небольшими оговорками, описать следующим образом:

    1) голосовая щель в гортани является «базовым» источником звука (здесь с участием голосовых связок порождается тот самый вокализованный или невокализованный сигнала возбуждения из 1-й статьи)

    2) органы речевого тракта выше гортани являются одним сложным акустическим фильтром, усиливающим одни и ослабляющим другие частоты

    3) «последний штрих» к конечному звуку добавляет процесс излучения звуковых волн ртом или носом

    Последний пунктом можно в некотором роде пренебречь, т.к. данное преобразование над сигналом можно аппроксимировать дифференцированием и, соответственно, сравнительно просто обратить его воздействие на сигнал. С первыми двумя история несколько сложнее. Оба данных процесса не стационарны во времени. При генерации вокализованного сигнала возбуждения, период смыкания и степень смыкания складок голосовой щели в гортани непрерывно меняется, что порождает изменение в длительности и в форме «гортанных» воздушных импульсов: как следствие, меняется интонация и интенсивность звука, эмоциональный окрас речи. Речевой тракт выше гортани является одним большим подвижным акустическим фильтром, его камеры и смычки, изменяя свою геометрию, меняют положение резонансных (формантных) и антирезонансных частот — меняется тип произносимого вокализованного звука с точки зрения фонетики. При произнесении невокализованного звука голосовые складки не работают, и гортань является источником шумового сигнала. Работа остального речевого тракта при этом принципиально не меняется и, как следствие, спектр шумных звуков речи также имеет формантную структуру, хоть и несколько менее «заметную». Сказанное выше можно проиллюстрировать следующей упрощенной схемой:



    Соответствующие элементы из 1-го рисунка обозначены серым шрифтом вверху.

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

    Преимущества, которые дает данный взгляд на процесс звукообразования:

    — возможность рассматривать сигнал возбуждения речевого тракта и его дальнейшее распространение по речевому тракту независимо друг от друга (в действительности они все-таки взаимосвязаны, однако данная взаимосвязь не всегда ярко выражена и в некоторых случаях ей можно пренебречь)

    — возможность анализа речевого тракта как линейной стационарной (на коротких временных интервалах) системы

    — возможность хорошо аппроксимировать большинство звуков в речевом сигнале

    Конечно, как это всегда бывает в реальной жизни, данный упрощенный подход не так прост для практического применения. Множество неопределенностей возникает даже на этапе разбиения анализируемого сигнала на вокализованные/невокализованные сегменты. Только для этой задачи в общем случае требуется непростая обработка сигнала с привлечением серьезного мат. аппарата. Следующим сложным моментом является нестационарность рассматриваемых процессов, и при этом x(n) меняется гораздо более стремительно, нежели h(n). Для получения достоверных оценок параметров данной модели наиболее оптимальной является обработка сигнала на временных сегментах, длительность которых кратна периоду основного тона, что не просто, с учетом того, что этот период постоянно меняется. Также стоит упомянуть ограниченную применимость данной модели для описания некоторых согласных звуков, в частности фрикативных и «взрывных». При произнесении звонкого фрикативного звука, вокализованный возбуждающий сигнал проходит через значительное сужение в той или иной части речевого тракта, что приводит к формированию сильного турбулентного шума. Глухой фрикативный произносится аналогично, с тем различием, что возбуждающий сигнал изначально шумовой. Таким образом, шумовая составляющая фрикативных звуков в значительной мере формируется уже в речевом тракте, а не только в гортани, что не учитывается данной моделью. «Взрывные» звуки — особый случай, рассмотрение которого мы пока что опустим.

    Перейдем теперь от обобщенной дискретной модели к конкретным прикладным моделям, позволяющим оценить те или иные параметры речевого сигнала.

    Коэффициенты линейного предсказания (Linear Prediction Coding Coefficients или просто LPC)


    Метод LPC бесхитростно подходит к описанной выше обобщенной дискретной модели речевого сигнала. А именно — LPC-коэффициенты непосредственно описывают речевой тракт V (см. предыдущий рисунок). Данное описание конечно же не является исчерпывающим и является некой аппроксимацией реальной акустической системы. Однако, как утверждается теорией, и как многократно доказано практикой (взять хотя бы алгоритмы CELP, применяемые в современных сетях сотовой связи), эта аппроксимация является вполне достаточной для многих и многих случаев. Белым пятном в LPC-модели остается сигнал возбуждения речевого тракта, который на практике либо никак существенно не меняется, либо, например, заменяется на какой-либо заранее рассчитанный, как в CELP.

    Опишем более формально, какое именно место занимают LPC-коэффициенты в рассматриваемой системе. Cигнал на входе речевого тракта (на выходе голосовой щели) будем далее обозначать как g[n]. Пока что не будем заострять внимание на природе этого сигнала – шумовой или гармонической. Сигнал на выходе дискретного фильтра, которым мы аппроксимируем речевой тракт будем обозначать v[n]. LPC-модель таким образом решает обратную задачу — мы будем искать g[n], а также параметры фильтра, который превратил g[n] в v[n], имея в своем распоряжении только v[n].

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



    где G – некоторый сложный многочлен, зависящий от коэффициентов отражения r_k, a_k — некоторые действительные коэффициенты, также зависящие от r_k, P – количество труб в рассматриваемой модели. Поскольку мы рассматриваем сигнал на коротких временных интервалах, справедливо предположить «неподвижность» речевого тракта во время анализа, и, соответственно, постоянные значения площадей сочлененных труб, которыми мы аппроксимируем речевой тракт (см. предыдущую статью). Исходя из этого, коэффициенты отражения r_k мы полагаем постоянными, что, в частности, приводит к постоянному значению многочленов G и a_k на анализируемом сегменте речи.

    Алгебру приведения разностных уравнений, описывающих состояние каждой трубы в составе речевого тракта (см. предыдущую статью), к данному простому на вид уравнению мы приводить не будем по понятным причинам. Само же данное уравнение представляет собой важный фундаментальный результат — при рассмотрении речевого тракта как системы сочлененных труб возможно привести его к виду линейной стационарной системы (ЛТС), а именно к БИХ-фильтру, содержащему только полюсы (забегая вперед сразу скажем, что эти полюсы и соответствуют так «горячо любимым» нами формантным частотам). Схема работы подобной системы изображена ниже:



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



    Весьма интересный результат: сложный процесс звукообразования в речевом тракте сводится к тому, сигнал на выходе системы в момент времени n является суперпозицией входного сигнала в момент n, домноженного на константу, и линейной комбинации предыдущих выходных отсчетов в моменты n — 1, n — 2 … n — p. Но не будем забывать, что это конечно же всего лишь аппроксимация, игнорирующая многие детали.

    Чтобы получить описание состояния речевого тракта на анализируемом сегменте речи, необходимо решить задачу оценки коэффициентов a_k и G. Теория адаптивной фильтрации в целом, и модель LPC в частности, позволяют решить данную задачу сравнительно просто и вычислительно эффективно. Полученное описание речевого тракта будет далеко не исчерпывающим, но достаточным для многих задач.

    Нахождение LPC-коэффициентов


    Для решения задачи оценки коэффициентов a_k удобно ввести понятие фильтра линейного предсказания, задача которого получить достоверные оценки искомых коэффициентов (оценки будем далее обозначать как a'_k). Выход фильтра предсказания (v'(n)) можно вычесть из сигнала на выходе речевого тракта (полученную разность будем далее называть «сигнал-ошибка»):



    e(n) — сигнал-ошибка. Коэффициенты a'_k вместе с G и называют коэффициентами линейного предсказания, LPC-коэффициентами. В случае, когда оценки a'_k близки к истинным значениям a_k, e(n) будет стремиться к G∙g(n). Отметим, что фильтр линейного предсказания является в данной задаче обратным фильтром к нашей аппроксимации речевого тракта. Если оценки a'_k близки к истинным a_k, то данный фильтр (обозначим как v^(-1)_k) способен обратить воздействие речевого тракта на сигнал g(n) с точностью до константы G:



    Вернемся к оценкам a'_k. Выбрав некий сегмент сигнала для анализа (предположим длины M), с помощью выражения (3) можно получить вектор сигнала-ошибки аналогичной длины. Вопрос — как теперь имея данный вектор сформировать состоятельные оценки a'_k? Данную задачу можно решить, применяя метод наименьших квадратов. Для этого производится поиск минимума функции E_n, значение которой равно среднему от суммы квадратов значений сигнала-ошибки на некотором анализируемом временном интервале (функция E_n является ничем иным, как среднеквадратическай ошибкой). Другими словами — ищутся такие параметры a'_k, при которых функция среднеквадратической ошибки E_n принимает минимальное значение. Сама среднеквадратическая ошибка в нашем случае выражается формулой:



    Нахождение среднего подразумевает деление на количество элементов (умножение на 1/М), однако данный множитель никак не повлияет на решение искомой системы, поэтому его можно опустить.

    Ещё раз для ясности опишем, что выражает формула (4):

    1) в окрестности момента времени 'n' берется M отсчетов сигнала (как правило, от n до n + M – 1).Число М зависит от частоты дискретизации сигнала и о наших предположениях о длине интервала стационарности этого сигнала.

    2) Для выбранных отсчетов составляется выражение, соответствующее ошибке предсказания e(m), m = n: n+M-1

    3) Находится среднее от квадратов e(m) (в выражении для среднего опускаем деление на количество членов суммы).

    4) Полученное среднее E_n (являющееся функцией от номера отсчета n) мы и будем минимизировать.


    Почему в качестве меры достоверности нашего фильтра предсказания применяется именно среднеквадратическая ошибка? Во-первых, она является неплохой численной аппроксимацией дисперсии случайного процесса в некоторых случаях. Если предположить, что наша ошибка распределена нормально и наш фильтр предсказания не сильно смещен, то среднеквадратическая ошибка будет стремиться к дисперсии D[e(m)] и мы, таким образом, ищем минимум дисперсии нашего сигнала-ошибки. Во-вторых (правда, это скорее не причина, а удобное следствие), данную функцию весьма удобно дифференцировать по искомым a'_k, а именно с помощью дифференцирования удобно искать минимум функции.

    Раскрыв знак квадрата под суммой в (4) и приравняв нулю значения производных E_n по каждому a'_k, возможно получить систему из P линейных уравнений вида:



    Подробный вывод (5) из (4) приводить также не будем — для этого нужно применить несколько формул из школьной алгебры и некоторые формулы для преобразования определенных сумм. Система уравнений (5) является «основным ядром» в алгоритме LPC. Индекс i соответствует номеру уравнения в системе (номеру a'_k, по которому брали производную) и, так же, как и индекс k, проходит все значения от 1 до P. Напомним, что P соответствует числу труб в модели, аппроксимирующей речевой тракт. Это же число называют порядком линейного предсказания. Решение систем линейных алгебраических уравнений — отдельная прикладная область со своим математическим аппаратом, поэтому в данную задачу углубляться мы не будем. Скажем лишь, что для решения конкретно системы (5) с учетом её свойств как правило применяют разложение Холецкого или рекурсию Левинсона-Дарбина

    Решив систему из P уравнений от P неизвестных, мы получаем оценки a'_k, и остается только найти коэффициент усиления G. В методе LPC оценка G находится после оценки a'_k, исходя из предположения, что сигнала на входе фильтра V является либо смещенной в момент времени n дискретной дельта-функцией (единичный импульс в момент n), либо белым шумом. В обоих случаях G можно найти из соотношения:



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

    Строго говоря, на выходе голосовой щели в гортани — на входе речевого тракта, мы имеем либо «гортанный» импульс, либо окрашенный шумовой сигнал, но никак не дельта-функцию или белый шум. И вот тут в теории LPC делается весьма хитрый «финт ушами». Мы воображаемо представляем гортань частью речевого тракта и говорим, что вот именно в гортань-то якобы входил как раз либо единичный импульс, либо белый шум. Понятие речевого тракта, таким образом, несколько расширяется в рамках нашей модели, и чтобы учесть новой моделью эффекты, которые делают из единичного импульса «гортанный» импульс, а из белого шума окрашенный шум, мы увеличиваем порядок линейного предсказания P. Более того, мы идем дальше и включаем в наш «LPC-фильтр» эффекты, связанные с излучением сигнала, что также компенсируем добавлением дополнительных коэффициентов. Данные операции соответствуют увеличению длины нашего полюсного фильтра, которым мы аппроксимируем речевой тракт, что приведет к росту числа его полюсов, и именно эти дополнительные полюсы отвечают за означенное выше воображаемое превращение. Очевидно, что в таком случае модель LPC уже не вполне соответствует изначальному дискретному фильтру, аппроксимирующему речевой тракт. Однако идеологически эти два подхода остаются весьма близкими, если не сказать «родственными». Восстановить с помощью LPC сигнал возбуждения речевого тракта g[n], в том виде, как мы этого хотели вначале, не представляется возможным. Тем не менее, итоговая аппроксимация частотной характеристики речевого тракта (коэффициенты a'_k), полученная с помощью LPC, достаточно точна для многих задач.

    Раз заговорили о выборе порядка P, логично дать какие-то общие рекомендации по его выбору. Считается, что в среднем формантные частоты в речевом сигнале располагаются с плотностью примерно 1 форманта на килогерц. Тогда, поскольку каждый комплексный полюс нашего модельного фильтра соответствует одной формантной частоте, удобно выбирать порядок, как:



    где [] — округление до ближайшего целого числа, Fs — частота дискретизации сигнала в герцах. Для компенсации эффекта совмещения гортани и речевого тракта, а также для учета в модели эффекта излучения сигнала губами/носом, различные источники рекомендуют увеличить P дополнительно на 2-4 коэффициента. Т. е. для работы, например, с 10 КГц сигналом, порядок P можно выбрать равным 12-14 коэффициентов. Некоторые авторы также советуют применять плотность «1 форманта на 1200-1300 Гц», когда анализируется женский голос. Это связано с меньшей длиной речевого тракта у женщин и, как следствие, более высокими значениями формантных частот в женских голосах.

    Краткий итог по модели LPC


    Что в итоге нам дает расчет LPC-коэффициентов для некоторого сигнала:

    1) Выходом алгоритма расчета LPC является набор числовых коэффициентов, которые описывают полюсный фильтр. Данные коэффициенты в чистом виде позволяют получить выражение для выхода данного фильтра во временной области (выражение (2)), а также общий вид его z-характеристики (выражение (1)). Поскольку данный фильтр является полюсным, то в его основе лежит рекурсия и выразить импульсную характеристику для такого фильтра не представляется возможным. С помощью z-характеристики, тем не менее, возможен полноценный анализ полученного фильтра как во временной, так и в частотной областях.

    2) Если разложить на множители знаменатель полученной z-характеристики, становится возможным найти численные значения частот, соответствующих полюсам данного фильтра. Эти же значения хорошо аппроксимируют формантные частоты речевого тракта на анализируемом сегменте речи. (Правда стоит добавить, что точность аппроксимации зависит от грамотного выбора базовых параметров LPC — порядка P, длительности анализируемого интервала M, времени начала анализа n. Для общего случая автоматизировать этот выбор не так просто.)

    3) Полученный с помощью LPC сигнал-ошибка (сигнал возбуждения дискретного фильтра, которым мы аппроксимируем процесс звукообразования) выходит похожим либо на белый шум, либо на смещенную во времени дельта-функцию. (данный пункт наиболее активно эксплуатируется при сжатии речи)

    Ниже для примера приведен логарифмический спектр сигнала, полученный обычным БПФ, и с помощью LPC. Обрабатывалась гласная «А», произнесенная мужским голосом.



    Как видно, «LPC-спектр» является некоторой сглаженной версией обычного «БПФ-спектра». При этом формантные частоты проявляются «яркими» локальными максимумами, что является хорошим «стартом» для их обнаружения и слежения за ними.

    Применение LPC для анализа речевого тракта


    Как было сказано в предыдущей статье, при представлении речевого тракта в виде сочлененных труб фиксированного диаметра возможно аппроксимировать процессы, происходящие внутри каждой трубы при распространении по тракту звука, с помощью разностных уравнений. При этом уравнения будут зависеть от коэффициентов отражения r_k, где k – номер рассматриваемой трубы. Данные коэффициенты в свою очередь зависят от отношения площади рассматриваемой трубы к площади следующей за ней трубы. Граничные условия (первая труба после гортани и последняя перед губами) берутся из особых формул, зависящих от соответствующих акустических импедансов, которые в свою очередь могут в большинстве случаев быть табличными функциями. Ранее в статье без доказательства приводился тот факт, что из совокупности дискретных разностных уравнений, описывающих такую систему, можно вывести соотношение (1), которое можно принять удобной отправной точкой LPC-анализа.

    Сам по-себе LPC-анализ – достаточно «прямолинейный» и эффективный метод. Сразу может появиться вопрос, а возможно ли, рассчитав LPC-коэффициенты некоторого сигнала, каким-то образом восстановить параметры речевого тракта? На данный вопрос нельзя дать на 100% положительный ответ. С одной стороны, LPC-коэффициенты являются многочленами от r_k, и практически возможно проделать обратную операцию – восстановить r_k из a'_k. Для этого можно применить переходный этап в виде PARCOR (partial correlation) коэффициентов. Т. е. из LPC-коэффициентов рассчитать PARCOR-коэффициенты, а уже из них r_k. Однако есть одно осложняющее обстоятельство: в модель LPC включаются эффекты, связанные с прохождением сигнала через гортань и его излучением в районе губ, что никак не соответствует модели речевого тракта в виде дискретного фильтра из предыдущей статьи (число труб в модели речевого тракта уже не равно порядку линейного предсказания P). В случае, если каким-то образом обратить воздействие на сигнал гортани и излучения, и проводить LPC-анализ этого модифицированного сигнала, то возможно получить более состоятельные оценки коэффициентов отражения на основе LPC. Опять же стоит помнить, что даже в таком случае, коэффициенты отражения могут показать лишь отношения площадей соседствующих труб в модели речевого тракта — не имея никаких начальных приближений, не удастся восстановить абсолютные значения площадей. Т. е. мы сможем восстановить некоторую функцию, повторяющую площадь речевого тракта, однако отличающуюся от неё на некоторый масштабирующий множитель.

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

    Сам по себе подход к анализу площади речевого тракта с помощью LPC имеет множество погрешностей, связанных с допущениями, которые мы изначально делаем, полагая в качестве модели речевого тракта линейный дискретный фильтр — об этом много было сказано в предыдущей статье. Исследования на данную тему велись и ведутся, неплохие результаты достигнуты, но действительно точно восстановить функцию площади речевого тракта на сегодняшний день в общем случае невозможно, ни с применением LPC, ни с помощью каких-либо принципиально иных подходов.

    Выводы


    В данной статье кратко описаны основные идеи и идеология LPC-модели представления речевого сигнала. Данная модель является одной из наиболее часто применяемых в области обработки речи и, несмотря на свои фундаментальные ограничения, дает весьма неплохие оценки реальных физических феноменов. Наиболее часто данная модель применяется для задач:

    — сжатия речи

    — анализа формантных частот

    — анализа речевого тракта (в качестве вспомогательного инструмента)

    В следующей статье мы расскажем про HPN-модель (Harmonics-plus-noise) речевого сигнала, в рамках которой речевой сигнал в явном виде разделяется на вокализованную и невокализованную составляющие.

    Использованная литература:
    [1] J.L. Flanagan. Speech Analysis, Synthesis and Perception.
    [2] L.R. Rabiner, R.W. Schafer, Digital Processing of Speech Signals // (основной первоисточник данной статьи)
    [3] Солонина И.А. Основы цифровой обработки сигналов, 2-е издание // (хорошее краткое, но немного «сухое» объяснение, как инструкция к применению )
    [4] Mark Hasegawa-Johnson, Lecture Notes in Speech Production, Speech Coding, and Speech Recognition
    [5] G. Fant. Speech Acoustics and Phonetics. Selected Writings
    .
    i-Free Group
    Company
    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 15

      0
      Пост великолепен, абсолютно ничего лишнего и все по делу, с нетерпением жду следующей статьи!
        +9
        Поделюсь одним своим опытом. Вдруг кому будет интересно, или пригодится. Извиняюсь за многобукафф — в двух словах не объяснить.

        Одно время много занимался вопросом звукообразования — правда с противоположной стороны (т.е. в части вопроса распознавания речи, в основном гонял тесты на базе TIMIT). В попытках наиболее ёмко вычленить, что же превращает просто звук в речь — пробовал в том числе идти и от физики звукообразования (и много чего еще пробовал). Но все такого рода формальные теории давали слишком «грязные» результаты. После этого родилось у меня одно, так сказать, «асимметричное» решение.
        Мысль была простая: коль скоро есть идеальный инструмент анализа звука, умеющий отлично отличать речь от обычного звука (моё ухо), то можно попробовать пойти от противного. Взять речь, то бишь вокализованные звуки, и начать глумиться над амплитудно-фазово-частотными характеристиками, прослушивая получившиеся результаты, и тем самым методом ручных тестов — определять, что же делает звук — фонемой.
        Разумеется, для этого вначале была решена задача качественного автоматического разбиения речи на однократные периоды колебаний, далее в рамках каждого периода — делалось Фурье, на результаты Фурье — накладывались разные воздействия, далее производилось обратное преобразование, полученные кусочки «модернизированной» речи склеивались в итоговый сигнал, и производилось прослушивание.
        В результате огромного кол-ва таких тестов (явно больше чем несколько сотен, скорее речь про пару тысяч прослушиваний по разному скорректированной речи, для широкого набора дикторов), мне стало очевидно, что стандартные применяемые алгоритмы распознавания речи — крайне далеки от реальности. Фактически, для уха, в части именно распознавания самой фонемы — значение имеет исключительно динамика изменения амплитуд фурье-спектра от колебания к колебанию. Всё остальное (конкретная форма амплитудной зависимости спектра, где находятся всеми любимые форманты, как меняются фазовые соотношения в сигнале и т.п.) не имеет совершенно никакого значения. Т.е. вообще не существенно. Максимум — всё это дает (на слух) просто другие обертона/половую принадлежность/оценку возраста, но при этом устойчиво распознается как речь — и смысл речи читается абсолютно однозначно. Даже когда сигнал превращается в хрип-писк, т.е. на каждом колебательном цикле — случайным образом изменены амплитуды и фазы, так что от «вокализованности» не остается и следа а сам сигнал слышится скорее как «звук тупой пилы по мокрому дереву» нежели как речь — всё равно этот шум-скрип однозначно складывается в уверенно распознанную речь, при совершенно невероятных амплитудах коррекции (по отношению к исходным амплитудам) — при которых там не то что формант различить нельзя, а вообще сам звук не имеет ничего общего с тем что может издавать человек. А вот обратная ситуация, т.е. плавное системное изменение динамики амплитуд частот (по мере «разворачивания» фонемы во временной области) резко ухудшает распознавание, вплоть до полной его невозможности.

        Тем самым я пришел к простому выводу: увлечение формантным анализом, кепстральными коэффициентами и т.п. — изначально очень далеко от того, что нужно делать по крайней мере если говорить про задачу распознавания речи (все такого рода подходы конечно частично «цепляют» динамику изменения амплитуд частот, но именно что частично).

        Соответственно, прочитав пост выше, возникла мысль, что в части генерации голоса, либо его изменения — наверное можно попробовать идти аналогичным путем. Т.е. не от теории, а от практики. Накладывать дополнительное преобразование на амплитуды и фазы частот исходного сигнала (разумеется с первоначальным разбиением на единичные колебательные циклы), и проводить опрос — что изменилось в характеристиках речи (стала ли она более женственной или мужественной, как изменился возраст распознаваемый из речи, и т.п. и т.д.). Для большого массива дикторов, и большого массива преобразований — снять ответы большого массива «инструментов» (т.е. слушателей). А далее уже на базе большого массива данных по такого рода «измерениям» — построить преобразователь, позволяющий «поправить» голос в сторону нужной характеристики (используя стандартные алгоритмы, вроде нечеткой логики/нейросетей/т.п.). Т.е. просто «измерить ухом» те изменения, которые необходимо вносить в сигнал, чтобы поменять речь в требуемую сторону. Вот такая мысль. Хотя, думается, чтобы реализовать подобный подход — наверное надо быть Гуглом.
          +3
          Здравствуйте!

          Спасибо за интерес к статье и Ваши комментарии! Из большого количества высказанных Вами мыслей позволю себе ответить лишь на некоторые, но перед этим хотел бы задать несколько вопросов. За одно Вы меня поправите, если я Вас не правильно понял :) итак…

          1) «Разумеется, для этого вначале была решена задача качественного автоматического разбиения речи на однократные периоды колебаний, далее в рамках каждого периода — делалось Фурье, на результаты Фурье — накладывались разные воздействия ....»
          Не совсем понимаю о каких «однократных периодах » идет речь. Имеете ли Вы ввиду частоту основного тона или что-либо другое? Если первое, то смысл дальнейших преобразований более-менее понятен. Если нет — не могли бы Вы более подробно объяснить, на какие именно сегменты вы делили входной речевой сигнал?

          2) Изменения проводились только на вокализованных образцах речи? На каких языковых единицах проводились преобразования? Отдельные фонемы? Слова? Предложения?

          3) Вы были единственным слушателем синтезированных Вами звуков?

          4) "… при совершенно невероятных амплитудах коррекции (по отношению к исходным амплитудам) ..." не могли бы Вы привести какие-либо конкретные числа? Или хотя бы их порядок односительно исходных амплитудных значений.

          Прошу не думать, что я пытаюсь Вас на чем-то подловить! Мне действительно хотелось бы понять что именно Вы делали и к каким результатам в итоге пришли!

          +2
          По пунктам.

          1. Да, разумеется речь про частоту основного тона. Но, поскольку даже в рамках одной фонемы эта частота непрерывно «плывет», то и говорить про частоту можно лишь довольно условно, корректнее говорить про локальную длительность разового размыкания голосовой щели. Что я и подразумеваю под «однократным периодом».

          2. Я «игрался» и целиком над предложениями от разных дикторов (которые есть в базе TIMIT), и над отдельными словами, и над кусочками фонем. Всё пробовал в общем — что мог охватить технически, и на что хватало фантазии. Т.е. отдельно не разделял речь на вокализованные и не вокализованные куски, алгоритм разбивал на периоды — всё подряд, но, разумеется, на не вокализованных отрезках это разбиение носило достаточно условный характер (хотя тоже имело место, и получающаяся «длина окна» была одного порядка с той что возникала на вокализованных участках, чтобы сохранить единообразие).

          3. Звуки не вполне синтезированные — ибо они всеж генерировались на базе реальной речи реальных людей. В качестве слушателей на начальном этапе привлёк родичей (брата и сестер, ну и родителей), но быстро выяснилось что значимых различий в восприятии в целом нет — так что достаточно одного меня. Так что бОльшую часть всех дальнейших экспериментов делал уже только «в одно ухо» — моё ).

          4. Дело было примерно 3 года назад — точные цифры не назову конечно. Но насколько помню, амплитуда искажений примерно на порядок (т.е. в 10-20 раз больше исходного уровня) хотя и полностью убивала «человечность» звука, но оставляла его информационную составляющую.

          Но все преобразования носили именно относительный характер. Т.е. просто накладывать шум (любой природы) на исходный сигнал — это не интересно (да и не соответствовало направлению поиска и задачи). Т.е. за условную единичную амплитуду брался именно исходный сигнал, и далее он изменялся в % от себя самого. Т.е. например — взять все амплитуды фурье-спектра, и домножить их на, скажем, синус, т.е. sin(f), где f — частота фурье-спектра. Или на экспоненту. Или на любую случайную функцию частоты (вплоть до шумовых функций). Но именно домножить а не прибавить. То же самое — с фазой.

          На самом первом этапе таких измывательств над звуком — был сильно удивлен простому наблюдению. А именно, если взять просто один период колебаний (т.е. время одного размыкания голосовой щели), и «растиражировать» его вдоль временной оси, то вместо звука фонемы — возникает просто некое абстрактное гудение. Всегда — каков бы ни был вырезанный из реальной фонемы одиночный участок. Несколько периодов основного тона — тоже особо не спасают, просто гудение становится чуть сложнее — но остается гудением, а не звуком голоса.
          Далее попросил родичей, и записал с микрофона длительно (постоянно в течение многих секунд) произносимую гласную букву. Типа «ааааааа» непрерывно секунд 10-15. И то же самое — с повышением и понижением частоты основного тона (т.е. звук «ааааа» начинающийся с очень низкого тона, плавно в течение 4-6 секунд поднимающийся вверх, и потом так же плавно спадающий). Проверял ряд идей по тому как меняются зависимости в рамках одного диктора — и одинаковые ли такие зависимости для разных дикторов…
          Ну так вот, чтобы длительный просто постоянный звук «аааааа» воспринимался ухом именно как звук речи, а не как гудение, обязательно должны присутствовать определенные динамики амплитуд частот. Причем — не случайного характера. Т.е. если взять просто одно колебание, и далее его растиражировать с случайными небольшими отклонениями по амплитуде-фазе, то такая штука всё равно воспринимается как гудение — просто зашумленное. И только в малом % случаев от общей длительности синтезированного сигнала (видимо где случайные поправки «попадают» в естественные зависимости) это гудение распознается как звук речи (голос). Соответственно, общепринятые идеи о том, что мол линейная модель хорошо описывает речевой тракт — верны в смысле математики, но не верны в смысле информационной значимости того, что важно а что нет для уха человека. Для уха человека, де-факто, оказываются важны как раз вот эти самые «малые погрешности» такой модели (приводящие к тому, что именно малые но системные отклонения амплитуд и фаз частот от «идеальных» и распознаются ухом как речь, а не как металлизированное гудение), а основное «ядро» такой модели — как раз вторично (т.е. линейное «ядро» это всего-лишь «носитель» для информационно-значимых зависимостей, но не сама искомая зависимость; эдакая «канва», которая сама по себе не важна — т.е. вообще не важно какова она в моменте, а важна только её динамика).

          Ну и много всякого такого пробовал. Например с шепотом — где источник возбуждения это вообще почти-что белый шум, но это совершенно не мешает уху выделять ровно те же самые зависимости что и на вокализованной речи (и «игры» с принудительными корекциями речи шепотом — приводят к тем же результатам что и для вокализованной речи). Хз, почему исследователи вообще не «роют» тему шепота, по идее это же как раз во многом более простая ситуация (постоянный источник возбуждения голосового тракта, с понятным распределением по частотам) — разобравшись в механизмах которой, можно намного продуктивнее работать с вокализованной речью…

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

          Вот где-то на этом месте я и устал от данной темы, ну и отложил её в долгий ящик (во многом в связи с тем, что дальнейшие изыскания в таком направлении требуют уже команды, одному — стало тяжело, а свободное от работы время — не резиновое ). Т.е. софт до сих пор лежит на диске, равно как и база TIMIT, но энергия закончилась ). А тут наткнулся вдруг на Вашу статью, и «душа разбередилась». Потому и пишут так много наверное ).
            +2
            Большое спасибо за такой развернутый рассказ! Вы затронули очень много интересных моментов, которые исследовались и исследуются многими!

            Вы совершенно справедливо отметили, что именно «неровности» и «шероховатости» в вокализованном сигнале возбуждения делают из него живой человеческий голос, а не монотонный роботизированный звук. Тут конечно уже встает вопрос цели исследования — синтезировать разборчивую речь (что уже вполне возможно), либо синтезировать натурально звучащую речь, что пока ещё нельзя назвать решенной задачей. В обоих случаях, эта «линейная модель» (назовем пока так) играет весьма значитеьную роль. В первом — её одной уже вполне достаточно для синтеза вполне разборчивой речи. Конечно параметров там будет значительно больше, нежели рассказано в статье, но это проблема статьи :) Во втором случае — она играет незаменимую роль в качестве некоторой исходной «точки отсчета», если можно так выразиться. Она дает базовые соотношения, над которыми можно уже экспериментировать, ставить опыты, делать выводы. Тяжело искать отличия в множестве объектов не имея никакого эталона. Данная линейная модель звукообразования и может быть этим базовым, максимально упрощенным эталоном.

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

            К вопросу модификации амплитуд/фаз при обработке коротковременного спектра. Соглашусь с Вами, что фазы модифицировать можно самым причудливым образом. Конечно с условием, что работаем на коротких временных отрезках, даже не обязательно кратных периоду основного тона. Собственно именно на этом построен т.н. эффект «whisperization». Разборчивость речи при этом вполне сохраняется, хотя конечно человеческим голосом подобный звуки назвать язык не повернется :) Насчет амплитуд — уже не так все очевидно. Модифицируя амплитуды испортить разборчивость значительно проще. Согнасен, что менять их можно, согласен, что порой весьма сильно и смысл речи при этом можно будет разобрать. Но именно, что порой… Говорить, что можно с ними делать практически все, что угодно, и при этом речь останется разборчивой — в общем случае я бы не рискнул… Тут пожалуй стоит говорить о конкретной реализации и параметрах: что менялось, по какому закону, как часто, какой входной сигнал… Непростой вопрос, чтобы сразу на него ставить какие-то штампы…

            Ещё раз большое спасибо за столь развернутый ответ!

              +1
              В задачах распознавания речи конечно используют цепи Маркова, но, насколько я в курсе, как правило в несколько другом контексте. Когда уже, в каком-то виде, найдены вероятность принадлежности локального речевого кусочка ко всем фонемам, тогда развертку таких вероятностей во времени — действительно можно использовать для цепей Маркова (для распознавания уже конкретных фонем). Но это — уже второй этап процесса распознавания. Если сами по себе вероятности принадлежности к фонемам найдены «грязно» — то цепи Маркова не смогут выдать хороший результат. Это, разумеется, просто моё мнение (я много работал и с первичной и со вторичной обработкой сигналов в разного рода задачах распознавания, и для себя пришел к выводу, что именно первичная обработка сигнала — это всегда самое «узкое место»).

              Мне не приходилось встречать работ, где за точку фокуса брали бы именно относительные изменения амплитуд спектра. Причем использовались бы корректно найденные амплитуды — т.к. именно незначительные по амплитуде но системные/плавные изменения амплитуд и оказались решающими исходя из моих экспериментов, а делая поиск оных с окном фиксированной длины — этого никак не достичь. Далее строили бы динамику относительных изменений амплитуд спектра от периода к периоду, и искали бы общие паттерны такой динамики — для разных дикторов (в рамках одной фонемы). Такого — не находил.
              Всем хочется простоты — т.е. малого кол-ва чисел, характеризующих динамику спектра. И в погоне за компактностью описания фич — по сути «гробят» значительную часть критичных (по информационной значимости) данных. Естественно, делая не вполне корректное сворачивание потока речи в фичи (с значительным % потери значимой информации) — в дальнейшем не получить качественного результата, какие бы методы не применялись…
              На мой взгляд, компактное описание фич речи возможно (и фич «человечности» речи) — но его необходимо делать в терминах коэффициентов некоей общей формулы, задающей поверхность, образованную производными по времени — от правильно найденных амплитуд спектра речи, причем эти производные надо нормировать на сами амплитуды. Вот такие коэффициенты (задающие такую поверхность) — были бы необходимы и достаточны для полного описания речи, её паттернов, механизмов «очеловечивания» сигнала, его распознавания, и т.п.
              Но и математически и алгоритмически — это весьма непростая постановка задачи, разумеется.

              По амплитудам. Выше я описывал, что исходя из моих экспериментов, с ними можно делать все что угодно — но только если используется одинаковое преобразование, примененное к каждому периоду основного тона, т.е. преобразование не меняющее сколь-нибудь заметно график производных амплитуд по времени, нормированных на модуль амплитуд. Т.е. берем и умножаем фурье A(f,t) — на функцию S(f), не зависящую от времени (одинаковую для всех фурье). Тогда S(f) может быть практически «от балды». Это в том числе может быть например и функция, обратная амплитудам формант (т.е. по сути выравнивающая средний спектр на прямую линию). Главное чтобы она была одинакова — для всех периодов. А вот если мы берем функцию корректировки зависящую и от времени, т.е. корректировка спектра системно/плавно меняется с течением времени — это резко убивает информацию (для уха). Откуда собственно и следует явный вывод — что значимость имеет только относительное изменение амплитуды, а не абсолютное значение амплитуд. Абсолютное значение амплитуд спектра характеризует суммарно: речевой тракт + окружающую среду (например комнату с её характеристикой) + АЧХ сигнала накачки тракта. Т.е. даже по здравому смыслу — сама по себе амплитуда, и отношение амплитуд разных частот друг в другу «в моменте» — почти ничего не значит (зависит слишком от большого кол-ва параметров). Разумеется, это мои личные выводы — оформлять/доказывать их в виде диссертации я морально не готов.

              Спасибо за Ваш комментарии и в равной степени развернутый ответ.
                0
                Простите, что буду отвечать немного не по-порядку. Итак,

                Если я правильно понял суть Ваших преобразований над спектром — Вы делали обыкновенную фильтрацию в частотной области. С помощью подобной операции действительно не так просто разрушить речевой сигнал до неузнаваемости. Если применялись мультипликативные изменения амплитуд вплоть до 10-20 раз, то это соответствует усилению или ослаблению сигнала на 10-13 дБ по амплитуде (20-26 по-мощности) — изменение весьма сильное, но не фатальное.

                Анализ изменения амплитуд в спектре во времени производится в большом количестве работ по адаптивному шумоподавлению с 1 микрофоном, в работах, посвященных выделению отдельных дикторов из смешанного речевого сигнала, а также во многих работах, посвященных оценке и слежению за формантными частотами. Возможно там изменение амплитуд анализируется в несколько ином контексте, чем это предлагаете Вы, но сам факт анализа A(f,t) применяется во множестве работ.

                Насчет распознавания речи — согласен, что в начальном формировании вектора фич для текущего анализируемого сегмента в классических подходах редко где фигурирует временной контекст. Но тут вопрос немного филосовский: если смотреть на систему распознавания в целом — то производится как раз контекстно-зависимый анализ, важно что было до и важно что идет после — на мой взгляд вполне подходит к понятию «анализ изменения во времени». Опять же если «расчленять» классическую систему распознавания и смотреть только на первичную обработку — соглашусь с Вами, что там контексту обычно уделяют значетельно меньше внимания.
                  0
                  Формально — да, частотная фильтрация (хотя фильтрация подразумевает выделение узкой части спектра — я же использовал самые разные функции, не только локализованные на узкой частотной полосе).
                  Выше я не зря написал, что функция должна быть одного типа. Например, так же отлично подходят все функции типа (1+S(f)*Random()). Т.е. мультипликативная функция шумового характера, такая что амплитуда шумового мультипликатора фиксирована для каждой частоты (не меняется от времени) — но в каждом конкретном периоде основного тона используется своя конкретная случайная величина реализации шума, причем отдельно для каждой частоты — своя генерация ГСЧ. Можно использовать не только белый шум, но и любой другой, можно такую штуку в свою очередь множить на любой фиксированный мультипликатор, и т.п.
                  Так что вкупе с фазовыми искажениями, такого рода преобразования — действительно меняют сигнал до неузнаваемости (и в смысле математики/спектра, и в смысле его «похожести» на речевой сигнал), но — почти не меняют его информационной составляющей (видимо, все эти вариации амплитуд с фиксированной дисперсией — в итоге сглаживаются, и ухом «вытаскивается» именно общая средняя динамика амплитуд спектра — которая оказывается ключевой в смысле информационной значимости).

                  Сам по себе анализ поверхности вида A(f,t) — не будет осмысленным, т.к. сама по себе амплитуда (и отношения амплитуд друг к другу) на практике оказалась не важна. Важна лишь её динамика, т.е. производная амплитуды по времени, у которой исключен фактор масштаба. Например, должна хорошо работать функция вида A'(f,t)/A(f,t) (здесь ' — это производная по времени), т.к. для такой штуки во первых «выцепляется» именно динамика, во вторых именно динамика относительная (т.е. такое выражение будет инвариантом относительно домножения амплитуд на некий масштабный коэффициент, типа громкости голоса, или добротности резонанса речевого тракта на данной частоте).

                  В задаче «очеловечивания» синтезированной речи — на мой взгляд, при том подходе который использовал я, вопрос встает сугубо технический. Записать много разных вокализованных звуков большой длины (чтобы фонема непрерывно звучала нескольку секунд), сопоставить динамики «микро-дрожаний » амплитуд спектра (в виде указанном выше), и микро-вариаций частоты основного тона, ну и вывести итоговую эмпирическую зависимость, позволяющую «очеловечить» синтезированный звук. Потом повторить это же упражнение для заметно изменяющегося тона и/или громкости — доработать эмпирическую формулу для такого случая. Т.е. пойти чисто от практики — вывести требуемую зависимость из большого объема данных, не заморачиваясь на теоретизирование по этому поводу на первой фазе…
                  Ну это уже, так сказать, в порядке размышлизмов.
                  0
                  Мне показалось, что S(f), не зависящая от времени — это, фактически, эквалайзер.
                  Только количество полос у него большое, да пределы усиления/ослабления можно сделать любыми. А так — просто регулировка тембра в магнитоле. Что наводит на мысль о том, что испортить голос он не должен, что согласуется с вашими экспериментами.
                  А вот S(f), меняющаяся во времени — это уже, боюсь, амплитудная модуляция (а то и с фазовой вместе).
                  Даже если пропустить простую синусоиду через S(f,t) [для синусоиды будет только одно значение f], то на выходе получим боковые полосы справа и слева от синусоиды, как у всех сигналов AM-радиостанций. Причём их спектр может быть гораздо шире, чем 1/T, где T-время ваших «однократных периодов». Ибо скачки амплитуды и фазы в S(t) — это, в общем случае, не синусоида с периодом Т, а вообще то, что вам в голову взбрело, меандр там, или что ещё.
                  Так что КАЖДАЯ частота из исходного спектра обрастает боковыми полосами, которых не было в исходном сигнале. Причём состав этих полос зависит от S(f,t). То есть в речь нещадно добавляется то, чего в ней не было, в отличие от S(f), не зависящей от времени. Неудивительно, что речь становится неразличимой.
                  То есть результаты экспериментов мне кажутся объяснимыми, но я их объясняю не так, как вы.
                  Но это на первый взгляд, возможно, я ошибаюсь. Что скажете?

                  P.S. Автору статьи большое спасибо за изложение полезных вещей человеческим языком.
                    0
                    Вы разумеется правы — с формальной точки зрения. Но как обычно это бывает, «дьявол прячется в деталях».

                    1. Поскольку Вы говорите про спектр от всего отрезка речи (т.е. по сути крайне усредненное частотное описание, без учета временой зависимости), то «обрастание» частоты боковым спектром, с формальной точки зрения — тоже может быть рассмотрено как амплитудная модуляция (точнее — амплитудно-фазовая). Т.е. в принципе, любое оконное локальное преобразование можно свести к амплитудной (или фазовой) модуляции — если рассматривать итоговый суммарный (усредненный) спектр от всей речи, а не мгновенный спектр (найденный по малому окну). Фурье в этом смысле, как известно, имеет свои минусы, которые можно «забороть» например через вейвлеты, и для вейвлета — такое преобразование уже не будет выглядеть как добавление бокового спектра. Т.е. формально вы правы, но исходя из физической сути процесса — так рассуждать будет не вполне корректно.

                    2. Помимо указанного выше, есть еще один нюанс. А имеенно — разница амплитуд искажений. Даже очень большие, но постоянные амплитудные модуляции (в том числе — постоянно-шумовые, т.е. по сути резко различные от периода к периоду — но статистически одинаковые по дисперсии амплитуд искажений за большое кол-во периодов) — как-либо заметно не влияют на возможность распознавания речи, хотя для ряда таких преобразований (с использованием ГСЧ на каждом периоде основного тона) сигнал трансформируется в шумоподобный хрип (и для такого варианта преобразования — средний спектр разумеется изменяется до неузнавания, и по фазе и по амплитуде). Однако, даже слабые, но системно-постоянные изменения в амплитудах локального спектра (насколько помню, на уровне где-то 5% от исходной амплитуды и выше) — резко снижают читаемость речи. Хотя, с точки зрения локального фурье (или вейвлет) спектра, такие искажение малы.

                    Так что, учитывая установленную важность процесса «развертки» амплитуд во времени, согласится с Вашей трактовкой не могу. Дело явно в критичной значимости относительных изменений амплитуды, а абсолютное значение амплитуд (в т.ч. расположение формант, отношение амплитуд друг к другу и т.п.) — значения не имеет (если говорить про распознавание смысла речи, а не про вторичные признаки — типа пола человека, возраста, и т.п., т.к. для таких вторичных признаков — уже как раз важны именно абсолютные значения амплитуд, а их динамика вторична, что было очень хорошо слышно).
                      0
                      Пожалуй, спорить не буду. Ваши практические наблюдения перебивают все мои теории, как японская бензопила. Пока что. А, если не секрет, как вы искали частоту основного тона («была решена задача качественного автоматического разбиения речи на однократные периоды колебаний»)? Методов много, но хочется узнать, какой из них больше подошёл?
                        0
                        Конечно не секрет. Пичаль в том, что делал это всё много лет назад — совершенно не помню деталей реализации. Так что для ответа на Ваш вопрос пришлось поднять тулз, которым это всё делалось, и посмотреть по коду — что там у меня накручено… Делал сугубо свой вариант, по свои потребности, не вникая как это обычно делается — так что не в курсе как классифицируется такой метод, и есть ли похожие или нет в лит-ре.

                        Вот картинка: image

                        Это собственно вид моего… эээ… экспериментального сэтапа ))).

                        Вверху — выведен конкретный кусочек речи диктора из базы TIMIT (с разметкой на фонемы — из этой же базы). Т.е. непосредственно звуковые колебания (амплитуда отклонения мембраны микрофона в общем). В данном примере, в окно вывода попало 3000 точек ряда.

                        Что делает алгоритм в целом:
                        1) расчитывается скользящая дисперсия этого ряда, по малому окну (около 10 точек шириной). Это — зеленый график на нижнем окне.
                        2) очень грубо — определяется частота основного тона (из фурье-анализа), простейшим алгоритмом (могу пояснить каким — но это не существенно)
                        3) исходный сигнал «сканируется» окнами с длиной равной примерно полутора периодам основного тона (т.к. период основного тона определяется грубо — то такой запас необходим). Расположение таких окон идет с шагом, равным четверти длины период основного тона из п.2.
                        4) в каждом окне — находится экстремум дисперсии, но не просто экстремум — а с дополнительным условием. Условие состоит в том, что экстремуму должен предшествовать период с низкой дисперсией, т.е. должен наблюдаться резкий «взлет» средней величины дисперсии — и вот тогда такой экстремум дисперсии действительно принимается за «правильное» начало колебаний голосовой щели. Т.е. исхожу из физики — начало размыкания голосовой щели самое громкое, далее амплитуда колебаний спадает (а значит — так же спадает и скользящая дисперсия). Это позволяет игнорировать просто максимум дисперсии (т.к. максимум дисперсии — не обязательно означает начало колебания, как видно на левой части имаджа), и корректно находить именно начало колебаний голосовой щели.
                        5) найденные в п.4 точки таких экстремумов с доп. условием — накладываются друг на друга, и далее «чистятся» от случайных срабатываний такой логики (т.е. остаются только точки, которые алгоритм «видит» в нескольких перекрывающихся окнах, разовое «срабатывание» в конкретном окне — игнорируется). Т.е. простейшая фильтрация от ложных срабатываний установленных (эмпирически) порогов логики.

                        Как можно оценить по данному примеру (это типичный вариант — специально не подбирал), стабильность такого алгоритма отличная. Но, разумеется, он применим только для речи, в которой диктор говорит на хороший микрофон, и нет посторонних шумов. Поскольку у меня именно такая база (TIMIT), то для моих целей (игрищ с принудительным коверканьем речевого сигнала) такой алгоритм дает великолепный результат, не просто разбивая речь на четкие периоды основного тона, но даже — позволяет стабильно выделять именно начало колебаний (момент размыкания голосовой щели).
                          0
                          Большое спасибо, что нашли время покопаться в старом коде, и за подробное описание использованных методов.
                          Буду признателен также за пояснения по п.«2) очень грубо — определяется частота основного тона (из фурье-анализа), простейшим алгоритмом (могу пояснить каким — но это не существенно)».
                          Если я правильно понял, то определение частоты основного тона основано на том, что каждый «однократный период» имеет специальный участок, где он наиболее сильно меняется, подобный импульсу. На нём дисперсия максимальна.
                          На всякий случай посмотрел свои звуки, и нашел в них, например, звук «у», произнесённый мной же, в котором явного импульса нет:

                          Может, у меня «голосовая щель» по другому устроена.
                          И мне кажется, что для такого звука больше подошли бы общепринятые методы поиска ЧОТ, вплоть до простейшей автокорреляции.
                          Тем не менее, было необычайно приятно почитать о нестандартном подходе к распознаванию речи.
                          Всё, что приходилось читать ранее, основано на неприкасаемых методах Рабинера & Co.
                          То, что было хорошо для обработки и компрессии звука, подавалось, как единственный метод для распознавания.
                          И кочуют из одной публикации в другую: Фурье, полосовые фильтры, квадратурные зеркальные фильтры, дискретное косинусное преобразование, вейвлеты, линейное предсказание, кепстры, модели Маркова. А воз и ныне там.
                          То есть не у всех он там. Есть люди, которые в этом разобрались втихаря, например Гугл или Нюанс Софтвер. Но это остаётся их коммерческой тайной, а остальных кормят неадекватными моделями.
                          В общем, успехов Вам, и надеюсь, что начатое когда-то не уйдёт в песок.
                            0
                            Буду признателен также за пояснения по п.«2) очень грубо — определяется частота основного тона (из фурье-анализа), простейшим алгоритмом (могу пояснить каким — но это не существенно)».


                            Ну тут всё просто и действительно очень грубо ).
                            1. Строится фурье по периоду, включающему большой кусок речи диктора (как минимум десятков периодов ОЧТ), с наложенной оконной функцией типа окна Хэмминга (т.е. интересует именно средняя ОЧТ для данного диктора, за большой кусок его речи).
                            2. Рассчитывается средняя амплитуда AF нижних частот (т.е. полоса Фурье в которой лежит ОЧТ у людей).
                            3. Далее иду по амплитуде Фурье слева направо, и тупо ищу первый попавшийся экстремум амплитуды спектра — такой, что он больше AF (либо AF*k, k>1 и подбирается эмпирически). На практике, такой простейший алгоритм дает отличные результаты в подавляющем большинстве случаев (т.к. используется большой кусок речи диктора, и — мне не нужно точное попадание в ОЧТ, хватит и приблизительного, т.е. с точностью до нескольких раз).

                            Если я правильно понял, то определение частоты основного тона основано на том, что каждый «однократный период» имеет специальный участок, где он наиболее сильно меняется, подобный импульсу. На нём дисперсия максимальна.


                            Почти так. Суть идеи — в то, что добротность голосового резонатора весьма низка. Так что колебания (возникшие от разового размыкания голосовой щели) чисто из физики — носят быстрозатухающий характер. И то что я делал как раз и было (весьма грубым) способом измерения динамики локальной энергии колебаний. Можно разумеется сделать и более точную меру энергии колебаний, но мне не потребовалось.

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

                            С другой стороны, если применить мою идею к этому ряду, то она всё равно должно сработать: дисперсия ряда тут явно не равномерная, и явно есть тенденция к затуханию. Т.е. для приведенного Вами сигнала, даже если не сработает «втупую» — можно немного адаптировать алгоритм исходя из его идеи: вместо дисперсии как меры энергии колебаний, находить совсем короткое Фурье (или вейвлеты) и из него рассчитывать локальную энергию колебаний, ну а дальше применять всю ту же идею — что должен быть резки рост энергии после относительного «плато», и начало точки такого роста энергии — это и есть момент размыкания голосовой щели.
                            Общепринятые методы ЧОТ, насколько я в курсе, не позволяют находить именно начало колебательного цикла — а мне это было важно для проверки ряда идей…

                            Да, согласен, в смысле идей — поле распознавания звука крайне бедное, все крутят одни и те же по своей сути подходы, и при этом почему-то надеются получить что-то принципиально новое… После определенного анализа лит-ры я сделал для себя вывод что это бесперспективно и надо искать свой подход, что и вылилось в исследование по «коверканию» звуков.
                            Спасибо за пожелание успехов. Может быть когда-нибудь и вернусь к этой теме. Хотя, думаю, не раньше чем найду единомышленника, одному уже тяжко стало такие проекты тащить — и времени катастрофически не хватает. Работа, семья, всё как у всех…
              0
              del

              Only users with full accounts can post comments. Log in, please.