
- •Домашнее задание
- •Порядок выполнения работы:
- •Часть 1: Разработка простого алгоритма распознавания речевых команд
- •1.1. Ознакомление с возможностями программ CoolEdit Pro и Spectra_Lab
- •1.2 Запись команд
- •1.3. Обработка записанных треков
- •1.4. Построение ачх каждого слова и занесение данных в программу Excel
- •1.5 Построение векторов признаков
- •Часть 2: Построение нечетко-логического алгоритма распознавания голосовых команд
- •2.1 Общие сведения
- •2.2 Ознакомление с главным окном программы FuzzyLogictoolbox
- •2.3 Создание входных переменных
- •2.4 Формирование выходных переменных и базы правил
- •2.5 Заключение
- •Часть 3: Автоматизация
- •3.1 База данных признаков
- •3.2 Постановка задачи
- •3.3 Построение нечетко-логической модели
- •3.4 Распознавание слова
- •Часть 4: Выполнение первой и второй части с использованием аппроксимации ачх и сравнение решения с третей частью
- •Часть 5: Алгоритм распознавания, построенный на нейронной сети
- •5.1. Построение нейронной сети
- •5.2. Обучение сети
- •5.2. Испытания модели
- •5.2.1. Испытание 1. Обучение нейросети по первому и второму файлу
- •5.2.2. Испытание 3. Обучение нейросети по среднему
- •Направления дальнейшей работы
- •Рекомендуемая литература
2.4 Формирование выходных переменных и базы правил
С выходными переменными процедура упрощается. Все они однотипны: областью определения является интервал [0 2]. В точке 1 расположен пик графика, в 0 и 2-нулевые значения. Функция принадлежности у каждой из этих переменных будет всего одна, назвать ее можно так же, как и саму переменную. Две лишние нужно удалить. Для удаления функций принадлежности существует команда edit->remove selected MFs. В результате, все выходные переменные должны выглядеть так, как показано на рис. 13. Последовательность действий аналогично тем, которые вы производили в предыдущем разделе.
Редактор базы правил вызывается командами: edit->rules. База правил будет выглядеть следующим образом (для слов 1, 2, 3, 4, 8, 13):
Всего мы получаем шесть правил вида:
if (имя_вх_перем1 is имя_функ_принадл_перем1_Nслова) and … (имя_вх_перем7 is имя_функ_принадл_вх_перем7_Nслова) then (имя_вых_перемN is имя_функ_принадл_вых_перемN),
где N - номер правила.
Составьте такую же базу правил для всех слов. Далее, выбрав в меню «View» пункт «rules», попадаем в окно, в котором можно распознавать слова (рис. 14):
В поле «input» через пробел указываем те самые семь точек, нажимаем ввод и получаем в результате, на признаки какого слова из базы больше всего похожи эти значения.
2.5 Заключение
Такой, в принципе, простейший алгоритм, сравнивающий слова всего по семи признакам способен обеспечить хорошую достоверность распознавания. В приведенном примере она составляет 74% на 60 тестах. При этом каждое слово было записано10 раз, обработано и проанализировано данным алгоритмом.
В заключительной части работы – протестируйте слова своего коллеги. Занесите результаты теста в таблицу, как на рис. 15 (здесь приведено по десять тестов, в вашем случае будет по четыре теста). Желтым цветом выделены верно распознанные слова, внизу указано количество верно распознанных слов для каждой десятки тестов и итог- среднее арифметическое значение.
Часть 3: Автоматизация
Выше был описан алгоритм «ручного» создания базы данных признаков и нечёткой модели. Этот процесс является достаточно утомительным, особенно при использовании большого числа фраз (например, 15 фраз по 5 образцов записи на каждую). Одним из путей облегчения программирования является использование системы MATLAB – мощной среды программирования, содержащей инструменты для работы со звуковыми файлами и анализа сигналов. Составить в MATLAB программу для автоматического построения нечёткой модели и векторов признаков не особенно сложно.
Как вариант реализации данного подхода предлагается рассмотреть пример готовой программы.
3.1 База данных признаков
Итак, у нас есть исходный материал - по три звуковых файла на каждую команду плюс файл с «чистым сигналом». Для работы со звуковыми файлами необходимо установить “Signal processing ToolBox” для MatLab.
Все необходимые файлы находятся в папке SoundRec, которую необходимо поместить в рабочую папку программы MatLab, например: “c:\Program Files\MATLAB\R2006a\work\”. Также необходимо задать путь к данной папке. Это можно сделать, например, через меню File -> Set Path… (рис. 16).
Откройте файл «generate_model.m». В его начале находится описание будущей базы данных признаков.
Первый столбец матрицы - это названия фраз. Необходимо, чтобы строки с названиями команд были одинаковой длины (этого требует FuzzyLogicToolBox). Длину строк выровняйте пробелами.
Для каждой фразы указаны имена соответствующих звуковых файлов. Расширение “.wav” можно опустить. Все строки должны быть набраны латинскими буквами – при необходимости переименуйте звуковые файлы. Количество образцов для каждой фразы должно быть одинаково.
Последняя строка описывает файл с «чистым сигналом» - он всего один. Надо добавить несколько пустых имен файлов для сохранения размерности матрицы (в данном случае добавлено два элемента – программой они игнорируются).
Еще необходимо задать значения следующих переменных:
Для совпадения с результатами, полученными вручную установите следующие значения:
Iow_bound = 54;
high_bound = 4005;
Параметр delta необходим для того, чтобы АЧХ были построены на одинаковых частотах.
После вычисления все АЧХ пересчитываются для частот:
[low_bound, low_bound+delta, low_bound+2∙delta, … , high_bound]
Далее откройте файл «getAFCs.m» и проверьте, соответствует ли путь к звуковым файлам Вашему пути к папке Samples. Если нет, исправьте его. Если Вы поместили папку SoundRec в рабочую папку MatLab по-умолчанию, то путь должен быть следующим:
обратите внимание на обратный слеш в конце строки!
Запустите программу, набрав её имя в командной строке MATLAB:
Через некоторое время на экране появятся график аппроксимированных АЧХ фраз, график среднего квадратичного отклонения (СКО) аппроксимированных АЧХ (используется для выбора ключевых частот для построения векторов признаков), диаграммы векторов признаков. Также создаются переменные:
vectors - матрица векторов признаков;
wordNames - массив имён фраз;
MODEL - структура, соответствующей нечетко-логической модели.
Программа почти дословно повторяет все этапы вычисления признаков, описанные выше, с одним существенным отличием: АЧХ аппроксимируются методом наименьших квадратов полиномом степени n. Степень полинома можно поменять в файле «getAFCs». Существует много хороших книг по программированию в Matlab – подробное описание использованных процедур выходит за рамки этого пособия (полный и подробно комментированный текст предлагаемой программы смотри в приложении). Укажем лишь ключевые моменты и особенности.
Данные из звуковых файлов загружаются командой wavread . Предполагается, что все они записаны с одинаковой частотой дискретизации.
АЧХ сигналов вычисляются функцией psd. MATlab предоставляет множество алгоритмов для вычисления АЧХ. Здесь, в той или иной мере, применим любой из них.
Наиболее
интересна с точки зрения формализации
задача выбора ключевых частот для
векторов признаков. В данном случае,
для выбора частот с наиболее различающимися
амплитудами был построен график СКО
амплитуд ()
для каждого дискретного значения
частоты. Предпочтительные частоты
соответствуют локальным максимумам
этой функции. Выбирается заданное число
частот, так чтобы все они отличались не
меньше чем наwindow
герц.
Здесь существует следующая проблема – если отрезок window мал, частоты выбираются близко друг к другу, большая область АЧХ в модель не попадает. Если же отрезок window широк, могут быть пропущены явные пики СКО, т.е. самые лучшие частоты для создания признаков. (Или, быть может, для надёжного распознавания достаточно малого участка АЧХ – той области, где СКО имеет узкое «плато»)?
После выбора ключевых частот, выбираются соответствующие значения амплитуды для каждой фразы, строятся, собственно вектора признаков. Теперь можно переходить к созданию нечёткой модели.