![]() |
|
![]() ![]() ![]() |
|
podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
Итак, по многочисленным просьбам в теме о распознавании речи
выделяю сабж в отдельный топик. Для начала имеет смысл напомнить об общей процедуре классификации, приведенной там же. Здесь только несколько слов о некоторых моментах практической реализации обсуждаемого. В основном будем придерживаться общей схемы процедуры классификации. Начнем с главного. Теорию вейвлетов можно почитать в разных источниках. Наиболее понятные мне: есть на сайте http://www.matlab.ru/wavelet/index.asp (ссылки внизу страницы). Очень толковые материалы здесь: http://www.autex.spb.ru/wavelet/, причем много в pdf. Обращаю ваше внимание на то, что здесь используем именно вейвлет-пакет. Ниже идет код функции, реализующей вейвлет-преобразование сигнала, записанного в массив sg. Для чего нужна переменная flag, скажу позже, там станет ясно. Физический смысл используемого преобразования состоит в том, что для разложения исходного сигнала по уровням используется его прореживание во временной области (для простоты скажем, разбиение на четные и нечетные отсчеты) плюс некоторые дополнительные преобразования. В частотной области это (опять же упрощенно) равносильно разбиению спектра на две половины. Применямый здесь вейвлет вряд ли вы где-либо найдете ![]()
Я здесь не привожу код алгоритма БПФ fft(...), т.к. он уже был показан, например, здесь. To be continued... З.Ы. Просьба ждать терпеливо... ![]() ![]() И напоминаю, что если вам нравится, как мы общаемся, то можете оценить свое настроение по 10-балльной шкале внизу страницы ![]() |
|||
|
||||
podval |
|
||||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
Теперь посмотрим, как этот вейвлет-пакет выглядит.
Для начала представим, что у нас в массиве wavesig имеется wavesig_dim отсчетов (в моем варианте не более 1024) сигнала. Формируем вейвлет-пакет с помощью рассмотренных выше функций.
Чтобы посмотреть собственными глазами, выводим это на форму с компонентом TPaintBox
Все еще to be continued... ![]() |
||||
|
|||||
Crait |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 244 Регистрация: 20.2.2003 Репутация: 1 Всего: 1 |
Podval, очень интересные статьи.
Будет ли продолжение ? И вот еще вопрос - не пробовал ли ты сравнивать информативность коэффициентов вейвлет- и Фурье-спектров в процедурах обработки реальной речи ? |
|||
|
||||
podval |
|
||||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
Естественно, я хочу продолжить, только есть один гемморой: хочу выложить картинки, а никак. А то без картинок неинтересно.
Что имеется в виду под информативностью? Я могу сказать, что вейвлетами вытаскиваются мелкие детали окраски тембра, по которым можно однозначно идентифицировать диктора. Фурье-анализом так не сделать. А что еще интересует? |
||||
|
|||||
Crait |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 244 Регистрация: 20.2.2003 Репутация: 1 Всего: 1 |
Под информативностью я подразумевал вот что.
(Sorry, если я хочу слишком много ![]() Сколько коэффициентов вейвлет-спектра стоит использовать в процессах идентификации (по сравнанию с количеством коэффициентов амплитудного спектра Фурье, дающим где-то сходный результат) ? Интересен был бы ответ даже на уровне "больше-меньше". При использовании спектра Фурье для обработки речи дело обстоит так, что характерная информационность сосредоточена в определенной полосе частот, либо, скажем, в первых 12 коэффициентах кепстра. Локализован ли так же вейвлет-спектр, либо для каждого диктора/фонемы по-разному ? Т.е., можно ли на практике не заниматься выделением спектральных составляющих, максимально различных для разных, хм, образов, а проводить типа просто корреляцию с набором образцов ? Далее. Точность прямого расчета Фурье-спектра в таких задачах часто оказывается недостаточной из-за ограничений на длину выборки, обусловленных нестационарностью сигнала. Как обстоят дела у вейвлетов с точностью определения характеристик при ограниченной длине выборки ? И еще. Насколько результаты вейвлет-преобразования, как бы это сказать, дикторо-зависимы, либо, наоборот, дикторо-независимы. В сравнении с Фурье, конечно. Извиняюсь за многословность... |
|||
|
||||
podval |
|
||||||||||||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
Ну что тут сказать?
В моих задачах получалось, что меньше. Но дело тут было еще и в точности. Точность однозначно выше.
Вейвлет более локализован.
точность, как сказано, выше. Ведь вейвлету, по большому счету, наплевать на длительность сигнала. Вейвлет локализован не только по "частоте", но и во времени.
Опять же зависит от того, как сформулировать задачу. В той задаче, что я описал, целью является опознать диктора. Если же ставить целью опознавание семантики, то тут и задачу надо формулировать немного по-другому. Я уверен, что это возможно, но я этим не занимался и не встречал пока готовых продуктов, связанных именно с обработкой речи. Видимо, еще не очень популярны вейвлеты, все-таки относительно недавно появились. Даже производители программ и некоторых игрушек типа говорящий словарь-переводчик пользуются Фурье-анализом. Просто вейвлеты только начинают приживаться. Я зато встречал публикации медиков, где с помощью вейвлетов диагностируют язву желудка по вейвлет-картинке распределения потенциалов и еще много чего. А ведь поставить диагноз - это задача, вообще говоря, "пациенто-независимая" ![]() Так что, главное - правильно формализовать задачу. Надеюсь, удовлетворил? Если что, уточняй.
![]() |
||||||||||||
|
|||||||||||||
Crait |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 244 Регистрация: 20.2.2003 Репутация: 1 Всего: 1 |
Спасибо, podval .
Вот ты пишешь, что вейвлет локализован не только по частоте, но и во времени. А как полагаешь, не превратится ли локализация его во времени в некоторую проблему при обработке широко распространенным (в узких кругах ![]() когда входной сигнал делится на пакеты, подвергаемые уже дальнейшей обработке. В таком случае ход времени определяется номером обрабатываемого пакета, а тут еще и информация о локализации внутри пакета... Я понимаю, конечно, информация лишней не бывает, но все же - что ее, игнорировать ? Еще вот, принято ли и имеет ли смысл, как это принято в технике Фурье-преобразования, использовать оконные функции в WT ? И как ты полагаешь, как следует переформулировать задачу, чтобы обеспечить возможную при данном подходе дикторо-независимость ? Я конечно понимаю, что все это похоже на технический шпионаж ![]() ![]() Это сообщение отредактировал(а) Crait - 3.4.2003, 20:44 |
|||
|
||||
podval |
|
||||||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
А разве это проблема? Сначала режешь на пакеты, а потом анализируешь вейвлетами. Или я чего-то не того?
Разные типы вейвлетов имеют разную форму и разные свойства. Использовать что-то дополнительно вроде не имеет смысла.
Думаю, надо работать с фонемами. Возможно, по тому же принципу, как и с использованием Фурье-анализа. Только вместо Фурье используешь другой аппарат - вейвлеты. Ну, может, какие-то свои тонкости появятся. Не занимался я такой задачей. Тут думать надо. |
||||||
|
|||||||
podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
Вернемся к нашим баранам. Если все сделано правильно, то вейвлет-пакет должен выглядеть примерно так:
![]() Здесь использовано 8 уровней разложения в вейвлет-пакет. Нулевой уровень (на рисунке он верхний) представляет собой ни что иное, как исходный сигнал. Обратите внимание, что основная энергия сигнала концентрируется в основном в низкочастотных коэффициентах (левые "половинки"). И если внимательно вглядывались в приведенный выше код (не для слабонервных ![]() Надеюсь, не очень задурил ![]() Посмотрите, вот, как может концентрироваться энергия сигнала в других участках "спектра" (надеюсь, не забыли, почему слово спектр взято в кавычки?) ![]() |
|||
|
||||
Crait |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 244 Регистрация: 20.2.2003 Репутация: 1 Всего: 1 |
Я спросил об этом потому, что повышенная точность представления функции ограниченным рядом вейвлетов (аппроксимация) обусловлена, как мне показалось, именно тем, что используется информация не только об амплитуде, еще и о временнОм положении вейвлета. Корректно ли будет ее игнорировать и не потеряется ли при этом преимущество перед рядами Фурье? Хотя, с другой стороны, игнорируем же мы фазовую информацию, анализируя амплитудный Фурье-спектр... Это сообщение отредактировал(а) Crait - 5.4.2003, 21:58 |
|||
|
||||
podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
Более того, мы об этом еще не говорили, но вейвлеты можно масштабировать! Если встретишь такое выражение - кратно-масштабный анализ - поинтересуйся, что это за вещь. |
|||
|
||||
podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
Траблы с картинками устранил. Смотрите, наслаждайтесь, и скоро поедем дальше
![]() |
|||
|
||||
podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
Вернемся к нашей задаче классификации. Наша уель сейчас - посмотреть, как формируется эталонное описание (эталон) на основе вейвлет-пакета. Используем те же функции, что рассмотрены ранее. Только теперь, когда раскладываем выборку сигнала в вейвлет-пакет, будем суммировать энергию отдельных коэффициентов. Это даст нам картинку распределения энергии сигнала. Собственно, мы такую картинку уже наблюдали (см. рисунки выше), когда рассматривали, как может концентрироваться энергия сигнала в различных участках вейвлет-спектра. Теперь только осталось просуммировать энергию отдельных коэффициентов. Поехали...
![]() Нижеследующая функция coefplan берет выборку размером all сигнала sg, раскладывает в вейвлет-пакет по уровням (level - их количество) и записывает в массив e энергии вейвлет-коэффициентов.
В принципе, ничего сложного: взяли ту самую картинку, что выше, и получили новую: ![]() |
|||
|
||||
podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
Для того, чтобы все имеющиеся эталоны были соизмеримы, надо их еще отнормировать к максимальному значению энергии. Тогда максимальный будет иметь значение, равное единице. В этом случае алгоритм не будет ошибаться на разнице эталонов и реальных сигналов в абсолютных значениях энергетики.
|
|||
|
||||
Guest_Voland |
|
|||
Unregistered |
Добрый день! Можно покоментировать этот фрагмент? Откуда берётся массив serm и какова его длинна ? Где будут результаты преобразования? В serm или sperm ? |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |