Реферат по предмету "Коммуникации и связь"


Разработка программного обеспечения для голосового управления трехмерными моделями функционирования промышленных роботов

РЕФЕРАТ
Метою дослідження є розробка програмного забезпечення дляголосового керування тривимірними моделями функціонування промислових роботів.
Основними задачами є аналіз методів цифрової обробки звуковихсигналів, аналіз систем розпізнання мовлення, розробка програмного забезпеченнядля розпізнання команд керування промисловим роботом.
Розглядаються питання обробки звукової інформації, її аналізу тафільтрації. Проаналізовані методи реалізації систем розпізнання мовлення.
Реалізовано програмне забезпечення для запису, відтворення йаналізу звукової інформації. Програмне забезпечення розроблене в середовищірозробки програмного забезпечення Visual C++ 6.0 з використанням мультимедійноїбібліотеки mmsystem, а також графічної бібліотеки OpenGL.
СПЕКТРАЛЬНИЙ АНАЛІЗ, ДИСКРЕТНЕ ПЕРЕТВОРЕННЯ ФУР'Є, MMSYSTEM,ГРАФІЧНА БІБЛІОТЕКА, OPENGL, СЕРЕДОВИЩЕ ПРОГРАМУВАННЯ, VISUAL C++.

РЕФЕРАТ
Целью исследования является разработка программного обеспечениядля голосового управления трехмерными моделями функционирования промышленныхроботов.
Основными задачами является анализ методов цифровой обработкизвуковых сигналов, анализ систем распознавания речи, разработка программногообеспечения для распознавания команд управления промышленным роботом.
Рассматриваются вопросы обработки звуковой информации, её анализаи фильтрации. Проанализированы методы реализации систем распознавания речи.
Реализовано программное обеспечение для записи, воспроизведения ианализа звуковой информации. Программное обеспечение разработано в средеразработки программного обеспечения Visual С++ 6.0 с использованиеммультимедийной библиотеки mmsystem, а также графической библиотеки OpenGL.
СПЕКТРАЛЬНЫЙ АНАЛИЗ, ДИСКРЕТНОЕПРЕОБРАЗОВАНИЕ ФУРЬЕ, MMSYSTEM, ГРАФИЧЕСКАЯ БИБЛИОТЕКА, OPENGL, СРЕДАПРОГРАММИРОВАНИЯ, VISUAL С++.

THE ABSTRACT
Software development for the voice control by thethree-dimensional models of industrial robots functioning is a purpose ofresearch.
Basic tasks are the analysis of the digitalsounds signal processing methods, analysis of the speech recognition systems, softwaredevelopment for recognition of control commands by an industrial robot.
The questions of sound information processing, ofits analysis and filtration are examined. The methods of implementation of thespeech recognition systems are analyzed.
Software for a record, reproducing and analysisof sound information is implemented. Software is developed in the environmentof Visual C++ 6.0 with the using of mmsystem multimedia library, and alsoOPENGL graphic library.
SPECTRAL ANALYSIS, DISCRETE TRANSFORMATION OFFURJE, MMSYSTEM, GRAPHIC LIBRARY, OPENGL, PROGRAMMING ENVIRONMENT, VISUAL C++.

Перечень условных сокращений, обозначений,терминов
ПР — промышленный робот
ЭВМ — электронно вычислительная машина
ДПФ — дискретное преобразование Фурье
БПФ — быстрое преобразование Фур'е
ЛП — линейное предсказание
PCM — Pulse-Code Modulation

Содержание
Введение
1. Цифровая обработка сигналов и её использование в системахраспознавания речи
1.1 Дискретныесигналы и методы их преобразования
1.2 Основыцифровой фильтрации
1.3 Особенностиакустической фонетики и её* учёт при обработке речевых сигналов
1.4 Обработкаречевого сигнала во временной области
2. Реализация систем распознавания речи
2.1 Гомоморфнаяобработка речи
2.2 Кодированиеречи на основе линейного предсказания
2.3 Цифроваяобработка речи в системах речевого общения человека с машиной
3. Разработка программного обеспечения для распознавания командуправления промышленным роботом
3.1 Реализация интерфейса записи и воспроизведениязвукового сигнала в операционной системе Microsoft Windows
3.2 Реализация программного обеспечения для записи,воспроизведения и анализа звукового сигнала
3.3 Реализация функции распознавания голосовых командголосового управления промышленным роботом
3.4Реализация голосового управления трёхмерными моделями промышленного робота
Выводы
Переченьссылок
ПриложениеА. Элементы текстов программы

Введение
Распознавание человеческой речи является одной из сложныхнаучно-технических задач. В настоящее время пользователями вычислительных машини средств, оснащенных вычислительными машинами, становятся люди, не являющиесяспециалистами в области программирования. Проблема речевого управлениявозникла, кроме того, в связи с тем, что в некоторых областях применения речьстала единственно возможным средством общения с техникой (в условияхперегрузок, темноты или резкого изменения освещенности, при занятости рук,чрезвычайной сосредоточенности внимания на объекте, который не позволяетотвлечься ни на секунду, и т.д.). Хотя в этой области и достигнуты существенныеуспехи, тем не менее, системы распознавания еще весьма далеки по своимвозможностям от человеческих.
Проблема реализации речевого диалога человека и техническихсредств — актуальная задача современной кибернетики.
Задача машинного распознавания речи привлекает вниманиеспециалистов уже очень давно. Тем не менее, продвинуться далеко в этомнаправлении пока не удалось. Чисто формально процесс распознавания речи можноописать буквально в нескольких фразах. Аналоговый сигнал, генерируемыймикрофоном, оцифровывается, и далее в речи выделяются так называемые фонемы, тоесть элементарные фрагменты, из которых состоят все произносимые слова. Затемопределяется, какое слово, какому сочетанию фонем соответствует, и строитсясоответствующий словарь. Распознать слово — значит найти его в этом словаре попроизнесенному сочетанию фонем. По мере развития компьютерных систем становитсявсе более очевидным, что использование этих систем намного расширится, еслистанет возможным использование человеческой речи при работе непосредственно скомпьютером, и в частности станет возможным управление машиной обычным голосомв реальном времени, а также ввод и вывод информации в виде обычной человеческойречи.
В настоящее время всё более актуальным становится управлениероботом при помощи голосовых команд. Однако создание программного обеспечениядля голосового управления промышленным роботом предусматривает проведениеэкспериментов во время разработки программы на всех этапах разработки.Проведение таких экспериментов, обеспечивающих устранение недостатков, ошибокпрограммы, является экономически невыгодным в условиях промышленногопроизводства и приводит к повышению стоимости разработки и отладки программногообеспечения. Для уменьшения затрат на создание программного обеспеченияцелесообразно разработать программу, которая обеспечит трёхмерное моделированиеголосового управления промышленным роботом, что приводит к необходимостипроведения экспериментов в условиях производства лишь на последнем этапе разработкипрограммного обеспечения.
Темой данного исследования является голосовое управлениетрёхмерными моделями функционирования промышленных роботов. Его задачамиявляется анализ методов цифровой обработки звуковых сигналов, анализ системраспознавания речи, разработка программного обеспечения для распознаваниякоманд управления промышленным роботом.

1. Цифровая обработка сигналов и еёиспользование в системах распознавания речи
1.1 Дискретные сигналы и методы ихпреобразования
Акустическое колебание, формируемое в речевом тракте человека,является непрерывно изменяющимся процессом. С математической точки зрения егоможно описать функцией непрерывного времени 1. Аналоговые (непрерывные вовремени) сигналы будут обозначаться через ха(1). Речевойсигнал можно представить и последовательностью чисел. Последовательностиобозначаются через х(п). Если последовательность чисел представляет собойпоследовательность мгновенных значений, аналогового сигнала, взятыхпериодически с интервалом Т, то эта операция дискретизации обозначается через ха(пТ).На рис. 1.1 показан пример речевого сигнала в аналоговой форме и в видепоследовательности отсчетов, взятых с частотой дискретизации 8 кГц.32 мс
Г
____ ^
.„...„.„… .!-«•-■-… и-1"… ".|||||11||||И..||| ...., 256 отсчё!
|||| ■
гов \ ||| г 1 — ► /> /> /> /> /> />
Рис. 1.1 – Представление речевого сигнала
Для удобства даже при рассмотрении дискретных сигналов иногда на графикебудет изображается непрерывная функция, которая может рассматриваться какогибающая последовательности отсчетов. При изучении систем цифровой обработкиречи требуется несколько специальных последовательностей. Единичный отсчет илипоследовательность, состоящая из одного единичного импульса, определяется как
/> (1.1)
Последовательность единичного скачка имеет вид
/>/> (1.2)
Экспоненциальная последовательность
/> (1.3)
Если а — комплексное число, т. е. />, то
/> (1.4)
Если z=1 и />, х(n) — комплекснаясинусоида; если />. х(n)-действительное; если z, то х(n) — экспоненциально-затухающая осциллирующая последовательность. Последовательностиэтого типа часто используются при представлении линейных систем и моделированииречевых сигналов.
Обработка сигналов включает преобразование их в форму, удобную длядальнейшего использования. Таким образом, предметом интерес представляютдискретные системы или, что то же самое, преобразования входнойпоследовательности в выходную. Подобные преобразования далее изображаются наструктурных схемах. Многие системы анализа речевых сигналов разработаны дляоценивания переменных во времени параметров по последовательности мгновенныхзначений речевого колебания. Подобные системы имеют многомерный выход, т. е.одномерная последовательность на входе, представляющая собой речевой сигнал,преобразуется в векторную последовательность на выходе.
При обработке речевых сигналов особенно широкое применение находятсистемы, инвариантные к временному сдвигу. Такие системы полностью описываютсяоткликом на единичный импульс, Сигнал на выходе системы может быть рассчитан посигналу на входе и отклику на единичный импульс h(n) с помощьюдискретной свертки
/> (1.5a)
где символ * обозначает свертку. Эквивалентное выражение имеет вид
/> (1.5б)
Линейные системы, инвариантные к временному сдвигу, применяютсяпри фильтрации сигнала и, что более важно, они полезны как моделиречеобразования.
Анализ сигналов и расчет систем значительно облегчаются при ихописании в частотной области. В этой связи полезно кратко остановиться напредставлении сигналов и систем в дискретном времени с использованиемпреобразования Фурье и z-преобразования [1].
1.1.1 Прямое и обратное г-преобразование
Прямое и обратное г-преобразование последовательности определяетсядвумя уравнениями:

/> (1.6a)
/>  (1.6б)
Прямое z-преобразование х(n) определяется уравнением(1.6а). В общем случае Х(z) — бесконечный ряд по степеням z-1;последовательность х(n) играет роль коэффициентов ряда. В общемслучае подобные степенные ряды сходятся к конечному пределу только длянекоторых значений z. Достаточноеусловие сходимости имеет вид
/>  (1.7)
Множество значений, для которых ряды сходятся, образует область накомплексной плоскости, известную как область сходимости. В общем случае этаобласть имеет вид [2]
/>  (1.8)
1.1.2 Преобразование Фурье
Описание сигнала в дискретном времени с помощью преобразованиеФурье задаётся в виде
/> (1.9a)
/> (1.9б)
Эти уравнения представляют собой частный случай уравнений(1.6а, б).
Преобразование Фурье получается путём вычисления z -преобразованияна единичной окружности, т. е. подстановкой />. Частота /> может бытьинтерпретирована как угол на z — плоскости. Достаточное условие существованияпреобразования Фурье можно получить, подставляя в (1.7)
/> (1.10)
Важная особенность преобразования Фурье последовательности состоитв том, что оно является периодической функцией со с периодом 2к. С другой стороны,поскольку /> представляетсобой значение Х(z) наединичной окружности, оно должно повторяться после каждого полного обхода этойокружности, т. е. когда со изменится на /> рад [1].
1.1.3 Дискретное преобразование Фурье
Как и в случае аналоговых сигналов, если последовательностьпериодическая с периодом N,т. е.
/> (1.11)
то х(n) можно представить в виде суммы синусоид, ане в виде интеграла. Преобразование Фурье для периодической последовательностиимеет вид
/> (1.12а)
/> (1.12б)

Это точное представление периодической последовательности. Однако,основное преимущество данного описания заключается в возможности несколько инойинтерпретации уравнений (1.12). Рассмотрим последовательность конечной длины х(n),равную нулю вне интервала />B этом случае z-преобразованиеимеет вид
/> (1.13)
Если записать X(z) в N равноотстоящих точкахединичной окружности, т. е. />, k= 0, 1,…,N-1, тополучим
/> (1.14)
Если при этом построить периодическую последовательность в видебесконечного числа повторений сегмента х(n),
/> (1.15)
то отсчеты (/>), как это видно из (1.12а) и(1.14), будут представлять собой коэффициенты Фурье периодическойпоследовательности х(n) в (1.15). Таким образом,последовательность длиной N можно точно описать с помощью дискретногопреобразования Фурье (ДПФ) в виде
/> (1.16)

/> (1.17)
Следует иметь в виду, что все последовательности при использованииДПФ ведут себя так, как если бы они были периодическими функциями, т. е. ДПФявляется на самом деле представлением периодической функции времени, заданной(1.15). Несколько иной подход при использовании ДПФ заключается в том, чтоиндексы последовательности интерпретируются по модулю N. Это следует изтого факта, что если х(n) имеет длину N, то
/>
Введение двойных обозначений позволяет отразить периодичность,присущую представлению с помощью ДПФ. Эта периодичность существенно отражаетсяна свойствах ДПФ. Очевидно, что задержка последовательности должнарассматриваться по модулю N. Это приводит, например, к некоторымособенностям выполнения дискретной свертки.
Дискретное преобразование Фурье со всеми его особенностямиявляется важным способом описания сигналов по следующим причинам: 1) ДПФ можнорассматривать как дискретизированный вариант z -преобразования (илипреобразования Фурье) последовательности конечной длительности; 2) ДПФ оченьсходно по своим свойствам (с учетом периодичности) с преобразованием Фурье и z-преобразованием;3) N значений Х(k) можно вычислить с использованиемэффективного (время вычисления пропорционально NlogN) семействаалгоритмов, известных под названием быстрых преобразований Фурье (БПФ).
Дискретное преобразование Фурье широко используется при вычислениикорреляционных функций, спектров и при реализации цифровых фильтров, а такжечасто используется и при обработке речевых сигналов [1-5].
1.1.4 Спектральный анализ
Спектральный анализ – это метод обработки сигналов, которыйпозволяет выявить частотный состав сигнала. Поскольку анализируемые сигналы вомногих случаях имеют случайный характер, то важную роль в спектральном анализеиграют методы математической статистики. Частотный состав сигналов определяютпутем вычисления оценок спектральной плотности мощности (СПМ). Задачамивычисления СПМ являются обнаружение гармонических составляющих в анализируемомсигнале и оценивание их параметров. Для решения указанных задач требуетсясоответственно высокая разрешающая способность по частоте и высокаястатистическая точность оценивания параметров. Эти два требованияпротиворечивы. Аргументы в пользу выбора высокого разрешения или высокойточности оценки СПМ зависят от того, что интересует исследователя: устойчивыеоценки в пределах всего диапазона частот или высокая степень обнаруживаемостипериодических составляющих.
Все методы цифрового спектрального анализа можно разделить, на двегруппы [6-7]: классические методы, базирующиеся на использовании преобразованийФурье, и методы параметрического моделирования, в которых выбирается некотораялинейная модель формирующего фильтра и оцениваются его параметры. К первойгруппе относят корреляционный и периодограммные методы. Ко второй группеотносят методы оценивания СПМ на основе авторегрессии скользящего среднего идр.
Периодограммный метод обеспечивает вычисление оценки СПМнепосредственно по числовой последовательности х[nТ0],формируемой путем дискретизации стационарного эргодического случайного процессаx(t).Периодограммная оценка СПМ равна [6-7]

/> (1.18)
Выражение (1.18) соответствует возможности вычисления СПМ спомощью преобразования Фурье непосредственно по реализации исходного сигнала.
Вычисленная с помощью (1.18) оценка СПМ является несостоятельной,т.е. с увеличением N она не улучшается. Для получения состоятельнойоценки ее необходимо сглаживать. Кроме этого, при выполнении преобразованияФурье последовательности х[nТ0] конечной длины /Vпроисходит «размывание» спектра, которое также оказывает влияние насостоятельность оценки СПМ.
Ограничение последовательности х[nТ0]конечным числом значений равносильно умножению исходной бесконечнойпоследовательности х0[nТ0] на другуюпоследовательность
/>/> (1.19)
которую называют прямоугольным окном. Тогда можно записать
/>/> (1.20)
Преобразование Фурье последовательности х[nТ0]равно свертке преобразований Фурье последовательности х0[nТ0]и прямоугольного окна w[nТ0]
/>/> (1.21)

/>
Рисунок 1.2 – Размывание спектра: (а – исходная бесконечнаяпоследовательность; б – модуль преобразования Фурье от х0[nТ0];в — последовательность х0[nТ0], умноженнаяна прямоугольное окно; г — модуль преобразования Фурье последовательности х[nТ0])
При выборе оконных функций используются следующие параметры:ширина основного лепестка, максимальный уровень боковых лепестков, скоростьспадания уровня боковых лепестков [6,7,10].
Здесь ширина основного лепестка определена на уровне 3 дБ ниже егомаксимума и измерена в единицах разрешения преобразования Фурье, т.е. 2π/N, где N — длинаокна.
Для повышения состоятельности оценки (1.18) выполняют еёсглаживание. Имеется несколько методов сглаживания: Даньелла, Бартлетта, Уэлча[6,7].
Метод Даньелла основан на осреднении значений СПМ в пределахсмежных спектральных частот.
В соответствии с методом Бартлетта состоятельность оценки СПМповышают усреднением оценок СПМ коротких реализаций, полученных из
одной реализации длиной N отсчетов. Пусть дана реализациядлиной N отсчетов. Она разбивается на nsнеперекрывающихся сегментов, длиной Ns=N/s отсчетов. Длякаждого сегмента по формуле (1.18) вычисляется выборочная оценка СПМ.Сглаженная оценка СПМ получается путем усреднения по всем n, сегментам
/> (1.30)
Если последовательность х[n] представляет нормальныйстационарный эргодический процесс, то сглаженная оценка имеет дисперсию обратнопропорциональную числу сегментов n.
Спектральное разрешение оценки задается приближенным равенством
/> (1.31)
В методе Уэлча подход Бартлетта применяется к перекрывающимсясигментам исходной последовательности х[n], и каждый сегментвзвешивается с помощью оконной функции для уменьшения смещения оценок из-заэффекта «просачивания» энергии в боковые лепестки. Цель перекрытия сегментов — увеличить число усредняемых участков при фиксированной длине последовательностии тем самым повысить точность оценок СПМ. Метод Уэлча — один из самыхраспространенных периодограммных методов [6,7].
Обозначим через /> величину сдвига междусегментами, которая должна удовлетворять условию />, где /> — максимальное имякорреляции анализируемого процесса. При выполнении этого условия получим p=int[(N-Ns)//>+l]слабокоррелированных сегментов. Отсчеты каждого сегмента взвешиваются окном w[n]
/> (1.32)
Выборочное значение СПМ сегмента р оценивается по формуле

/> (1.33)
где
/>/> (1.34)
/>/> (1.35)
Сглаженная оценка периодограммы Уэлча вычисляется по формуле
/> (1.36)
Введение перекрытия сегментов в методе Уэлча позволяет уменьшитьизменчивость оценки СПМ, Так же как и в методе Бартлетта, дисперсия оценки СПМпо методу Уэлча обратно пропорциональна числу сегментов, но благодаря большемучислу сегментов, значение дисперсии будет меньше.
1.2 Основы цифровой фильтрации
Цифровой фильтр представляет собой систему с постояннымипараметрами (инвариантную к сдвигу), работающую в дискретном времени. Напомним,что для таких систем сигнал на входе и выходе связан дискретной сверткой (1.5).Соответствующее соотношение между z-преобразованиями имеет вид
/>  (1.37)

Прямое z-преобразованиеотклика на единичный импульс H(z) называетсяпередаточной функцией системы. Преобразование Фурье отклика на единичныйимпульс />называетсячастотной характеристикой. Обычно /> представляет собой комплекснуюфункцию со, которую можно записать в виде
/>  (1.38)
или через модуль и фазу
/>  (1.39)
Инвариантная к сдвигу линейная система называется физическиреализуемой, если h(n)=0 при n
/>  (1.40)
Это условие аналогично (1.10) и оказывается достаточным длясуществования />.
Сигналы на входе и выходе линейных инвариантных к сдвигу систем,таких, например, как фильтры, связаны дискретной сверткой (1.5) и кроме того, разностным уравнением

/> (1.41)
Вычисляя z-преобразование от обеих частей, можно получить
/> (1.42)
Сравнивая (1.41) и (1.42), полезно отметить следующее. Если заданоразностное уравнение вида (1.41), то H(z) можнополучить непосредственной подстановкой коэффициентов при входном сигнале вчислитель передаточной функции к соответствующим степеням z-1,а коэффициенты при выходном сигнале — в знаменатель к соответствующим степеням z-1.
Передаточная функция в общем случае является дробно рациональной.Таким образом, она определяется положением нулей и полюсов на z-плоскости. Это означает,что H(z) можнопредставить в виде
/> (1.43)
При рассмотрении z-преобразования отмечалось, что физическиреализуемые системы имеют область сходимости вида |z|>R1.Если система, кроме того, еще и устойчива, то R1 должно быть меньшеединицы, таким образом единичная окружность входит в область сходимости. Иначеговоря, для устойчивой системы все полюсы H(z) должны лежать внутриединичной окружности.
Достаточно определить два типа линейных систем с постояннымипараметрами. Это системы с конечной импульсной характеристикой (КИХ) и системыс бесконечной импульсной характеристикой (БИХ). Эти два класса обладаютотличными друг от друга свойствами, которые будут рассмотрены ниже.
Если все коэффициенты аk. в уравнении (1.22)равны нулю, то разностное уравнение принимает вид
/> (1.44)
Сравнивая (1.44) с (1.56), можно отметить, что
/> (1.45)
Системы с КИХ обладают рядом важных свойств. Передаточная функция H(z) таких системпредставляет собой полином по степеням z-1 и, таким образом, неимеет ненулевых полюсов, а содержит только нули. Системы с КИХ могут обладатьстрого линейной фазо-частотной характеристикой (ФЧХ). Если h(n)удовлетворяет условию
/> (1.46)
то
/> (1.47)
где /> - действительная или чисто мнимаявеличина в зависимости от знака в (1.48).
Возможность получения строго линейной ФЧХ является очень важным обстоятельствомприменительно к речевым сигналам в тех случаях, когда требуется сохранитьвзаимное расположение элементов сигнала. Это свойство систем с КИХ существеннооблегчает решение задачи их проектирования, поскольку все внимание можноуделять лишь аппроксимации амплитудно-частотной характеристики (АЧХ). За этодостоинство фильтра с линейной ФЧХ, приходится расплачиваться необходимостьюаппроксимации протяженной импульсной реакции в случае фильтров с крутыми АЧХ.Хорошо разработаны три метода проектирования КИХ-фильтров с линейными ФЧХ:взвешивания, частотной выборки и проектирования оптимальных фильтров сминимаксной ошибкой [1-3]. Второй и третий методы являются оптимизационными ииспользуют итеративный (в отличие от замкнутой формы) подход для определениякоэффициентов фильтра. Несмотря на простоту метода взвешивания, широкоеприменение нашли все три метода. Это обусловлено завершенностью глубокихисследований оптимальных КИХ-фильтров а, кроме того, наличием подробноописанных программ, позволяющих пользователю легко рассчитать любой фильтр[1,2,11].
При рассмотрении вопросов реализации цифровых фильтров полезноизображать их в виде схем. Разностное уравнение (1.25) изображено на рис. 1.4.Подобные схемы, называемые структурными, описывают в графической форме теоперации, которые необходимо проделать над входной последовательностью дляполучения сигнала на выходе.
Для фильтра после подстановки (1.49) в(1.51) и выполненияинтегрирования получается
/> (1.52)
Импульсная характеристика (1.32) определена при любых целыхзначениях к и является бесконечной, поэтому ограничивают значения k.Пусть |k|≤К, где К=(N-1)/2 для фильтров снечётными значениями N и К=N/2 для фильтров с чётнымизначениями N. Тогда конечная импульсная характеристика, соответствующая(1.52), записывается в виде
/> (1.53)
Импульсная характеристика (1.53) является некаузальной, так какимеет ненулевые значения при k наК тактов, т.е.
/> (1.54)
Синтезированный таким образом фильтр будет иметь значительныепульсации вблизи частоты среза. Указанные пульсации представляют эффект Гиббса,проявляющийся вблизи точек разрыва заданной частотной характеристики. ЭффектГиббса обусловлен ограничением длительности бесконечной импульснойхарактеристики />.
Конечная импульсная характеристика />, получаемая из />, может быть такжепредставлена в виде
/> (1.55)
где w[k] — прямоугольное весовое окно длиной Nотсчётов. Умножение заданной импульсной характеристики на прямоугольное окноприводит к искажению частотной характеристики синтезируемого фильтра. Частотнаяхарактеристика, соответствующая (1.55), будет равна свёртке заданной частотнойхарактеристики прямоугольного окна. Таким образом, эффект Гиббса связан спульсирующим поведением частотной характеристики прямоугольного весового окна.
Для уменьшения отрицательного влияния эффекта Гиббса применяютвесовые окна, отличные от прямоугольного. Здесь имеет место аналогия соспектральным анализом, когда для уменьшения утечки энергии в боковые лепесткиприменяют оконные функции. С целью обеспечения линейности фильтра низких частотуказанные оконные функции должны быть симметричными w[k]=w[N-k-1]и определены для значений k, лежащих диапазоне 0≤k≤N-1[6].
1.3 Особенности акустической фонетики и её учёт при обработкеречевых сигналов
1.3.1 Механизм речеобразования
Речь состоит из последовательности звуков. Звуки и переходы междуними служат символическим представлением информации. Порядок следования звуков(символов) определяется правилами языка. Изучение этих правил и их роли вобщении между людьми составляет предмет лингвистики, анализ и классификациясамих звуков речи — предмет фонетики. При обработке речевых сигналов с цельюповышения их информативного содержания либо для выделения содержащейся всигнале информации полезно располагать как можно большим количеством сведений оструктуре сигнала, например, о способе кодирования информации в сигнале [1].
Голосовой тракт начинается с прохода между голосовымисвязками, называемого голосовой щелью, и заканчивается у губ. Голосовой тракт,таким образом, состоит из гортани (от пищевода до рта) и рта, или ротовойполости. У взрослого мужчины общая длина голосового тракта составляет примерно17 см. Площадь поперечного сечения голосового тракта, которая определяетсяположением языка, губ, челюстей и небной занавески, может изменяться от нуля(тракт полностью перекрыт) до примерно 29 см2. Носовая полостьначинается у нёбной занавески и заканчивается ноздрями. При опущенной небнойзанавеске носовая полость акустически соединена с голосовым трактом и участвуетв образовании носовых звуков речи. На рис. 1.4 показано подробное схематическоеизображение речеобразующей системы. Для полноты в диаграмму включены и такиеорганы, как легкие, бронхи и трахея, расположенные ниже гортани. Совокупностьэтих органов и служит источником энергии для образования речи. Речьпредставляет собой акустическую волну, которая вначале излучается этой системойпри выталкивании воздуха из легких и затем преобразуется в голосовом тракте.Основные особенности колебания легко объяснить на основе подробного анализамеханизма образования речи. Звуки речи могут быть разделены на три четковыраженные группы по типу возбуждения. Вокализованные звуки образуютсяпроталкиванием воздуха через голосовую щель, при котором периодическинапрягаются и расслабляются голосовые связки и возникает квазипериодическаяпоследовательность импульсов потока воздуха, возбуждающая голосовой, тракт.
/>
Рисунок 1.4 – Схема речеобразующих органов человека [1,13]
Фрикативные или невокализованные звуки генерируются при суженииголосового тракта в каком-либо месте (обычно в конце рта) и проталкиваниивоздуха через суженное место со скоростью, достаточно высокой для образованиятурбулентного воздушного потока. Таким образом, формируется источникширокополосного шума, возбуждающего голосовой тракт.
При произнесении взрывных звуков голосовой тракт полностьюзакрывается (обычно в начале голосового тракта). За этой смычкой возникаетповышенное сжатие воздуха. Затем воздух внезапно высвобождается. Область малогоуровня соответствует периоду полного закрытия голосового тракта. Голосовойтракт и носовая полость показаны на рис. 1.4 в виде труб с переменной попродольной оси площадью поперечного сечения. При прохождении звуковых волнчерез эти трубы их частотный спектр изменяется в соответствии с частотнойизбирательностью трубы. Этот эффект похож на резонансные явления, происходящиев трубах органов и духовых музыкальных инструментов. При описанииречеобразования резонансные частоты трубы голосового тракта называютформантными частотами или просто формантами. Формантные частоты зависят отконфигурации и размеров голосового тракта: произвольная форма тракта может бытьописана набором формантных частот. Различные звуки образуются путем измененияформы голосового тракта. Таким образом, спектральные свойства речевого сигналаизменяются во времени в соответствии с изменением формы голосового тракта.
Переменные во времени спектральные характеристики речевого сигналас помощью звукового спектрографа могут быть высвечены в виде графика. Этотприбор позволяет получить двумерный график, называемый спектрограммой, накоторой по вертикальной оси отложена частота, а по горизонтальной – время.Плотность зачернения графика пропорциональна энергии сигнала. Таким образом,резонансные частоты голосового тракта имеют вид затемненных областей наспектрограмме. Вокализованным областям сигнала соответствует появление четковыраженной периодичности временной зависимости, в то время как невокализованныеинтервалы выглядят почти сплошными [1].
1.3.2 Акустическая фонетика
Многие языки, в том числе и английский, можно описать наборомотдельных звуков или фонем. Изучать фонему можно по-разному. Лингвисты,например, изучают отличительные характеристики фонем [1,2]. Четыре широкихкласса звуков образуют гласные, дифтонги, полугласные и согласные. Каждый изклассов разбит на подклассы по способу и месту образования звука в голосовомтракте. Каждая фонема может быть отнесена к классу протяжных иликратковременных звуков. Протяжные звуки образуются при фиксированной(инвариантной ко времени) форме голосового тракта, который возбуждается соответствующимисточником. К этому классу относятся гласные, фрикативные (вокализованные иневокализованные) носовые согласные. Остальные звуки (дифтонги, полугласные,аффрикаты и взрывные согласные) произносятся при изменяющейся форме голосовоготракта. Они образуют класс кратковременных звуков.
Гласные. Гласные образуются при квазипериодическом возбужденииголосового тракта неизменной формы импульсами воздуха, возникающими вследствиеколебания голосовых связок. Как будет показано ниже, зависимость площадипоперечного сечения голосового тракта от координаты (расстояния) вдоль егопродольной оси определяет резонансные частоты тракта (форманты) и характерпроизносимого звука. Эта зависимость называется функцией площади поперечногосечения. Функция площади поперечного сечения для каждой гласной зависит впервую очередь от положения языка; вместе с тем на характер звука оказываютвлияние положения челюстей, губ и, в меньшей степени, небной занавески.Например, при произнесении звука |а|, голосовой тракт открыт в начале, а в егоконце тело языка образует сужение. Наоборот, при произнесении звука |и|, языкобразует сужение в начале голосового тракта и оставляет его открытым в конце.Таким образом, каждому гласному звуку может быть поставлена в соответствиеформа голосового тракта (функция площади поперечного сечения), характерная дляего произношения. Очевидно, что это соответствие неоднозначное, так как уразных дикторов голосовые тракты различны; Другим представлением гласного звукаявляется его описание с помощью набора резонансных частот голосового тракта.Это описание также зависит от диктора. Петерсон и Барней [1] провели измеренияформантных (резонансных) частот с помощью звукового спектрографа для гласных,произнесенных различными дикторами.
На спектрограммах четко выделяются различные резонансные области,характерные для каждой гласной. Акустические колебания, иллюстрируяпериодичность вокализованных звуков, позволяют также путем анализа одногопериода выявить грубые спектральные характеристики. Например, акустическоеколебание звука |и| состоит из низкочастотного затухающего колебания, накоторое накладывается относительно высокочастотная составляющая. Этосоответствует низкой частоте первой форманты и высоким частотам второй итретьей формант. Два резонанса, расположенных на близких частотах, расширяютспектр колебания. Наоборот, в акустическом колебании гласной |у| энергиявысокочастотных составляющих относительно мала, что соответствует низкимчастотам первой и второй формант. Подобный анализ может быть проведен для всехгласных.
Дифтонги. Дифтонгом называется участок речи, соответствующийодному слогу, который начинается с одной гласной и затем постепенно переходит вдругую. На основе этого определения можно выделить следующие дифтонги: |эй|,|оу|, |ау|, |ой|, |ай|.
Дифтонги образуются путём плавного изменения формы голосовоготракта.
Полугласные. Группу звуков, содержащих |в|, |й| описать довольнотрудно. Эти звуки называются полугласными, гак как по своим свойствам онинапоминают гласные звуки. Обычно их характеризуют плавным изменением функцииплощади поперечного сечения голосового тракта между смежными фонемами. Такимобразом, акустические характеристики этих звуков существенно зависят отпроизносимого текста. Удобно рассматривать эти звуки как переходные, сходные сгласными. Их структура близка к структуре гласных и дифтонгов.
Носовые звуки (сонорные). Носовые согласные |м|, |н| и |л|образуются при голосовом возбуждении. В полости рта при этом возникает полнаясмычка. Небная занавеска опущена, поэтому поток воздуха проходит через носовуюполость и излучается через ноздри. Полость рта, которая вначале закрыта,акустически соединена с гортанью. Таким образом, рот служит резонанснойполостью, в которой задерживается часть энергии при определенных частотах воздушногопотока. Эти резонансные частоты соответствуют антирезонансам или нулямпередаточной функции тракта речеобразования [2]. Более того, для носовыхсогласных и гласных (т. е. гласных, расположенных перед носовыми согласными)характерны менее выраженные резонансы, чем для гласных. Расширение резонансныхобластей происходит из-за того, что внутренняя поверхность носового трактанапрягается и при этом носовая полость имеет большое отношение площадиповерхности к площади поперечного сечения. Вследствие этого потери за счёт,теплопроводности и вязкости оказываются большими, чем обычно.
Три носовых согласных различаются местом расположения полнойсмычки. При произнесении звука |м| смычка образуется между губами, |н| — увнутренней стороны зубов.
Глухие фрикативные звуки (шипящие, свистящие). Глухие фрикативныезвуки |ф|, |с|, |ш|, образуются путем возбуждения голосового трактатурбулентным воздушным потоком, возникающим в области смычки голосового тракта.Расположение смычки характеризует тип фрикативного звука. При произнесениизвука |ф| смычка возникает около губ, |с| — в середине полости рта и |ш| — вконце полости рта. Таким образом, система образования глухих фрикативных звуковсодержит источник шума, расположенный в области смычки, которая разделяет голосовойтракт на две полости. Звуковая волна излучается через губы т. е. через переднююполость. Другая полость служит, как и в случае произнесения носовых звуков, длязадерживания акустического потока, и таким образом в речеобразующем трактевозникают антирезонансы [1].
Звонкие фрикативные звуки. Звонкие фрикативные звуки |в|, |з| и|ж| являются прототипами глухих звуков |ф|, |с|, |п| и |ш| соответственно.Место расположения смычки для этих пар звуков совпадает. Однако звонкиефрикативные звуки отличаются от своих аналогов тем, что при их образованииучаствуют два источника возбуждения. При образовании звонких звуков голосовыесвязки колеблются и, таким образом, один источник возбуждения находится вгортани. Однако, так как в голосовом тракте образуется смычка, поток воздуха вэтой области становится турбулентным. Можно ожидать, что в спектре звонкихфрикативных звуков будут две различные составляющие. Сходство структурызвонкого |в| и глухого |ф| также легко установить путем сравнениясоответствующих спектрограмм. Аналогично можно сравнить и спектрограммы звуков|ш| и |ж|.
Звонкие взрывные согласные. Звонкие взрывные согласные |б|, |д| и|г| являются переходными непротяжными звуками. При их образовании голосовойтракт смыкается в какой-нибудь области полости рта. За смычкой воздух сжимаетсяи затем внезапно высвобождается. При произнесении звука |б| смычка образуетсямежду губами, |д| — с внутренней стороны зубов, |г| -вблизи небной занавески. Втечение периода, когда голосовой тракт полностью закрыт, звуковые волныпрактически не излучаются через губы. Однако слабые низкочастотные колебанияизлучаются стенками горла (эту область иногда называют голосовымг затвором —«voice bar»). Колебания возникают из-за того, что голосовые связки могутвибрировать даже тогда, когда голосовой тракт перекрыт.
Так как структура взрывных звуков изменчива, их свойствасущественно зависят от последующего гласного [1]. В этой связи характервременных колебаний несёт мало сведений о свойствах этих согласных.
Глухие взрывные согласные. Глухие взрывные согласные |п|, |т| и|к| подобны своим звонким прототипам |б|, |д| и |г|, но имеют одно важноеотличие. В течение периода полного смыкания голосового тракта голосовые связкине колеблются. После этого периода, когда воздух за смычкой высвобождается, втечение короткого промежутка времени потери на трение возрастают из-завнезапной турбулентности потока воздуха. Далее следует период придыхания(шумовой воздушный поток из голосовой щели возбуждает голосовой тракт). Послеэтого возникает голосовое возбуждение.
Аффрикаты и звук |х|. Остальными согласными произношения являютсяаффрикаты |ч| и |дж| и фонема |х|. Глухая аффриката |ч| является динамичнымзвуком, который можно представить как сочетание взрывного |т| и фрикативногосогласного |щ|. Звонкий звук |дж| можно представить как сочетание взрывного |д|и фрикативного звука |ж|. Наконец, фонема |х| образуется путем возбужденияголосового тракта турбулентным воздушным потоком, т. е. без участия голосовыхсвязок, но при возникновении шумового потока в голосовой щели. Структура звука|х| не зависит от следующей за ним гласной. Поэтому голосовой тракт можетперестраиваться для произнесения следующей гласной в процессе произнесениязвука |х| [1].
1.3.3 Распространение звуков
Понятие звука почти совпадает с понятием колебаний. Звуковые волнывозникают за счет колебаний. Они распространяются в воздухе или другой среде спомощью колебаний частиц этой среды. Следовательно, образование ираспространение звуков в голосовом тракте подчиняется законам физики. Вчастности, основные законы сохранения массы, сохранения энергии, сохраненияколичества движения вместе с законами термодинамики и механики жидкостейприменимы к сжимаемому воздушному потоку с низкой вязкостью, который являетсясредой распространения звуков речи. Используя эти основные физические законы, можносоставить систему дифференциальных уравнений в частных производных, описывающуюдвижение воздуха в речеобразующей системе [1,2]. Составление и решение этихуравнений весьма затруднительны даже для простых предположений относительноформы голосового тракта и потерь энергии в речеобразующей системе. Полнаяакустическая теория должна учитывать следующие факторы:
- изменение во времени формы голосового тракта;
- потеря энергии на стенках голосового тракта засчет вязкого трения и теплопроводности;
- мягкость стенок голосового тракта;
- излучение звуковых волн через губы;
- влияние носовой полости;
- возбуждение голосового тракта.
Голосовой тракт можно представить в виде неоднородной трубы спеременной во времени площадью поперечного сечения. Для колебаний, длина волныкоторых превышает размеры голосового тракта (это обычно имеет место на частотахниже 4000 Гц), можно допустить, что вдоль продольной оси трубы распространяетсяплоская волна. Дальнейшее упрощение состоит в предположении отсутствия потерьна вязкость и теплопроводность как внутри воздушного потока, так и на стенкахтрубы. На основе законов сохранения массы, количества движения и энергии сучетом перечисленных допущений Портнов показал, что звуковые волны, в трубеудовлетворяют следующим уравнениям
/> (1.56а)
/> (1.56б)
где р=р(х,t) – звуковое давление какфункция х и t; u=u(х,t) – скорость воздушногопотока (volume velocity) как функция х и t, ρ — плотность воздуха в трубе; с — скорость распространения звука; A=A(x,t)- «функция площади», т. е. площадь поперечного сечения в направлении,перпендикулярном продольной оси трубы, как функция расстояния вдоль этой оси ивремени. Сходная система уравнений была получена Сондхи,
Замкнутое решение уравнений (1.36) получить невозможно даже дляпростых форм трубы. Однако могут быть получены численные решения. Полноерешение дифференциальных уравнений предполагает заданными давление и скоростьпотока для значений х и t в области голосовой щели и около губ,т. е. для получения решения должны быть заданы граничные условия у обоих концовтрубы. Со стороны губ граничные условия должны отображать эффект излучения, асо стороны голосовой щели – характер возбуждения.
Кроме граничных условий необходимо задать функцию площади A(x,t).Для протяжных звуков можно предположить, что A(x,t) не изменяетсяво времени. Однако это предположение неверно для непротяжных звуков. Подробныеизмерения A(x,t) весьма затруднительны и могут быть выполненытолько для протяжных звуков. Одним из методов проведения таких измеренийявляется рентгеновская киносъемка. Фант и Перкелл провели несколько такихэкспериментов. Однако подобные измерения могут быть выполнены лишь вограниченном объеме. Другим методом является вычисление формы голосового трактапо акустическим измерениям. Описав подобный метод, предполагающий возбуждениеголосового тракта внешним источником. Оба метода являются полезными дляполучения сведений о динамике речеобразования. Тем не менее, они не могут бытьприменены для получения описания речевых сигналов, например, в задачах связи. Вработе Атала описаны результаты прямого измерения A(x,t) посигналу речи, произнесенной в нормальных условиях.
Точное решение уравнений (1.36) является весьма сложным, даже еслизначение A(x,t) точно известно. Вместе с тем для решенияпоставленной задачи нет необходимости в точном и общем решениях этих уравнении[1,2].
1.4 Обработка речевого сигнала во временной области
В основе большинства методов обработки речи лежит предположение отом, что свойства речевого сигнала с течением времени медленно изменяются; Этопредположение приводит к методам кратковременного анализа, в которых сегментыречевого сигнала выделяются и обрабатываются так, как если бы они быликороткими участками отдельных звуков с отличающимися свойствами. Процедураповторяется так часто, как это требуется. Сегменты, которые иногда называютинтервалами, (кадрами) анализа обычно пересекаются. Результатом обработки накаждом интервале является число или совокупность чисел. Следовательно, подобнаяобработка приводит к новой, зависящей от времени последовательности, которая.можетслужить характеристикой речевого сигнала.
Большинство методов кратковременного анализа, в том числе икратковременный Фурье-анализ, могут быть описаны выражением
/> (1.57)
Речевой сигнал (возможно, после ограничения частотного диапазона влинейном фильтре) подвергается преобразованию Т[·], линейному или нелинейному,которое может зависеть от некоторого управляющего параметра или ихсовокупности. Результирующая последовательность умножается затем напоследовательность значений временного окна (весовой функции), расположенную вовремени в соответствии с индексом п. Результатызатем суммируются по всем ненулевым значениям. Обычно, хотя и не всегда,последовательность значений временного окна имеет конечную протяженность.Значение Qn представляет собой, таким образом, «взвешенное»среднее значение последовательности Т [х (m)].
Простым примером, иллюстрирующим изложенное, может служитьизмерение кратковременной энергии сигнала. Полная энергия сигнала в дискретномвремени определяется как
/> (1.58)
Вычисление этой величины не имеет особого смысла при обработкеречевых сигналов, поскольку она не содержит информации о свойствах сигнала,изменяющихся во времени. Кратковременная энергия определяется выражением
/> (1.59)
Таким образом, кратковременная энергия в момент n естьпросто сумма квадратов N отсчетов от n-N-1 до n. Из(1.37) видно, что в (1.39) Т [•] есть просто операция возведения в квадрат, а
/> (1.60)
Вычисление кратковременной энергии, иллюстрирует рис. 1.6 Окно«скользит» вдоль последовательности квадратов значений сигнала, в общем случаевдоль последовательности Т[х(m)], ограничивая длительностьинтервала, используемого в вычислениях.
Как отмечалось выше, амплитуда речевого сигнала существенноизменяется во времени.
В частности, амплитуда невокализованных сегментов речевого сигналазначительно меньше амплитуды вокализованных сегментов. Подобные измененияамплитуды хорошо описываются с помощью функции кратковременной энергии сигнала.В общем случае определить функцию энергий можно как
/> (1.61)

Это выражение может быть переписано в виде
/> (1.62)
где
/> (1.63)
Сигнал х2(n)в этом случае фильтруется с помощью линейнойсистемы с импульсной характеристикой h(n).
Выбор импульсной характеристики h(n)или окна составляет основу описания сигнала спомощью функции энергии. Чтобы понять, как влияет выбор окна на функциюкратковременной энергии сигнала, предположим, что h(n)в (1.35) является достаточно длительной и имеетпостоянную амплитуду; значение Еn будет при этом изменятьсяво времени незначительно. Такое окно эквивалентно фильтру нижних частот с узкойполосой пропускания. Полоса фильтра нижних частот не должна быть столь узкой,чтобы выходной сигнал оказался постоянным, иначе говоря, полосу следует выбратьтак, чтобы функция энергии отражала изменения амплитуды речевого сигнала.
Описанная ситуация выражает противоречие, которое нередковозникает при изучении кратковременных характеристик речевых сигналов. Суть егосостоит в том, что для описания быстрых изменений амплитуды желательно иметьузкое окно (короткую импульсную характеристику), однако слишком малая ширинаокна может привести к недостаточному усреднению и, следовательно, кнедостаточному сглаживанию функций энергии.
Влияние вида окна на вычисление изменяющейся во времени энергиисигнала можно проиллюстрировать на примере использования двух наиболеераспространенных окон: прямоугольного и окна Хэмминга.
Прямоугольное окно, как это видно из (1.39), соответствует случаю,когда всем отсчетам на интервале от (n-N-1) до п приписываетсяодинаковый вес. Частотная характеристика прямоугольного окна равна
/> (1.64)
Для окна с шириной 51 отсчет (N=51) логарифмамплитудно-частотной характеристики представлен на рис. 1.6а.
Первое нулевое значение амплитудно-частотной характеристики (1.64)соответствует частоте
/> (1.65)
где /> частота дискретизации.Это номинальная частота среза фильтра нижних частот, соответствующегопрямоугольному окну.
Амплитудно-частотная характеристика окна Хемминга при N=51показана на рис. 1.6б. Полоса пропускания фильтра с окном Хемминга приодинаковой ширине примерно вдвое превосходит полосу фильтра с прямоугольнымокном. Очевидно также, что окно Хемминга обеспечивает большее затухание внеполосы пропускания по сравнению с прямоугольным окном. Затухание, вносимое внеполосы, несущественно зависит от ширины каждого из окон. Это означает, чтоувеличение ширины приведет просто к сужению полосы. Если N мало (порядкапериода основного тона или менее), то Еn будет изменятьсяочень быстро, в соответствии с тонкой структурой речевого колебания. Если Nвелико (порядка нескольких периодов основного тона), то Еnбудет изменяться медленно и не будет адекватно описывать изменяющиесяособенности речевого сигнала. Это, к сожалению, означает, что не существуетединственного значения М, которое в полной мере удовлетворяло быперечисленным требованиям, так как период основного тона изменяется от 10отсчетов (при частоте дискретизации 10 кГц) для высоких женских и детскихголосов до 250 отсчетов для очень низких мужских голосов. На практике Nвыбирают равным 100—200 отсчетов при частоте дискретизации 10 кГц (т. е.длительность порядка 10-20 мс).
Основное назначение Еn состоит в том, что этавеличина позволяет отличить вокализованные речевые сегменты отневокализованных. Значения Еn для невокализованных сегментовзначительно меньше, чем для вокализованных. Функция кратковременной энергииможет быть использована для приближенного определения момента перехода отвокализованного сегмента к невокализованному и наоборот, а в случае высококачественногоречевого сигнала (с большим отношением сигнала к шуму) функцию энергии можноиспользовать и для отделения речи от пауз.
Одним из недостатков функции кратковременной энергии, определяемойвыражением (1.35), является ее чувствительность к большим уровням сигнала(поскольку в (1.35) каждый отсчет возводится в квадрат). Вследствие этогозначительно искажается соотношение между значениями последовательности х(n).Простым способом устранения этого недостатка является переход к определениюфункции среднего значения в виде
/> (1.66)
где вместо суммы квадратов вычисляется взвешенная сумма абсолютныхзначений. Исключение операции возведения в квадрат упрощает арифметическиевычисления.
При вычислении среднего значения по (1.46) динамический диапазон(отношение максимального значения к минимальному) определяется примерно какквадратный корень из динамического диапазона при обычном вычислении энергии. Вданном случае различия в уровнях между вокализованной и невокализованной речьювыражены не столь ярко, как при использовании функций энергии.
Поскольку полоса частот при определении как функции энергии, так исреднего значения приближенно совпадает с полосой пропускания используемого фильтранижних частот, то нет необходимости дискретизировать эти функции столь жечасто, как исходный речевой сигнал. Например, для окна длительностью 20 мсдостаточна частота дискретизации около 100 Гц. Это означает, что значительнаячасть информации теряется при использовании подобных кратковременныхпредставлений. Очевидно также, что информация, относящаяся к динамике амплитудречевого сигнала, сохраняется в весьма удобной форме [1,2].
При обработке сигналов в дискретном времени считают, что если двапоследовательных отсчёта имеют различные знаки, то произошёл переход черезноль. Частота появления нолей в сигнале может служить простейшейхарактеристикой его спектральных свойств. Это наиболее справедливо дляузкополосных сигналов.
Среднее число нулевых переходов можно принять в качествеподходящей оценки частоты синусоидального колебания.
Речевой сигнал является широкополосным и, следовательно,интерпретация среднего числа переходов через нуль менее очевидна. Однако можнополучить грубые оценки спектральных свойств сигнала, основанные наиспользовании функции среднего числа переходов через нуль для речевого сигнала;рассмотрим способ вычисления этой величины. Функция среднего числа переходовчерез нуль имеет те же общие свойства, что и функции энергии и среднегозначения. Все, что в действительности требуется, это проверить пары отсчетов сцелью определения нулевых пересечений, а затем вычислить среднее по всем Nпоследовательным отсчетам (деление на N, конечно, необязательно). Как иранее, может быть вычислено взвешенное среднее и при использовании симметричныхокон конечной длительности задержка может быть скомпенсирована точно. Могутбыть получены и рекуррентные уравнения.
Рассмотрим теперь применение функции среднего числа переходовчерез нуль для обработки речевых сигналов. Модель речеобразоаания предполагает,что энергия вокализованных сегментов речевого сигнала концентрируется начастотах ниже 3 кГц, что обусловлено убывающим спектром сигнала возбуждения,тогда как, для невокализованных сегментов большая часть энергии лежит в областивысоких частот. Поскольку высокие частоты приводят к большому числу переходовчерез нуль, а низкие – к малому, то существует жесткая связь между числомнулевых пересечений и распределением энергии по частотам. Разумно предположить,что большому числу нулевых пересечений соответствуют невокализованные сегменты,а малому числу — вокализованные сегменты речи. Это, однако, очень расплывчатоеутверждение, поскольку мы не определили, что означает «много» или «мало», иколичественно определить эти понятия в действительности трудно. Гауссовскаякривая хорошо согласуется с приведенными гистограммами. Среднее числопересечений составляет 49 для вокализованных и 14 для невокализованныхсегментов длительностью 10 мс.
Поскольку оба распределения перекрываются, нельзя вынестиоднозначное решение о принадлежности сегмента к вокализованным илиневокализованным отрезкам только по среднему числу переходов через нуль. Тем неменее, подобное представление весьма полезно при осуществлении такойклассификации.
Так же, как и в случае функций энергии и среднего, функциюсреднего числа переходов через нуль можно дискретизировать с очень низкойчастотой. Хотя среднее число переходов через нуль изменяется значительно,вокализованные и невокализованные сегменты просматриваются очень четко.
При использовании описания сигнала средним числом переходов черезнуль следует иметь в виду ряд практических соображений. Хотя в основу алгоритмавычисления нулевых переходов положено сравнение знаков соседних отсчетов, темне менее, при дискретизации сигнала следует предпринимать специальные меры.
Очевидно, что число нулевых переходов зависит от уровня шума прианалого-цифровом преобразовании, интенсивности фона переменного тока и другихшумов, которые могут присутствовать в цифровой системе. Таким образом, с цельюуменьшения влияния этих факторов следует проявлять особую осторожность прианалоговой обработке сигнала, предшествующей дискретизации. Например, частооказывается более целесообразным использовать полосовой фильтр вместо фильтранижних частот для уменьшения эффекта наложения при аналого-цифровомпреобразовании и устранения фона переменного тока из сигнала. Кроме того, приизмерении числа переходов через нуль следует учитывать соотношение междупериодом дискретизации и интервалом усреднения N. Период дискретизацииопределяет точность выделения нулевых пересечений по времени (и по частоте), т.е. чтобы добиться высокой точности, нужна большая частота дискретизации. Вместес тем от каждого отсчета требуется информация объемом лишь 1 бит (информациятолько о знаке сигнала).
Вследствие практической ограниченности этого метода былопредложено множество сходных представлений сигнала. В каждом из них содержатсядополнительные особенности, направленные на снижение чувствительности оценок кшуму, но все они имеют и свои собственные ограничения. Наиболее заметным срединих является представление сигнала, исследованное Бейкером. Представлениеосновано на интервалах времени между положительными переходами через нуль(снизу вверх). Бейкер применил это описание для фонетической классификациизвуков речи.
Другое применение анализа переходов через нуль состоит в получениипромежуточного представления речевого сигнала в частотной области. Методвключает фильтрацию речевого сигнала в нескольких смежных частотных диапазонах.Затем по сигналам на выходе фильтров измеряют кратковременную энергию и среднеечисло переходов через нуль. Совместное использование этих характеристик даетгрубое описание спектральных свойств сигнала. Этот подход, предложенный Рэдди иисследованный Вайсенсом и Эрманом, положен в основу систем распознавания речи.
Задача определения моментов начала и окончания фразы при наличиишума является одной из важных задач в области обработки речи. В частности, приавтоматическом распознавании слов важно точно определить моменты начала иокончания слова. Методы обнаружения моментов начала и окончания фразы можноиспользовать для уменьшения числа арифметических операций, если обрабатыватьтолько те сегменты, в которых имеется речевой сигнал, например, в системах,работающих не в реальном масштабе времени.
Проблема отделения речи от окружающего шума очень сложна, заисключением случаев очень большого отношения сигнал/шум, т. е. в случаевысококачественных записей, выполненных в заглушённой камере илизвуконепроницаемой комнате. В этих случаях энергия даже наиболее слабых звуковречи (фрикативных согласных) превышает энергию шума и, таким образом,достаточно лишь измерить энергию сигнала. Но подобные условия записи, какправило, не встречаются в реальных ситуациях.

2. Реализация систем распознавания речи
2.1 Гомоморфная обработка речи
Речевой сигнал на коротких интервалах можно рассматривать какотклик системы с медленно меняющимися параметрами на периодическое или шумовоевозбуждение. Это означает, что во временной области дискретный сигнал у(n)представляется результатом свертки функции возбуждения х(n) симпульсной реакцией голосового тракта п(п). Гомоморфная обработка речи сводитсяк решению обратной задачи — имея речевой сигнал у(n)=х(n)*h(n),можно получить параметры сигналов, участвующих в свертке. Эта задача называетсяиногда задачей обратной свертки или развертки.
Смысл гомоморфной системы анализа становится более понятным, еслиучесть, что в частотной области речевой сигнал представляется произведениемспектра сигнала возбуждения и передаточной функции частотной характеристикиголосового тракта, учитывающего спектральные свойства излучателя. Это означает,что в спектре речевого сигнала содержится информация о спектре сигналавозбуждения и передаточной функции голосового тракта. Гомоморфная обработкасигнала — это способ извлечь информацию об основном тоне и формантных частотахна основании преобразований сигнала, которые будут описаны далее.
Если произвести кратковременное дискретное преобразование Фурье(т.е. получить динамический спектр речевого сигнала), а затемпрологарифмировать спектральные составляющие динамического спектра, то каждыйспектральный отсчет можно рассматривать как сумму логарифмов спектра сигналавозбуждения и частотной характеристики речевого тракта (по свойствулогарифмической функции логарифм произведения равен сумме логарифмовсомножителей). Обратное дискретное преобразование Фурье прологарифмированного спектрапозволяет вновь перейти к анализу сигнала во временной области. Сигнал,полученный в результате обратного дискретного преобразования Фурьепрологарифмированного спектра, называется кепстром входного сигнала, равногосумме кепстров сигналов возбуждения и составляющих, обусловленных особенностямиречеобразующего тракта. В результате подобных преобразований дискретный речевойсигнал, представляющий собой свертку сигнала возбуждения и импульсного откликафильтра, моделирующего голосовой тракт, приближенно преобразуется в сложениекепстров.
Логарифм кратковременного спектра вокализованных звуков содержитмедленно меняющуюся составляющую, обусловленную передаточными свойствамиголосового тракта, и быстро меняющуюся периодическую составляющую, котораявызывается периодическим сигналом возбуждения (рис. 2.1а). Для невокализованнойречи прологарифмированный спектр носит характер, показанный на рис.2.1б. Спектрсодержит случайную составляющую с быстрыми изменениями.
Кепстры отрезков вокализованной и невокализованной речи (рис. 2.2)показывают, что медленно меняющаяся часть прологарифмированных значений кратковременногоспектра представлена составляющими кепстра в области малых времен. Быстроменяющаяся периодическая составляющая прологарифмированного спектра,соответствующая частоте основного тона, в кепстре вокализованной речипроявляется в виде резкого пика, расположенного от начала координат нарасстоянии, равном периоду основного тона. Кепстр невокализованной речи (рис.2.2б) таких пиков не имеет.
Если кепстр перемножить на подходящую функцию окна, напримерпрямоугольное окно, пропускающее только начальные участки кепстра (которыесоответствуют области малых времен и отражают относительно медленно меняющиесяпараметры голосового тракта), а затем вычислить дискретное преобразование Фурьерезультирующего взвешенного кепстра, то получим сглаженный спектр сигнала.
Он отражает резонансные свойства тракта, позволяя оцениватьчастоты и полосы формант. Наличие или отсутствие ярко выраженного пика вобласти, соответствующей диапазону изменений периода основного тона, указываетна характер возбуждения, а местоположение пика является хорошим индикаторомпериода основного тона (рис. 2.2).
Гомоморфные относительно свертки системы удовлетворяют обобщенномупринципу суперпозиции. Принцип суперпозиции, если его записать для обычныхлинейных систем, имеет вид
/> (2.1a)
/> (2.1б)
где L – линейный оператор. Принцип суперпозицииустанавливает, что если сигнал на входе является линейной комбинациейэлементарных сигналов, то и сигнал на выходе будет представлен в виде линейнойкомбинации соответствующих сигналов.
Прямым следствием принципа суперпозиции является тот факт, чтосигнал на выходе линейной системы может быть представлен в виде дискретнойсвертки
/> (2.2)
Символ « * » здесь и далее означает свертку в дискретном времени.По аналогии с принципом суперпозиции для обычных линейных систем определимкласс систем, удовлетворяющих обобщенному принципу суперпозиции, в котором сложениезаменяется сверткой (легко показать, что свертка обладает такими жеалгебраическими свойствами, как и сложение [1]), т. е.
/> (2.3)
В общем случае возможно сформулировать и уравнение, аналогичное(2.16), в котором выражено свойство скалярного умножения [2]. Системы,обладающие свойством (2.3), названы гомоморфными относительно сверткисистемами. Эта терминология объясняется тем [3], что данные преобразованияоказываются гомоморфными преобразованиями линейного векторного пространства.При изображении таких систем операцию свертки представляют в явном виде навходе и выходе системы. Гомоморфный фильтр является гомоморфной системой,обладающей тем свойством, что одна компонента (выделяемая) проходит через этусистему без изменений, а другая – устраняется. В соотношении (2.3), например,если x1(n)- нежелательная компонента, то необходимо потребовать, чтобы выход,соответствующий x1(n), представлялсобой единичный отсчет, в то время как выход, соответствующий х2(n),близко совпадал бы с х2(n). Это полностью аналогичноситуации в линейных системах, где ставится задача выделения сигнала из смесиего с аддитивным шумом.
Важным аспектом теории гомоморфных систем является то, что любаяиз них может быть представлена в виде каскадного соединения трех гомоморфныхсистем. Первый блок преобразует компоненты на входе, представленные в видесвертки, в аддитивную сумму на выходе. Второй блок -обычная линейная система,удовлетворяющая принципам суперпозиции в соответствии с (2.1). Третий блокявляется обратным первому, т. е. преобразует сигналы, представленные в видесуммы, в сигналы, представленные в виде свертки. Важность такого каноническогопредставления заключается в том, что разработка гомоморфной системы сводится кразработке линейной системы. Блок*[], называемый характеристическим блокомгомоморфной относительно свертки системы, фиксирован при каноническомпредставлении. Очевидно, что обратное преобразование также фиксировано.Характеристическая система для гомоморфной обратной свертки подчиняетсяобобщенному принципу суперпозиции, в котором операция на входе – свертка, а навыходе – обычное сложение. Свойства характеристической системы определяютсявыражением
/> (2.4)
Аналогично обратная характеристическая система удовлетворяетсоотношению
/>(2.5)
Математическое описание характеристической системы определяетсятребованиями к выходному сигналу. Если на входе имеется сигнал свертки, то
/> (2.6)
и z-преобразование входного сигнала имеет вид
/> (2.7)
Из (2.4) очевидно, что z-преобразование сигнала на выходесистемы должно представлять собой сумму z-преобразований компонент.Таким образом, в частотной области характеристическая система для сверткидолжна обладать следующим свойством: если на входе имеется произведениекомпонент, то на выходе должна возникнуть их сумма.
С учетом возможности вычисления комплексного логарифма, обратноепреобразование комплексного логарифма преобразования Фурье входного сигнала,являющееся выходом характеристической системы для свертки, имеет вид
/> (2.8)
Выход характеристической системы назван «комплексным кепстром» Термин«кепстр» используется для величины
/> (2.9)
Все системы этого класса отличаются тольколинейной частью. Выбор линейной системы определяется свойствами входного сигнала.
Следовательно, для правильного построения линейной системынеобходимо прежде всего определить вид и структуру сигнала на выходехарактеристической системы, т. е. рассмотреть свойства комплексного кепстра длятипичных входных сигналов.
Для определения свойств комплексного кепстра достаточнорассмотреть случай рационального z-преобразования. Наиболее общая формапреобразования имеет вид
/> (2.10)
где модули величин ак, bk, ck и dk меньше единицы. Такимобразом, сомножители (1-akz-1) и (1-ckz-1)соответствуют нолям и полюсам внутри единичной окружности, a (1-bkz)и (1-dkz)- нолям и полюсам вне единичной окружности. Параметр zrозначаетсоответствующую задержку во временной области. Комплексный логарифм X(z)имеет вид
/>. (2.11)
Когда (7.13) вычисляется на единичной окружности, легко видеть,что член /> вноситвклад только в минимальную часть комплексного логарифма. Поскольку этот членнесет информацию только о взаимном расположении во временной области, то привычислении комплексного кепстра он обычно опускается [2]. Таким образом, приобсуждении свойств комплексного кепстра далее этот член не рассматривается.Используя то обстоятельство, что логарифм можно разложить в степенной ряд,относительно несложно показать, что комплексый кепстр имеет вид
/> (2.12)
Уравнения (2.12) позволяют выявить ряд важных свойств комплексногокепстра. Прежде всего, комплексный кепстр в общем случае отличен от ноля ибесконечен как для положительных, так и для отрицательных значений n,даже если х(n) удовлетворяет принципу причинности, устойчив иимеет конечную протяженность. Далее видно, что комплексный кепстр являетсязатухающей последовательностью, ограниченной сверху
/> (2.13)
где α — максимальное абсолютное значение величин а,kbk, сk и dk, β-постоянный сомножитель.
Если Х(z) не содержит нулей и полюсов вне единичнойокружности (т.е. bk = dk=0), то
/> (2.14)
Такие сигналы называются минимально-фазовыми [1]. Общий результатдля последовательности (2.14) состоит в том, что такая последовательностьполностью определяется действительной частью преобразования Фурье. Такимобразом, для минимально-фазовых систем комплексный кепстр определяется лишьлогарифмом модуля преобразования Фурье. Это можно легко показать, есливспомнить, что действительная часть преобразования Фурье представляет собойпреобразование Фурье от четной части последовательности, т. е. если /> –преобразование Фурье кепстра, то
/> (2.15)
Используя (2.14) и (2.15) легко показать, что
/>  (2.16)

Таким образом, для минимально-фазовых последовательностейкомплексный кепстр можно получить путем вычисления кепстра и последующегоиспользования (2.16). Другой важный результат для минимально-фазовых системзаключается в: том, что комплексный, кепстр можно вычислить рекуррентно повходному сигналу [1, 2, 5]. Рекуррентная формула имеет вид
/> (2.17)
Аналогичные результаты можно получить и тогда, когда Х(г) несодержит полюсов и нулей, лежащих внутри единичной окружности. Такие сигналыназывают максимально-фазовыми. Для этого случая, как это видно из (2.12),
/> (2.18)
Совместное использование (2.14) и (2.15) даёт
/>  (2.19)
Как и в случае минимально-фазовых последовательностей, здесь такжеможно получить рекуррентное соотношение для кепстра

/> (2.20)
2.2 Кодирование речи на основе линейного предсказания
Линейное предсказание является одним из наиболее эффективныхметодов анализа речевого сигнала. Этот метод — доминирующий при оценке такихосновных параметров речевого сигнала как период основного тона, форманты,спектр, функция площади речевого тракта, а также при сокращённом представленииречи с целью её низкоскоростной передачи и экономного хранения. Важность методаобусловлена высокой точностью получаемых оценок и относительной простотойвычислений.
Линейное предсказание — это метод анализа, основанный на цифровойфильтрации оцифрованной речи, при которой текущий отсчет сигнала может быть«предсказан» (например, при автоматическом синтезе речи) линейной комбинацией прошлыхзначений выходной последовательности и настоящих, а также прошлых значенийвходной последовательности. Понятие «линейная комбинация» означает суммупроизведений известных дискретных отсчетов сигнала (входных и выходных),умноженных на соответствующие коэффициенты линейного предсказания дляпредсказания (определения) неизвестного выходного отсчета. При линейномпредсказании основная задача анализа речи – найти коэффициенты этой линейнойкомбинации, которые дают минимальную ошибку предсказания на участке анализасигнала.
Модель сигнала, наиболее часто используемая при линейномпредсказании, сводится к получению неизвестного отсчета х(n) безучета предыдущих входных воздействий на выходе некоторой системы
/> (2.21)
/> (2.22)
где р – число коэффициентов, используемых в модели; k– коэффициенты линейного предсказания; G – коэффициент усиления,определяющий вклад в линейную комбинацию входного отсчета; u(n) –текущий входной отсчет.
Задача анализа оцифрованной речи сводится к определениюкоэффициентов k и G этой модели. Метод определения величин,используемых при расчетах, называется методом наименьших квадратов. Чтобыпонять его суть, пойдем на некоторые упрощения в представлении текущеговыходного отсчета. Будем считать, что входное воздействие на вход системы,моделирующей формирование речевых сигналов, ненаблюдаемо, что справедливо дляряда прикладных задач. Тогда на интервале анализа текущие отсчеты речевогосигнала приближенно опишутся линейной комбинацией предыдущих значений.
х(n) = а1х(n-1) + а2х(n — 2) +… + аkх(n — k) +… + арх(n -р) = />  (2.23)
где х(n-1),...,х(n-р) — предыдущие значения речевого сигнала. Получаемая при этом ошибка предсказания εрназывается иногда остатком предсказания и равняется
/> (2.24)
Коэффициенты линейного предсказания а вычисляются изусловия минимума среднеквадратичного значения ошибки на интервале анализа. Наэтом интервале полная среднеквадратичная ошибка складывается для каждогоотсчета сигнала, представленного линейной комбинацией р предыдущихзначений сигнала
/> (2.25)
Здесь n – номер предыдущего отсчета сигнала наанализируемом интервале; k – номер предыдущего отсчета сигнала припостроении линейной комбинации, представляющей текущий отсчет.
/> (2.26)
Коэффициенты линейного предсказания, минимизирующие полную ошибкупредсказания Е, находятся после того, как выражение для полной ошибкипродифференцировать по всем коэффициентам (полная ошибка предсказания можетрассматриваться как функция параметров аk) и приравнять нулювсе частные производные.
Частными производными называются производные сложной функции поодной из переменных с учетом того, что остальные переменные при такомдифференцировании считаются константами.
Результатом дифференцирования по а, является система излинейных уравнений с неизвестными коэффициентами линейного предсказания,минимизирующими ошибку линейного предсказания на отрезке анализа
сигнала, где коэффициенты k считаются постоянными.
Основной принцип метода линейного предсказания состоит в том, чтотекущий отсчет речевого сигнала можно аппроксимировать линейной комбинациейпредшествующих отсчетов. Коэффициенты предсказания при этом определяютсяоднозначно минимизацией среднего квадрата разности между отсчетами речевогосигнала и их предсказанными значениями (на конечном интервале). Коэффициентыпредсказания – это весовые коэффициенты, используемые в линейной комбинации.
Основные положения метода линейного предсказания хорошосогласуются с моделью речеобразования, где показано, что речевой сигнал можнопредставить в виде сигнала на выходе линейной системы с переменными во временипараметрами, возбуждаемой квазипериодическими импульсами (в пределахвокализованного сегмента) или случайным шумом (на невокализованном сегменте).Метод линейного предсказания позволяет точно и надежно оценить параметры этойлинейной системы с переменными коэффициентами.
Идеи и методы линейного предсказания довольно давно обсуждаются втехнической литературе. Эти идеи используются в теориях автоматическогоуправления и информации, где их называют методами оценивания систем, илиметаллами идентификации систем. Под термином «идентификация» понимаются методылинейного предсказания (ЛП), основанные на оценивании параметров, однозначноописывающих систему при условии, что ее передаточная функция является полюсной.Применительно к обработке речевых сигналов методы линейного предсказанияозначают ряд сходных формулировок задачи моделирования речевого сигнала [1,2].Эти формулировки часто отличаются в исходных предпосылках. Иногда они сводятся,к различным методам вычисления, используемым для оценки коэффициентовпредсказания. Так, применительно к речевым сигналам существуют следующие методывычисления (часто равноценные); ковариационный [3], автокорреляционный [1, 2,9], лестничного фильтра [11, 12].
обратной фильтрации [1], оценки спектра [12], максимальногоправдоподобия [4, 6] и скалярного произведения [1].
Целесообразность использования линейного предсказания обусловленавысокой точностью описания речевого сигнала с помощью модели.
Модель речеобразования в дискретном времени представляется вформе, наиболее удобной для решения задач линейного предсказания. В этом случаеобщий спектр, обусловленный излучением, речевым трактом и возбуждением,описывается с помощью линейной системы с переменными параметрами и передаточнойфункцией
/> (2.27)
Эта система возбуждается импульсной последовательностью длявокализованных звуков речи и шумом для невокализованных. Таким образом, модельимеет, следующие параметры: классификатор вокализованных и невокализованныхзвуков, период основного тона для вокализованных сегментов, коэффициентусиления G и коэффициенты {аk} цифрового фильтра. Всеэти параметры, разумеется, медленно изменяются во времени.
Определение периода основного тона и классификация тон/шум могутбыть осуществлены на основе использования ряда методов, в том числе с помощьюрассматриваемых ниже методов линейного предсказания. Для вокализованных звуковхорошо подходит модель, содержащая только полюса в своей передаточной функции(чисто полюсная), но для носовых и фрикативных звуков требуется учитывать инули. Если порядок р модели достаточно велик, то полюсная модельпозволяет получить достаточно точное описание почти для всех звуков речи.Главное достоинство этой модели заключается в том, что как параметр Gтак и коэффициенты можно оценить непосредственно с использованием оченьэффективных с вычислительной точки зрения алгоритмов.
Отсчет речевого сигнала s(n)связан е сигналом возбуждения u(n) простым разностным уравнением
/> (2.28)
Линейный предсказатель с коэффициентами аkопределяется как система, на выходе которой имеем
/> (2.29)
Системная функция предсказателя р-гопорядка представляет собой полином вида
/> (2.30)
Погрешность предсказания определяется как
/> (2.31)
Из (2.31) видно, что погрешностьпредсказания представляет собой сигнал на выходе системы с передаточнойфункцией
/> (2.32)
Сравнение (2.28) и (2.31) показывает, чтоесли сигнал точно удовлетворяет модели (8.2), то e(n)=Gu(n).Таким образом, фильтр погрешности предсказания A (z) являетсяобратным фильтром для системы H(z), соответствующей уравнению(2.27), т. е.
/> (2.33)
Основная задача анализа на основе линейного предсказаниязаключается в непосредственном определении параметров {/>} по речевому сигналу сцелью получения хороших оценок его спектральных свойств путем использованияуравнения (2.31). Вследствие изменения свойств речевого сигнала во временикоэффициенты предсказания должны оцениваться на коротких сегментах речи. Основнымподходом является определение параметров предсказания таким образом, чтобыминимизировать дисперсию погрешности на коротком сегменте сигнала. При этомпредполагается, что полученные параметры являются параметрами системной функцииH(z) в модели речеобразования.
То, что подобный подход приводит к полезным результатам, возможно,не сразу очевидно, но его полезность будет неоднократно подтверждена различнымиспособами. Во-первых, пусть e(n)=Gu(n). Длявокализованной речи это означает, что е(n) будет состоять изпоследовательности импульсов, т.е. е(n) будет весьма мало почтивсе время. Поэтому в данном случае минимизация погрешности предсказанияпозволит получить требуемые коэффициенты. Другой повод, приводящий к тому жеподходу, вытекает из того, что даже если сигнал формируется системой (2.28) спостоянными во* времени параметрами, которая возбуждается либо единичнымимпульсом, либо белым шумом, то можно показать, что коэффициенты предсказания,найденные по критерию минимизации среднего квадратического значения погрешности(в каждый момент времени), совпадают с коэффициентами в (2.28). Третьей, весьмаважной для практики причиной является то, что подобная минимизация приводит клинейной системе уравнений, решение которых сравнительно легко приводит к получениюпараметров предсказания. Кроме того, полученные параметры, как это будет ясноиз дальнейшего, составляют весьма плодотворную основу для точного описаниясигнала. Кратковременная энергия погрешности предсказания
/> (2.35)
/> (2.36)
/> (2.37)
где /> -сегмент речевого сигнала, выбранный в окрестности отсчета n, т. е.
/>/> (2.38)
Пределы суммирования справа в (2.35)-(2.37) пока не определены, нопоскольку предполагается использовать концепции кратковременного анализа, тоэти пределы всегда предполагаются конечными. Кроме того, для получения среднегозначения необходимо разделить полученный результат на длину речевого сегмента,Однако эти константы несущественны с точки зрения решения системы линейныхуравнений и поэтому далее опускаются. Параметры ак можно получить,минимизируя Еn в (2.37) путем вычисления, />что приводит к системеуравнений
/> (2.38)
где /> — значения аК,минимизирующие Еn. Если ввести определение
/> (2.39)

тогда (2.38) можно переписать в более компактном виде
/> (2.40)
Эта система из р уравнений с р неизвестными можетбыть решена достаточно эффективным способом для получения неизвестныхкоэффициентов предсказания, минимизирующих средний квадрат погрешностипредсказания на сегменте />.Используя (2.37) и (2.39), можно показать, что средняя квадратическаяпогрешность предсказания имеет вид
/> (2.41)
и, используя (2.40), можно выразить Еn в виде
/> (2.42)
Таким образом, общая погрешность предсказания состоит из двухслагаемых, одно из которых является постоянным, а другое — зависит откоэффициентов предсказания.
Для решения системы уравнений относительно коэффициентовпредсказания следует первоначально вычислить величины />, 1≤i≤ри 1≤o≤р. Только после этого можно переходить к решению (2.40) и получениюоценок /> Таким образом,принципиально анализ на основе линейного предсказания очень простой. Однакоподробности, связанные с вычислением /> ипоследующим решением системы уравнений, являются достаточно запутанными инуждаются в дальнейшем обсуждении.
Хотя пределы суммирования в (2.35)-(2.37) и (2.39) не определены,в (2.39) они совпадают с соответствующими пределами в (2.35)-(2.37). Как былоустановлено, для кратковременного анализа соответствующие пределы должныохватывать конечный интервал. Имеется два подхода к этому вопросу, и взависимости от пределов суммирования и выбора сегмента 8п(ш)различают два метода линейного предсказания: автокорреляционный метод иковариационный метод.
В зависимости от определения сегмента анализируемого сигнала можнополучить две различные системы уравнений. Для автокорреляционного метода сигналвзвешивается с использованием N-точечного окна и величины /> получаются на основекратковременной автокорреляционной функции. Полученная матрица корреляцийявляется теплицевой и приводит к первой системе уравнений для параметровпредсказания. При ковариационном методе сигнал предполагается известным намножестве значений -p≤n≤N-1. Никакихпредположений о сигнале вне данного интервала не делается, поскольку толькоэтот интервал необходим для вычислений. Полученная матрица корреляций в данномслучае симметричная, но не теплицева (симметричная и такая, что элементы налюбой диагонали равны между собой). В результате два различных метода вычислениякорреляции приводят к двум различным системам уравнений и к двум совокупностямкоэффициентов предсказания с различными свойствами.
2.3 Цифровая обработка речи в системах речевого общения человека смашиной
2.3.1 Классификация систем речевого общения человека с машиной
Эта область является чрезвычайно важной, дающей все новые и новыеприложения, область, которая только еще развивается и демонстрирует огромныевозможности для широкого применения.
Системы речевого обмена между человеком и машиной можно подразделитьна три класса: с речевым ответом, распознавания диктора и распознавали речи.
Системы с речевым ответом предназначаются для выдачи информациипользователю в форме речевого сообщения. Таким образом, системы с речевымответом — это системы односторонней связи, т. е. от машины к человеку. С другойстороны, системы второго и третьего классов — это системы связи от человека кмашине. В системах распознавания диктора задача состоит в верификации диктора(т. е. в решении задачи о принадлежности данного диктора к некоторой группелиц) или идентификации диктора из некоторого известного множества. Такимобразом, класс задач распознавания диктора распадается на два подкласса:верификации и идентификации говорящего.
Последний класс задач распознавания речи также можно разделить наподклассы в зависимости от таких факторов, как размер словаря, количестводикторов, условия произнесения слов и т. д. Основная задача распознающейсистемы сводится либо к точному распознаванию произнесенной на входе фразы(т.е. система фонетической или орфографической печати произнесенного текста),либо к «пониманию» произнесенной фразы (т. е. к правильной реакции на сказанноедиктором). Именно задача понимания, а не распознавания наиболее важна длясистем с достаточно большим словарем непрерывных речевых сигналов, в то времякак задача точного распознавания более важна для систем с ограничениемсловарем, малым количеством дикторов, систем распознавания изолированных слов.
2.3.2 Системы с речевым ответом
Элементами общей структурной схемы системы с речевым ответом набазе ЭВМ являются блоки памяти для хранения словаря системы с речевым ответом;хранения правил синтеза сообщений по элементам словаря; программ формированияречевого ответа.
На вход системы с речевым ответом поступает сообщение о содержаниивопроса, порождаемого либо другой системой обработки информации, либонепосредственно от человека, обратившегося с интересующим его вопросом кинформационной системе. Откликом системы на поставленный вопрос служит выходноесообщение в виде речевой фразы. Простым примером такой системы являетсяавтоматическая справочная телефонная служба, которая обнаруживает неправильнонабранный номер, определяет причину ошибки (например, телефон отключен или емуприсвоен новый номер и т. д.) и посылает на выход системы с речевым ответомсообщение, содержащее необходимее абоненту указания. В таких системах словарьобычно состоит из ограниченного набора изолированных слов (например, цифр сразличными окончаниями).
В качестве другого примера рассмотрим информационную систему осостоянии курса акций. Здесь абонент должен с помощью кнопочного набора ввестикод интересующего его курса. Система декодирует набор, определяет текущий курсакций и затем выдает соответствующую информацию в систему с речевым ответом длясоставления требуемой фразы. В данном случае словарь должен содержатьдостаточно широкий набор различных слов и фраз.
Существуют два основных подхода к построению систем с речевымответом. Один из них заключается в попытке построения системы, речевые возможностикоторой сравнимы с возможностями человека. В этом случае для синтеза достаточнохранить словарь произношений элементов. Сигналы, необходимые для управленияречевым синтезатором, в соответствии с моделью речеобразования формируются наоснове правил синтеза. Такие системы представляют интерес в том случае, еслитребуется словарь весьма большого объема. Реализация подобных систем — этопроблема, требующая чрезвычайно трудоемких исследований, и на этапе синтезасигнала имеются обширные возможности применения рассмотренных выше методовцифровой обработки сигналов.
В системах с речевым ответом второго типа используетсяограниченный словарь, и сигнал на выходе таких систем формируется посредствомсочленения отдельных элементов реального речевого сигнала, взятых из словаря.Сообщения конструируются в этом.случае путем отыскания требуемых слов и фраз впамяти и воспроизведения их в требуемой последовательности. При разработкесистем подобного типа следует учитывать три основных соображения. Во-первых,способ представления и хранения словаря должен быть выбран таким образом, чтобыв разработанной системе имелась возможность свободного доступа к любомуэлементу словаря. Во-вторых, должен быть выбран способ редактирования речевогоматериала словаря совместно со способом записи его элементов в память.В-третьих, необходимо обеспечить заданную последовательность выбора ивоспроизведения элементов словаря (т.е. способ формирования сообщения).
Поскольку назначение систем с речевым ответом состоит вформировании речевых сообщений, предназначенных для человека, Требование кразборчивости становится определяющим. Не менее важное, значение, однако, имеюти такие параметры речи, как качество восприятия и натуральность. Таким образом,в разрабатываемой системе необходимо с предельной полнотой реализовать все триосновных условия с тем, чтобы добиться максимально возможной разборчивости инатуральности речевого сигнала.
Центральным фактором, определяющим сложность систем с речевымответом, является выбор способа цифрового представления речи при составлениисловаря. Выбор способа цифрового представления оказывает большое влияние наобъем и тип цифровой памяти, а также на способ синтеза речевого сообщения.
При рассмотрении способа цифрового представления речевого сигналаприменительно к системам с речевым ответом полезно остановиться на трехосновных моментах:
- скорость передачи информации (в битах в секунду),необходимая для получения приемлемого качества;
- сложность способа кодирования и декодирования;
- гибкость представления, т. е. возможностьмодификации элементов словаря.
Представление на основе кодирования речевого колебания требуетнаибольших скоростей передачи и, следовательно, максимального объема памяти дляхранения элементов словаря. Эти способы являются простейшими с точки зренияалгоритмов кодирования-декодирования. С другой стороны, способыанализа-синтеза, которые буквально «разбивают речевой сигнал на части»,обладают широкими возможностями полезной модификации элементов словаря. Двапервых фактора, т.е. скорость передачи и сложность реализации, оказываютсущественное влияние на технико-экономические показатели при разработкеполностью цифровых систем речевого ответа.
Другой важной задачей, решаемой при построении систем с речевымответом, являются создание и редактирование словаря. При решении этой задачи,т. е. подготовке элементов словаря и обеспечении высококачественного сигнала навыходе, цифровые методы оказываются чрезвычайно эффективными и гибкими. Обычнослова и фразы, включаемые в словарь, произносятся специально обученным диктороми записываются с высоким качеством. Затем слова или фразы подвергаютсяаналого-цифровому преобразованию и кодированию. Цифровое представление (котороеможет быть как описанием формы сигнала, так и основанным, на представлении типа,«анализ–синтез») оперативно хранится в цифровой форме в ЭВМ. Для исключенияпауз между фразами используется специальный метод поиска начала и конца фразы.При высококачественной записи начало и конец каждой фразы можно определить свысокой точностью. При этом можно точно сказать, удовлетворяет ли протяженностьданной фразы заданной. Фраза, кроме того, может быть воспроизведена для
проверки окончаний слов или фразы на слух. Записи можно легкоповторять, пока не будут достигнуты требуемые длительность и окончание вводимойфразы.
Заключительным шагом в создании словаря являются сравнениеэнергетических уровней всех слов в словаре и соответствующее изменение уровнейдля получения некоторого единого уровня или такого распределения уровней,которое предопределяется предполагаемым использованием словаря. Это может бытьсделано или на основе вычисления максимального значения сигнала, или на основеиспользования других мер, таких, как кратковременная энергия.
Если слово или фраза записаны с требуемым качеством, то онихранятся в определенном месте памяти словаря. Это достигается простойустановкой файлов в речевой системе и указанием адресов, которые используютсясистемой синтеза фраз для определения начала и окончания каждого элементасловаря.
Помимо рассмотренных методов создания словаря система с речевымответом включает в себя методы синтеза фраз по элементам словаря. В этом случаеметоды цифрового представления также обладают значительными преимуществами.Если используется метод кодирования формы речевого колебания, то все, что здесьнеобходимо, — это сочленить речевые сигналы элементов словаря. Если элементомсловаря является отдельное слово, то такой метод может привести к некоторойпотере-натуральности звучания, но подобный подход обладает важным преимуществом,состоящим в том, что система синтеза фраз оказывается очень простой.
С другой стороны, представление, основанное на преобразовании типа«анализ-синтез», обладает большой гибкостью по отношению к изменяющимсясвойствам элементов словаря, например временным соотношениям, окончаниям и т.д. Это свойство является даже более важным, чем малая скорость передачи (объемописания), которую можно достигнуть при использовании описания на основепреобразования «анализ-синтез».
Поскольку элементы словаря представлены в виде набора основныхпараметров речевого сигнала, можно, например, изменять период основного тона идлительность слов таким образом, чтобы привести их в соответствие с контекстом.Более интересной представляется возможность такого изменения параметров награницах слов, чтобы добиться как можно большего сходства междусинтезированными и реальными речевыми сигналами. Достигнуть такого эффекта дажев простейших случаях можно лишь на основе использования правил для определениятребуемого периода основного тона и протяжённости во времени, а такжеалгоритмов изменения параметров в соответствии с изменяющейся протяженностьюслов и поглощением их границ в слитной речи [1,2].
2.3.3 Системы распознавания дикторов
При распознавании дикторов цифровая обработка речи является темпервым шагом, с которого начинается решение задачи распознавания образов.Речевой сигнал представляется с использованием таких методов цифровойобработки, которые сохраняют индивидуальные особенности диктора. Полученныйобраз сравнивается с предварительно подготовленными эталонными образами, азатем применяется соответствующая логика принятия решений для определенияголоса заданного диктора среди возможного множества. Системы распознавания,дикторов подразделяются на два вида: идентификация и верификация. Приверификации диктора требуется установить его идентичность данному эталону.Устройство верификации принимает одно из двух возможных решений: дикторявляется тем, за кого он себя выдает, или не является. Для вынесения такогорешения используется совокупность параметров, содержащих необходимую информациюоб индивидуальности диктора и измеряемых по одной или нескольким фразам.Измеренные значения сравниваются (часто с использованием некоторых существеннонелинейных метрик близости) с аналогичными параметрами эталонных образов подлежащегоопознанию диктора.
Таким образом, при верификации диктора требуется однократноесравнение совокупности (совокупностей) измеренных значений со значениямипараметров-ионов, на основе которого выносится решение о принятии илиотклонении предполагаемой идентичности. В общем случае вычисляется расстояниемежду измеренными значениями и распределением эталонов. На основе распределенияпотерь между возможными типами ошибок (т. е. верификации «самозванца» иотклонении «подлинного» диктора) устанавливается соответствующий порогразличимости (расстояния). Вероятность перечисленных выше ошибок практически независит от N (числа эталонов, хранимых в системе), поскольку все эталоныголосов других дикторов используются для формирования устойчивогораспределения, характеризующего всех дикторов. Записывая сказанное выше вматематической форме, обозначим распределение вероятности измеренных значениивектора х для диктора как рi(х), что приводит кпростому решающему правилу вида
Верифицировать диктора i, если рi(х)>ciраv(х);
Отклонить диктора i, если рi(х)ci раv (х);(2.43)
где ci — константа для i-го диктора, определяющаявероятности ошибок i-го диктора, а раv (х)–среднее(по всему ансамблю дикторов) распределение вероятности измеренных значенийвектора х. Изменяя порог ciможно изменять вероятность ошибки, определяемуювероятностями ошибок обоих типов. Задача идентификации диктора существенноотличается от задачи верификации. В этом случае система должна точно указатьодного из дикторов среди N дикторов данного множества. Таким образом, вместооднократного сравнения измеряемых параметров с хранимым в системе эталономнеобходимо провести N сравнений, Решающее правило в этом случае сводится квыбору такого диктора I, для которого
/> (2.44)
т.е. выбирается диктор с минимальной абсолютной вероятностьюошибки. С увеличением количества дикторов в ансамбле возрастает и вероятностьошибки. поскольку большое число вероятностных распределений в ограниченномпространстве параметров не может не пересекаться. Все более вероятнымстановится то, что два или более дикторов в общем ансамбле будут иметьраспределения вероятностей, которые близки друг к другу. При таких условияхприемлемая идентификация дикторов становится практически невозможной.Приведенный выше анализ позволяет сделать вывод, что между задачамиидентификации и верификации имеется много общего и много различий. В каждомслучае диктор должен произнести одну или несколько тестовых фраз. По этимфразам проводятся некоторые измерения, и затем вычисляются одна или несколькомер различимости («расстояния») между предъявленным и эталонным векторами.Таким образом, с позиции методов цифровой обработки обе эти задачи сходны.Основное различие возникает на этапе вынесения решений [1,2].
2.3.4 Системы распознавания речи
Как и при распознавании диктора, методы цифровой обработкиприменяются при распознавании речевого сигнала для получения описания распознаваемогообраза, которое затем сравнивается с хранимыми в памяти эталонами. Задачараспознавания речевого сигнала состоит в определении того, какое слово, фразаили предложение были произнесены.
В отличие от областей машинного речевого ответа и распознаваниядиктора, где задача в общем случае достаточно определена, область распознаванияслов является одной из тех, где, прежде чем поставить задачу, требуется ввестибольшое число предположений например:
- тип речевого сигнала (изолированные слова, непрерывнаяречь и т.д.);
- число дикторов (система для одного диктора,нескольких дикторов, неограниченного числа дикторов);
- тип диктора (определенный, случайный, мужчина,женщина, ребенок);
- условия произнесения фраз (звукоизолированноепомещение, машинный зал, общественное место);
— система передачи (высококачественный микрофон,узконаправленный микрофон, телефон);
- тип и число циклов обучения (без обучения, сограниченным числом циклов обучения, с неограниченным числом циклов обучения);
- размер словаря (малый объем 80—20 слов, среднийобъем 20-100 слов и большой объем — более 100 слов);
- формат произносимых фраз (ограниченный подлительности текст, свободный речевой формат).
Из приведенного перечня условий следует, что при создании системраспознавания речи реализация некоторых из условий может оказаться болеепредпочтительной.
Существует много способов представления сигнала, которые можноиспользовать в системах распознавания речи, предоставления, применяемые всистемах, инвариантных к диктору, должны быть достаточно устойчивыми. Измеренияпараметров должны быть простыми и однозначными, а их измеренные значения должнынаиболее полно отражать различия в звуках речи. Кроме того, измерения должныдопускать достаточно простую интерпретацию с позиций систем, инвариантных кдиктору. Во многих таких системах использованы следующие параметры: среднеечисло переходов через нуль, энергия, коэффициенты линейного предсказания сиспользованием двухполюсной модели и погрешность предсказания [1,2].

2.3.5 Обзор существующих систем распознавания речи
В настоящее время отсутствуют дикторонезависимые системыраспознавания слитной речи как с неограниченным словарем, так и ограниченным, аимеющиеся системы (такие как Dragon Dictate — программа для печати текста сголоса) требуют очень много времени и терпения для того, чтобы обучить ихудовлетворительно распознавать раздельно произносимые слова одного диктора.Среди других распознающих систем можно назвать Lotus Word Pro, MedSpeak, VoiceType Simplify Speaking, ViaVoice, Kurzweil Voice. He требующие обучения системыраспознают обычно от нескольких десятков до сотен слов и используются дляподачи команд голосом. Однако они также являются дикторозависимыми. В этой жеобласти остается реализация амбициозных планов, наподобии принятого в 1986 вЯпонском национальном проекте АТК (Advanced Telecommunication Research),который состоял в том, чтобы получать речь на одном языке и одновременносинтезировать ее на другом или утверждения о реализации идеи человеко-машинногообщения. Поэтому исследования в этой области являются весьма актуальными.

3. Разработка программного обеспечения дляраспознавания команд управления промышленным роботом
3.1 Реализация интерфейса записи и воспроизведения звуковогосигнала в операционной системе Microsoft Windows
3.1.1 Основные сведения
Звуковые данные хранятся в компьютере с помощью методаимпульсно-кодовой модуляции – РСМ. Расшифровывается РСМ как Pulse-CodeModulation. При этом методе аналоговый звук квантуется по времени и амплитуде.При выводе звука на колонки происходит обратное преобразование.
При прямом преобразовании кривая звука превращается в точки. Все,что между точками, теряется, поэтому чем чаще происходит замер амплитуды, темвыше качество звука и меньше потерь. Значение, обратное времени замера (Т3),называется частотой дискретизации — Тд. Для качественногозвука частота дискретизации должна быть вдвое больше, чем высшая частота вобрабатываемом сигнале звука.
В Windows есть хорошо продуманная и хорошо документированнаябиблиотека для работы со звуком — mmsystem.
Для работы со звуковой картой используется следующий алгоритмработы:
- инициализировать звуковой драйвер;
- установить параметры;
- воспроизвести или записать звуковые данные;
- закрыть драйвер.
Для вывода звука данные о звуке в цифровом виде простоотправляются звуковой карте. Она преобразует их в аналоговый сигнал [14].

3.1.2 Основные функции, необходимые для записи звука
Все основные функции содержатся в модуле rnmsystem, поэтомунеобходимо подключить этот модуль, а также добавить в проект файл WINMM.LIB.
Прежде всего необходимо заполнить структуру WAVEHDR. Она содержитследующие поля:
typedef struct wavehdr_tag {LPSTR lpData;
DWORD dwBufferLength;
DWORD dwBytesRecorded;
DWORD dwUser;
DWORD dwFlags;
DWORD dwLoops;
struct wavehdr_tag далеко * lpNext;
reserved DWORD;} WAVEHDR;
Структура WAVEHDR определяет заголовок, используемый, чтобыидентифицировать буфер звуковых данных
Составляющие структуры:
lpData — указательна звуковые данные;
dwBufferLength — размер звуковых данных;
dwBytesRecorded — количествозаписанных байт (при воспроизведении этот параметр не используется);
dwUser — сюдаможно записать все, что угодно;
dwFlags — здесьпроисходит описание заголовка. Конкретизирует флаги, предоставляющие информациюо буфере данных. Может принимать значения, приведенные в табл. 3.1
dwLoops — указываетколичество циклов. Этот параметр используется только с буферами выходныхданных.
lpNext — зарезервирован дляиспользования драйвером устройства, чтобы указать на следующую структуруWAVEHDR в очереди.
reserved — зарезервирован для использования драйвером устройства.
Это поле может использоваться, чтобы запомнить указатель наструктуру, содержащую информацию о клиенте.
Таблица 3.1- Флаги и их значенияФлаг Значение WHDR_DONE устанавливается драйвером устройства, чтобы указать, что работа с буфером данных закончена и возвращается к приложению WHDR_BEGINLOOP показывает, что этот буфер — первый буфер в цикле. Этот флаг используется только с буферами выходных данных. WHDR_ENDLOOP показывает, что этот буфер — последний буфер в цикле. Этот флаг используется только с буферами выходных данных WHDR_PREPARED
устанавливается драйвером устройства, чтобы указать, что буфер данных был подготовлен с помощью waveInPrepareHeader или waveOutPrepareHeader WHDR_JNQUEUE устанавливается драйвером устройства, чтобы указать, что буфер данных находится в очереди для воспроизведения
Используйте WHDR_BEGINLOOP и флаг WHDR_ENDLOOP в поле dwFlags, чтобы указать начала иконцы блоков данных для использования их в цикле. Чтобы прокручивать в циклеодин блок, необходимо установить оба флага для этого блока. Необходимо использоватьполе dwLoops вструктуре WAVEHDR для первого блока в цикле, чтобы установить количествоциклов.
Первая функция используемая для записи звука — wavelnOpen. Эта функция устройствоввода для звукового потока. В модуле она объявлена следующим образом:
MMRESULT waveInOpen(
LPHWAVEIN phwi,
UINT_PTR uDevicero,
LPWAVEFORMATEX pwfx,
DWORD_PTR dwCallback,
DWORD_PTR dwCallbacklnstance,
DWORD fdwOpen);
В функции определен ряд параметров. Рассмотрим их основноеназначение
phwi — адрес, по которомубудет записан указатель на устройство воспроизведения. Этот параметр может бытьNULL, если WAVE_FORMAT_QUERY указан для fdwOpen.
UDevicelD –идентификатор устройства, которое необходимо открыть, если поставить сюдаконстанту WAVE_MAPPER, то откроется устройство по умолчанию.
IpFormat –указатель на структуру типа WAVEFORMATEX, в которой описан формат записываемыхзвуковых данных.
dwCallback – указательна функцию «семафор». Эта функция вызывается для сообщения о текущих событиях.
fdwOpen – параметры открываемогоустройства. Может принимать значения, приведенные в табл. 3.2
Необходимо использовать функцию wavelnGetNumDevs, чтобы определить числоустройств ввода, присутствующих в системе. Идентификатор устройства, указанный uDeviceID, изменяется в пределах отноля до на один меньше, чем количество присутствующих устройств. КонстантаWAVE_MAPPER может также использоваться в качестве идентификатора устройства.
Если выбирать, чтобы окно или поток получал информацию отзыва,следующие сообщения отправляются процедуре окна или потока, чтобы указатьизменения в процессе ввода звуковой информации: MM_WIM_OPEN, MM_WIM_CLOSE, иMM_WIM_DATA.
Если вы выбираете, чтобы функция получала информацию отзыва,функции отправляются следующие сообщения, чтобы указать изменения в процессеввода звуковой информации: WIM_OPEN, WIM_CLOSE, и WIM_DATA.
Таблица 3.2 – Параметры открываемогоустройстваCALLBACK_EVENT в параметре dwCallback находится событие THandle, через которое происходит информирование о ходе воспроизведения; CALLBACK_FUNCTION в dwCallback находится указатель на функцию; CALLBACK_THREAD в dwCallback находится идентификатор потока CALLBACK_WINDOW в dwCallback находится указатель на окно, которому посылается сообщение CALLBACK_NULL в dwCallback ничего нет WAVE_ALLOWSYNC можно открыть устройство в синхронном режиме WAVE_FORMAT_DIRECT запрещается преобразование данных с помощью АСМ-драйвера (ACM — Audio Compression Manager) WAVE_FORMAT_QUERY если установить этот параметр, то реального открытия звуковой карты не происходит, функция проверяет возможность открытия с заданными параметрами, и если всё нормально, то возвращает MMSYSERRNOERROR (если параметры недопустимы, то возвращается код ошибки) MMS YSERR_ALLOCATED указанный ресурс уже занят MMSYSERR_BADDEVICEID указанный идентификатор устройства не существует MMSYSERR_NODRIVER нет драйвера для устройства MMSYSERR_NOMEM невозможно использовать память WAVERR_BADFORMAT попытка открытия в неподдерживаемом звуковом формате
Необходимо заполнить структуруWAVEFORMATEX. Она имеет следующий вид:
typedef structWAVEFORMATEX { WORD wFormatTag;
WORD nChannels;
DWORD nSamplesPerSec;
DWORD nAvgBytesPerSec;
WORD nBlockAlign;
WORD wBitsPerSample;
WORD cbSize;} WAVEFORMATEX;
В этой структуре:
wFormatTag –формат звуковых данных (чаще всего используется WAVE_FORMAT_PCM);
nChannels –количество каналов (1 — монО, 2 — стерео);
nSamplesPerSec –частота дискретизации (возможны значения 8000, 11025, 22050 и 44100);
nAvgBytesPerSec –количество байт в секунду для WAVEFORMATPCM это является результатомnSamplesPerSec* nBlockAlign;
nBlockAlign –выравнивание блока (для WAVEFORMATPCM равен wBitsPerSample /8* nChannels);
wBitsPerSample –количество бит в одной выборке (для WAVE_FORMAT_PCM может быть 8 или 16);
cbSize — размер дополнительнойинформации, которая располагается после структуры (если ничего нет, то долженбыть 0).
Теперь следует подготовить заголовки, которые будут отправлятьсядрайверу. Для этого существует функция waveInPrepareHeader
MMRESULT waveInPrepareHeader(
HWAVEOUT hwo,
LPWAVEHDR pwh,
U1NT cbwh);
Внутренняя структура:
hwo – идентификаторустройства записи (полученный после вызова функции wavelnOpen).
pwh – указатель на структуру wavehdr_tag;
cbwh – размер структуры wavehdr_tag.
Функция возвращает значения, приведенные в табл. 3.3.
При этом lpData, dwBufferLength, иdwFlags –члены структуры
WAVEHDR — должны быть установлены перед запросом этой функции (dwFlags должен быть нулевым).

Таблица 3.3 – Возвращаемые значенияMMSYSERR_NOERROR успех MMSYSERR_INVALHANDLE указанный дескриптор устройства недействителен MMSYSERR_INVALPARAM базовый адрес буфера не выровнен с объемом выборки MMSYSERR_NODRIVER нет драйвера для устройства MMSYSERR_NOMEM невозможно использовать память
Для того, чтобы освободить драйвер необходимо использовать функциюwaveInUnprepareHeader. Этафункция должна быть вызвана после того, как драйвер устройства заполняет буфери возвращает его приложению. Необходимо вызвать эту функцию перед освобождениембуфера.
MMRESULT waveInUnprepareHeader(
HWAVEIN hwi,
LPWAVEHDR pwh,
U1NT cbwh);
Параметры:
hwi — указательна записывающее устройство;
pwh — указатель на структуру WAVEHDR,идентифицирующую буфер, который необходимо очистить.
cbwh — размер, в байтах,структуры WAVEHDR.
Функция возвращает MMSYSERR_NOERROR, если всё проходит успешно, если есть ошибки, возвращаетсяодно из значений, приведенных в табл. 3.4.
Эта функция дополняет waveInPrepareHeaderфункцию. Необходимо вызвать эту функцию передосвобождением буфера. После передачи буфера в драйвер устройства функцией waveInAddBuffer, необходимо ждать, покадрайвер не закончит работу с буфером перед запросом waveInUnprepareHeader. Очисткабуфера, который не был занят, не имеет никакого эффекта, и функция возвращаетноль.

Таблица 3.4 – Значения, выдаваемые при ошибкахОшибка Значение MMSYSERR_INVALHANDLE указанный дескриптор устройства недействителен MMSYSERR_NODRIVER нет драйвера для устройства MMSYSERR_NOMEM невозможно использовать память MMSYSERR_STILLPLAYING буфер, указанный pwh, занят
Для передачи буфера приёма данных предоставленному звуковомуустройству используется функция waveInAddBuffer.Когда буфер заполнен, приложение получаетсоответствующее сообщение. Функция имеет следующий вид:
MMRESULT waveInAddBuffer(HWAVEIN hwi,
LPWAVEHDR pwh,
UINT cbwh);
Описание параметров:
hwi- указательна входное устройство;
pwh — указатель на структуру WAVEHDR,которая идентифицирует буфер.
cbwh — размер,в байтах, структуры WAVEHDR.
Функция возвращает MMSYSERR_NOERROR, если всё проходит успешно, если есть ошибки, возвращает одноиз значений, приведенных в табл. 3.5.
Таблица 3.5 — Возвращаемые значенияОшибка Значение MMSYSERR_INVALHANDLE указанный дескриптор устройства недействителен MMSYSERR_NODRIVER нет драйвера для устройства MMSYSERR_NOMEM невозможно использовать память WAVERR_UNPREPARED буфер, указанный pwh, не был готов

Когда буфер заполнен, бит WHDR_DONE установлен в dwFlags -членеструктуры WAVEHDR.
Буфер должен быть подготовлен функцией waveInPrepareHeader перед тем, как это будетпередаваться функции waveInAddBuffer.
Далее вызывается функция waveInStart.Она начинает ввод данных через предоставленноеустройство. Эта функция выглядит следующим образом:
MMRESULT waveInStart(HWAVEIN hwi);
Параметр hwi указываетна устройство, принимающее информацию.
Функция возвращает MMSYSERR_NOERROR, если всё проходит успешно,если есть ошибки, возвращается одно значений, приведенных в табл. 3.6
Таблица 3.6 — Возвращаемые значенияОшибка Значение MMSYSERR_INVALHANDLE указанный дескриптор устройства недействителен MMSYSERR_NODRIVER нет драйвера для устройства MMSYSERR_NOMEM невозможно использовать память
Буферы возвращаются приложению, когда заполнены или, когда вызванафункция waveInReset(dwBytesRecorded) членв заголовке будет содержать длину данных). Если нет никаких буферов в очереди,данные проходят мимо приложения, и ввод продолжается.
Вызов этой функции, когда она уже была вызвана, не имеет эффекта,и функция возвращает ноль [15].
3.1.3 Основные функции, необходимые для воспроизведения звука.
Для воспроизведения звуковой информации первая функция waveOutOpen. Она открывает устройствовывода для звукового потока. В модуле она объявлена следующим образом:

MMRESULT waveOutOpen (LPHWAVEIN phwi,
UINT_PTR uDeviceID, LPWAVEFORMATEX pwfx,DWORD_PTR dwCallback, DWORD_PTR dwCallbacklnstance, DWORD fdwOpen);
В функции определен ряд параметров. Рассмотрим их основноеназначение
phwi — адрес, по которому будетзаписан указатель на устройство воспроизведения;
UDeviceID — идентификатор устройства, которое необходимо открыть, если поставить сюдаконстанту WAVE_MAPPER, то откроется устройство по умолчанию.
lpFormat — указательна структуру типа WAVEFORMATEX, в которой описан формат воспроизводимыхзвуковых данных.
dwCallback — указатель на функцию «семафор». Эта функция вызывается для сообщения о текущихсобытиях.
dwFlags — параметры открываемогоустройства. Может принимать следующие значения, совпадающие со значениями fdwOpen для функции wavelnOpen
Структура WAVEFORMATEX для воспроизведения звуковой информацииимеет такой же вид, как и для записи. Однако при воспроизведении звука, оназаполняется автоматически при выборе воспроизводимого файла.
Теперь предстоит подготовить заголовки, которые будут отправлятьсядрайверу. Для этого есть функция waveOutPrepareHeader
MMRESULT waveOutPrepareHeader(HWAVEOUThwo,
LPWAVEHDR pwh,
UINT cbwh);
Возвращаемые параметры те же. Внутренняяструктура:
hwo — идентификаторустройства воспроизведения (полученный
после вызова функции waveOutOpen).
pwh — указатель на структуру wavehdr_tag;cbwh — размер структуры wavehdr_tag.
Теперь структура wavehdr_tag.Она выглядит так же, как и в случае записи.
После окончания работы с этим заголовком нужно освободить его спомощью функции waveOutUnprepareHeader.
Теперь нужно отправить подготовленный заголовок драйверу. Дляэтого используется функция waveOutWrite,которая выглядит следующим образом:
MMRESULT waveOutWrite(HWAVEOUT hwo,
LPWAVEHDR pwh,
UINT cbwh);
В ней:
hwo — идентификатор устройства воспроизведения;
pwh — это указатель наструктуру, сформированную с помощью waveOutPrepareHeader;
cbwh — размер структуры wavehdr. Возвращаемые значения теже, что и при открытии звуковой карты.
После вывода звука нужно вызвать waveOutUnprepareHeader, чтобыочистить заголовки и закрыть устройство. Теперь необходимо закрыть устройство спомощью функции waveOutClose. Онаимеет следующий вид:
MMRESULT waveOutClose(HWAVEOUT hwo);
Параметр hwo указывает на устройствовывода. Если функция завершается успешно, дескриптор не больше действителенпосле этого вызова. Функция возвращает MMSYSERR_NOERROR, если всё проходит успешно, если есть ошибки, возвращаетсяодно из значений, приведенных в табл. 3.7.
Если устройство ещё воспроизводит звуковой файл, функция его незакрывает. Необходимо использовать функцию waveOutReset, чтобы закончить воспроизведение передзапросом waveOutClose.
Таблица 3.7 — Возвращаемые значенияОшибка Значение MMSYSERR_INVALHANDLE указанный дескриптор устройства недействителен MMSYSERR_NODRIVER нет драйвера для устройства MMSYSERR_NOMEM невозможно использовать память WAVERR_STILLPLAYING буфер, указанный pwh, занят
waveOutReset останавливаетвоспроизведение на указанном вывода и сбрасывает текущую координату в нолю.Воспроизведение из буферов отмечается как выполнено и управление передаётсяприложению. Функция имеет следующий вид:
MMRESULT waveOutReset (HWAVEOUT hwo);
Параметр hwo указывает на устройствовывода.
Функция возвращает MMSYSERR_NOERROR, если всё проходит успешно, если есть ошибки, возвращаетсяодно из значений, приведенных в табл. 3.8 [14,15].
Таблица 3.8 — Возвращаемые значенияОшибка Значение MMSYSERR_INVALHANDLE указанный дескриптор устройства недействителен MMSYSERR_NODRIVER нет драйвера для устройства MMSYSERR_NOMEM невозможно использовать память MMSYSERR_NOTSUPPORTED указанное устройство является синхронным и не поддерживает приостановку

3.2 Реализация программного обеспечения для записи,воспроизведения и анализа звукового сигнала
Для реализации программного обеспечения для записи.воспроизведения и анализа звукового сигнала были созданы следующие окна:главное окно программы, окно добавления слова в словарь, окно записи иобработки звука и окна, обеспечивающие просмотр рассчитанных характеристик ввиде графиков.
В главном окне обеспечивается просмотр и редактированиесуществующих словарей, а также их сохранение. Это окно содержит главное меню,панель управления и рабочую область приложения. Главное меню состоит изследующих пунктов: File,Edit, View, Help. Нажатие на пункт File позволяет создать новыйфайл, открыть существующий файл с расширением *.spl, открыть недавно использованныйфайл, сохранить новый файл и сохранить существующий файл под другим именем,выйти из программы. При нажатии на пункт Edit можно выбрать одно изпредлагаемых действий: добавить слово, удалить слово, воспроизводить звуквыделенного слова в рабочей области приложения. Пункт View отвечает за вид главногоокна: наличие или отсутствие панели управления и строки состояния.
В панели управления присутствуют следующие кнопки: создание новогофайла, открытие существующего файла, сохранение файла, удаление и добавлениеслова, воспроизведение слова,
Для воспроизведения выбранного слова требуется лишь нажать насоответствующую кнопку в панели управления либо выбрать Edit->Play Sound.
Для записи нового слова требуется нажать на соответствующую кнопкув панели управления либо выбрать Edit->AddWord. При этом появляется новое окно, основанное надиалоговой форме, в котором есть поле для ввода буквенного обозначения новогослова. После ввода слова в поле Word, необходимонажать кнопку Record. Послеэтого появляется новое окно, также основанное на диалоговом окне. Это окнообеспечивает запись и анализ нового слова. Для записи нового слова, преждевсего, необходимо выбрать в поле Sourceприсутствующую в данном компьютере звуковуюкарту. Далее в поле Formatнеобходимо выбрать формат записываемых данных.Предлагаются форматы данных, приведенные в табл. 3.9.
Выбор формата записываемых данных необходимо осуществлять исходяиз следуюпщх предпосылок: с одной стороны, чем выше частота дискретизации(количество элементов в секунду), чем выше количество каналов и чем вышеколичество бит в элементе, тем выше качество записи, а потом и воспроизведениязвука; с другой стороны, чем выше эти параметры, тем сложнее проводить анализзвука, тем дольше обрабатываются данные. Поэтому для решения поставленнойзадачи выбирается частота дискретизации 11025 Гц, выбирается моно-режим, т.е.количество каналов=1, и количество бит в элементе=8.
После этого всё уже готово для записи. Для непосредственногоосуществления записи звукового аналога слова необходимо нажать на кнопку Record.
Таблица 3.9 — Форматы данныхНазвание Количество Частота Количество каналов дискретизации бит WAVE_FORMAT_1M08 1 11025 8 WAVE_FORMAT_1M16 1 11025 16 WAVE_FORMAT_J S08 2 11025 8 WAVE_FORMAT_lS16 2 11025 16 WAVE_FORMAT_2M08 1 22050 8 WAVE_FORMAT_2M16 1 22050 16 WAVE_FORMAT_2S08 2 22050 8 W AVE_FORMAT_2 S16 2 22050 16 WAVE_FORMAT_4M08 1 44100 8 WA VE_FORMAT_4Ml 6 1 44100 16 WAVE_FORMAT_4S08 2 44100 8 WAVE_FORMAT_4S16 2 44100 16

После нажатия на кнопку Record, в программеустанавливается режим работы программы — запись. При этом вызываются функции,которые
останавливают воспроизведение, если оно было включено. Кнопка Record становится неактивной, акнопка Stop — активной. Далее определяются параметры выбранной звуковой карты и форматзаписываемого звука, Очищаются буферы, в которые будет производиться запись.
Ниже приведена функция, обеспечивающая записьзвуковой информации.
BOOLCWaveIriDevice::Record(CWave* pWave, int iBlockSize) {if (IsOpenQ) {if (!CanDoFormat(pWave->GetFormat())) {TRACE(«Imput device is already openand doesn't support format»); return FALSE;}
} else {if(!Open(WAVE_MAPPER, pWave->GetFormat())) { TRACE(«No input devicesupports format»); return FALSE;}} miBlockSize = iBlockSize;
WAVEHDR* phdr =(WAVEHDR*)malloc(sizeof(WAVEHDR)); ASSERT(phdr);
memset(phdr, 0,sizeof(WAVEHDR));
phdr->lpData =(char*)malloc(iBlockSize);
ASSERT(phdr->lpData);
phdr->dwBufferLength =iBlockSize;
phdr->dwUser = (DWORD)(void*)p Wave;
MMRESULT mmr = waveInPrepareHeader(m_hInDev,phdr,
sizeof(WAVEHDR)); if(mmr) (MMERR(mmr); return FALSE;}
mmr =waveInAdabuffer(m_hInDev, phdr, sizeof(WAVEHDR)); if (mmr) {MMERR(rnmr);
return FALSE;} (3.1)
phdr =(WAVEHDR*)malloc(sizeof(WAVEHDR));
ASSERT(phdr);
memset(phdr, 0,sizeof(WAVEHDR)); phdr->lpData = (char*)malloc(iBlockSize);ASSERT(phdr->lpData); phdr->dwBufferLength = iBlockSize; phdr->dwUser= (DWORD)(void*)pWave;
mmr =waveInPrepareHeader(m_hInDev, phdr, sizeof(WAVEHDR)); if (mmr) {MMERR(mmr);return FALSE;}
mmr =waveInAddBufTer(m_hInDev, phdr, sizeof(WAVEHDR)); if (mmr) (MMERR(mmr); returnFALSE;}
mmr = wavelnS tart(m_hInDe v); if (mmr) {MMERR(mmr); return FALSE;} return TRUE;}
Прежде всего, проверяется, открыто ли устройство. Если открыто, топроверяется, поддерживает ли оно выбранный формат. Если не поддерживает, товыводится сообщение, что устройство уже открыто, но такой формат оно неподдерживает. Если устройство закрыто, то предпринимается попытка открытькакое-либо устройство, поддерживающее данный формат. Если не удалось открытьустройство, поддерживающее данный формат, то выводится сообщение, что никакоеустройство не поддерживает данный формат. Устанавливаем два буфера и отправляемих в драйвер устройства. Устанавливаем заголовок. Опустошаем заголовок.Подготавливаем заголовок. Начинаем запись
До тех пор, пока не будет нажата кнопка Stop, будет производитьсязапись. После этого при нажатии на кнопку Play можно прослушать весьзаписанный сигнал. При наличии претензий к записанному сигналу, его
можно переписать, повторно нажав на кнопку Record. Все ранее записанныеданные при этом теряются
Для обработки полученных данных необходимо нажать на кнопку OpenData, которая вызывает функциюобработки данных. После нажатия на кнопку OpenData, в программе устанавливаетсярежим работы программы -обработка данных, находящихся в буфере.
Ни же приведена функция, обеспечивающая обработку данных,находящихся в буфере.

BOOL CWaveOutDevice::OpenData(CWave*pWave,CClientDC *curDC) (int count=0;
CWaveBlockList* pBL =pWave->GetBlockList(); if(!pBL) return FALSE; POSITION pos =pBL->GetHeadPositionO; if(!pos) return FALSE;
if(pWave->m_bAutoDestruct) pWave->AddRef(); while (pos)
{CWaveBlock* pBlock =pBL->GetNext(pos); ASSERT(pBlock);
WAVEHDR* phdr =(WAVEHDR*)malloc(sizeof(WAVEHDR)); ASSERT(phdr);
memset(phdr, 0,sizeof(WAVEHDR)); phdr->lpData = (char*) pBlock->GetSamples();phdr->dwBufferLength = pBlock->GetSize(); phdr->dwUser =(DWORD)(void*)pWave; CString ss("");
ss.Format(_T("%s"),pBlock->m_pSamples);int iw = ss.GetLengthO;
intnum=0;                                                                                           (3.2)
for(long h=0;h
{num=count*4096+h;bunker[num]=(int)ss. GetAt(O); CString s("");
s.Format(_T("%f"),bunker[num]);
ss.Delete(0,l);}
count-H-;
len=4096*count;}
Noise(bunker,len,0);
Filter(bun,l);
Hamming(fнl,l);
Furje(ham,l);
СИр(пЦ);
AfxMessageBox(«Dataare...»); return TRUE;}
Прежде всего, обнуляем номер буфера. Далее берём список блоковданных из функции GetBlockList().Если это невозможно, выходим из функции.Определяем позицию первого элемента в блоке данных. При невозможностивыполнения действия, выходим из функции. Наращиваем счётчик ref, если мы егоиспользуем. До тех пор, пока существует pos, выполняем следующий цикл.Определяем позицию следующего элемента. Устанавливаем заголовок. Очищаемзаголовок. Передаём в параметр IpDataзначения элементов. Определяем длину буфера.Объявляем строку. В эту строку записываем данные о звуке из pBlock. Определяем длину строки.Объявляем и обнуляем счётчик для массива, в который будем записывать данные о звуке.Т.к. буфер ограничен числом 4096, в цикле от 0 до 4096 записываем данные изстроки в массив. Номер элемента массива определяется как номер буфераумноженный на его длину плюс номер элемента в буфере. Непосредственно самазапись из строки в массив. Переопределяем тип данных массива. Увеличиваем номермассива.
Рассчитываем длину массива. Вызываем функцию избавления от шумов.Вызываем функцию обработки с помощью фильтра. Вызываем функцию обработки в окнеХэмминга. Вызываем функцию выполнения преобразования Фурье. Вызываем функциюпроведения клиппирования. Выводим на экран сообщение, что данные успешнообработаны. Выходим из функции.
После появления сообщения о том, что данные успешно обработаны,можно воспроизвести звуковую информацию, находящуюся в буфере, просмотретьграфики функций, записать новую информацию (при этом теряется обработанная) иливыйти из программы с сохранением звуковой информации, нажав Ok, или без него, нажав Cancel.
Для просмотра графиков, представляющих результаты обработкиданных, в этом окне расположены кнопки, при нажатии на каждую из которыхпоявляется окно, в котором есть кнопка, нажав на которую, получаем графикинтересующей нас зависимости.

3.3 Реализация функции распознавания голосовых команд голосовогоуправления промышленным роботом
Для реализации функции распознавания голосовых команд голосовогоуправления промышленным роботом была создана функция OpenData. После того, как данные озаписанной информации занесены в массив, функция вызывает функции, отвечающиеза преобразование этого массива. Прежде всего, вызывается функция Noise, которая на основанииразделения вокализованного звука и невокализованного переписывает массив сданными о звуке в новый массив, содержащий лишь участки вокализованного звука.
После этого проводится обработка в окне Хэмминга.График полученный в результате этого преобразования приведен на рис 3.3.
/>
Рисунок 3.3 – График функции, после обработки в окне Хэмминга
Далее выполняется преобразование Фурье для коэффициентов,взвешенных окном Хэмминга После этого производится фильтрация. Затем проводитсяобратное преобразование Фурье. Далее следует операция клигширования, наосновании графика которой делается вывод о том, какое слово было произнесено.На рис. 3.4 приведены графики сигнала для слова «вперёд».

/>
Рисунок 3.5 — Графики сигнала для слова«назад» (а — график вокализованной части сигнала; б — график сигнала после обработкив окне Хэмминга; в -график сигнала после клиппирования)
На рис. 3.6 приведены графики сигнала для слова «стоп».
/>
Рисунок 3.6 – Графики сигнала для слова«стоп» (а — график вокализованной части сигнала; б — график сигнала послеобработки в окне Хэмминга; в -график сигнала после клиппирования)
На рис. 3.11 приведены графики сигнала для слова «пять».

/>
Рисунок 3.11 – Графики сигнала для слова«пять» (а — график вокализованной части сигнала; б — график сигнала послеобработки в окне Хэмминга; в — график сигнала после клиппирования)
Недостатком предложенного метода распознавания слова являетсянеобучаемость программы, отнесение всех произнесенных слов к какому-то иззаложенных в программе, а также невозможность настройки в конкретном помещениибез специалиста. К достоинствам программы можно отнести независимость программыот диктора, кроме случаев дефекта дикции.
3.4 Реализация голосового управления трёхмерными моделямипромышленного робота
Библиотека OpenGLпредставляет собой интерфейс программированиятрехмерной графики — это её основное предназначение. Библиотека представляетсобой программный интерфейс для аппаратного обеспечения машинной графики. Этотинтерфейс состоит приблизительно из 250 отдельных команд (почти 200 команд вядре OpenGL иеще 50 команд в библиотеке утилит OpenGL),которые используются для того, чтобы определитьобъекты и операции, необходимые для создания интерактивных трехмерныхприкладных программ.
Единицей информации является вершина, из них состоят более сложныеобъекты. При создании заданной модели необходимо создать вершины, указать, каких соединять (линиями или многоугольниками), установить координаты и параметрыкамеры и ламп, а библиотека OpenGLсоздает изображения на экране [16].
Исходя из вышеуказанных причин было принято решение реализоватьмоделирование функционирования промышленного робота с помощью средствбиблиотеки OpenGL.
Для создания требуемой модели робота используются различныетрехмерные объекты. Каждая трехмерная модель имеет две разновидности: каркас (wireframe) без поверхностныхнормалей и объемная модель (solid)с закраской и поверхностными нормалями. Присоздании программного обеспечения использовались каркасные модели.
Преобразование вида и моделирование сложно связаны в OpenGL и в действительностиобъединены в одну матрицу видового преобразования (modelview matrix). Существуют триподпрограммы OpenGL дляпреобразований модели: glTranslate(),glRotate(), glScale(). Этиподпрограммы выполняют преобразование объекта (или системы координат) с помощьюего параллельного переноса (moving),поворота (rotating),растягивания (stretching), сжатия (shrinking) или зеркального отражения(reflecting). Всетри команды эквивалентны созданию соответствующей матрицы параллельногопереноса (translation), поворота(rotation) или
масштабирования {scaling),а затем вызову команды glMultMatrixQ с этой матрицей вкачестве аргумента. Однако использование этих трех подпрограмм должно бытьбыстрее использования команды glMultMatrixQ.OpenGL автоматически вычисляет эти матрицы дляпользователя [17].
Все преобразования в программеосуществлены с помощью указанных подпрограмм.
Ниже приведена функция, обеспечивающая моделированиефункционирования промышленного робота.

voidCMain::OnOpenGLFirst()
{glPushMatrixQ;
glTranslatef(k*per,-3.0,0.0);
glRotatef(360.0*vspos/100,0,1,0);
glRotatef(l 80,0,0,1);
glLineWidth(2.0);
glPushMatrix();
glRotatef(90.0,1.0,0.0,0.0);
glColor3f(0.0,0.0,1.0);
auxWireCone(1.5,1.0);
glPopMatrix();
glTranslatef(0.0,-l.0,0.0);
glColor3f(0.0,0.5,0.5);
auxWireCylinder(0.6,4.0);
glPushMatrix();
glTranslatef(0.0,-3.0,0.0);
glRotatef(90.0,1.0,0.0,0.0);
glColor3f(l.0,0.0,0.0);
auxWireCylinder(0.6,2.0);
glRotatef(180.0*hspos/100,0.0,1.0,0.0);
glTranslatef(l.0,0.5,0.0); (3.3)
Прежде всего, перемещаемсцену. Далеезадаём вращение вокруг оси ъ. Задаёмпеременную, которая будет обеспечивать перемещение робота согласно голосовымкомандам. Запоминаем положение основы робота. Строим его основу – конус,поднимаемся к его вершине. Строим колонну робота и перемещаемся к её вершине,поворачиваемся на 90 градусов относительно оси х. Строим цилиндр –крепление плеча. Задаём движение
плеча горизонтальной прокруткой. Перемещаемся в конец крепленияплеча и создаём плечо –- строим призму. Перемещаемся к её концу, поворачиваемсяна 90 градусов и создаём цилиндр – локоть. Далее после перемещения к концуэтого цилиндра строим призму – основание схвата, поворачиваемся на 90 градусови строим первый и второй пальцы.
Результат моделирования робота приведен на рис. 3.1
/>
Рисунок 3.1 Результат моделирования функционирования промышленногоробота

Выводы
Организация управления промышленными роботами (ПР) продолжаетоставаться актуальной задачей робототехники. Управление роботами реализуетсяразличными способами. К ним относятся: управление при помощи пультов ручногоуправления, командное управление от управляющих компьютеров, дистанционноеуправление при помощи внешних вычислительных систем. С точки зрения повышенияэффективности обучения ПР одним из наиболее перспективных способов являетсяголосовое управление.
Во время написания магистерской аттестационной работы былипроанализированы методы цифровой обработки звуковых сигналов и их использованиев системах распознавания речи, выполнен анализ цифровой фильтрации иособенностей акустической фонетики и её учёт при обработке цифровых сигналов.
В работе рассмотрены гомоморфная обработка речи, кодирование речина основе линейного предсказания и цифровая её обработка в системах речевогообщения человека с машиной, особенности различных систем распознавания речи.
Первоначальной задачей являлось создание интерфейса записи ивоспроизведения звукового сигнала. Это было выполнено с использованиемвстроенной библиотеки mmsystem операционной системы Windows. Далее былидобавлены функции, обеспечивающие обработку записанного сигнала: выделениевокализованных участков речи, взвешивание коэффициентов дискретного сигнала спомощью окна Хэмминга, преобразование Фурье, фильтрация, обратноепреобразование Фурье, а также клиппирование и вычисление кепстра.
На основании проведенного анализа сигнала создана функцияраспознавания слова-команды. При помощи графической библиотеки OpenGL былаобеспечена визуализация выполнения трёхмерной моделью ПР
распознанной голосовой команды. Применение библиотеки OpenGLпозволяет моделировать любой из как уже существующих, так и разрабатываемых видовПР.
Сложность решаемой задачи обуславливалась тем, что даже один и тотже человек не может два раза произнести одно и то же слово абсолютно одинаковои возникает разница в скорости произнесения слова и амплитуде звуковогосмгнала. При этом возникает необходимость выделения зависимости фонем(сочетания элементарных звуков), присущих одному слову, а потом описания этихзависимостей в виде, понятном для распознавания. Выделение этих зависимостей — является достаточно сложно реализуемой задачей.
Основным достоинством программы является её независимость отоператора: при условиях достаточно чёткого произношения команды, пол и возрастдиктора не имеет влияния на распознавание слова. Её применение целесообразнодля адаптации промышленного робота к условиям производственной среды, а такжедля создания информационного потока управления роботом. Возможнымиперспективами улучшения программы являются увеличение словаря, добавлениевозможности обучения и улучшение гибкости цифрового представления звуковогосигнала.

Перечень ссылок
1. Рабинер Л. Р., Шафер Р. В. Цифровая обработкаречевых сигналов: Пер. с англ./Под ред. М. В. Назарова и Ю. Н. Прохорова. — М.:Радио и связь, 1981.-496 с.
2. Рабинер Л. Р., Гоулд Б. Теория и применениецифровой обработки сигналов: Пер. с англ./Под ред. Александрова Ю. Н. — М.:Мир, 1978. -848 с.
3. А. V. Oppenhehnand R. W. Schafer, Digital Signal Processing,, Prentice-Hall, Inc., EnglewoodCliffs, N.J., 1975. — 436 p.
4. A. Peled and B. Liu,Digital Signal Processing. Theory, Design and Implementation, John Wiley andSons.New York, 1976. — 675 p.
5. J. W. Cooley and J. W.Tukey, «An Algorithm for the Machine Computation of ComplexFourier.Series,» Math Computation, Vol. 19, 1965. — 452 p.
6. Бондарев В. H., Трёстер Г., Чернега В. С.Цифровая обработка сигналов: методы и средства. Учеб. Пособие для вузов. 2-еизд. — X.: Конус, 2001. -398 с.
7. Марпл С. Л. Цифровой спектральный анализ и егоприложения. — М.: Мир, 1990.-584 с.
8. Бендат Дж., Пирсол А. Применения корреляционногои спектрального анализа. -М.: Мир, 1983. -312 с.
9. Гольденберг Л. М., Матюшкин Б. Д., Поляк М. Н.Цифровая обработка сигналов: Справочник. -М.: Радио и связь, 1985. — 312 с.
10.  ГутниковВ. С. Фильтрация измерительных сигналов. — Л.: Энергоатомиздат, Ленингр.отд-ние, 1990. — 192 с.
11.  J. Н. McClellan, Т. W. Parks, and L. R. Rabiner, «A Computer Program forDesigning Optimum FIR Linear Phase Digital Filters,» IEEE Trans. Audioand Electro acoustics, Vol. AU-21, 1973. — 347 p.
12.  Цифровыефильтры в электросвязи и радиотехнике/ А. В. Брунченко, Ю.Г. Бутыльский, Л. М.Гольденберг и др.: под ред. Л. М. Гольденберга.
— M.: радио и связь, 1982. — 224 с.
13.  J. L. Ftanagan, С. H. Coker, L. R. Rabiner, R. W. Schafer, and N. Umeda,«Synthetic Voices for Computers,» IEEE Spectrum, Vol. 7, No. 10,October 1970.-536 p.
14.  MFCи Visual С++. Энциклопедия программиста: Пер. с англ./ Юджин Олафсен, КеннСкрайбнер, К. Дэвид Уайт и др. — СПб.: ООО «ДиаСофтЮП», 2004. — 992с.
15.  ШилдтГерберт. MFC: основы программирования. — К.: Издательская группа BHV, 1997. — 560 с.
16.  ТихомировЮ.В. OpenGL. Программирование трехмерной графики. -СПб.: БХВ-Петербург,2002.-304 с.
17.  OpenGL.Официальное руководство программиста: Пер. с англ. / Мейсон By, Джеки Нейдер,Том Девис, Дейв Шрайнер. — СПб: ООО «ДиаСофтЮП», 2002. — 592 с.

Приложение А. Элементы текстов программного кода
// recorddlh: header fileclass CRecordDlg;
class CRecDlgNotifyObj:public CWaveNotifyObj {public:
CRecDlgNotifyObjO;-CRecDlgNotifyObjO; void Attach(CRecordDlg* pDlg) {m_pDlg = pDlg;}
virtual voidNewData(CWave *pWave, CWaveBIock* pBlock);
virtual voidEndPlayback(CWave *pWave);
CRecordDlg* m_pDlg;};
class CFilterDlg. publicCDialog
{public. CWaveOutDevice*m_pOutDev;
CFilterDlg(CWnd* pParent= NULL);
enum { IDD =IDD_FILTERDLG };
protected:
virtual voidDoDataExchange(CDataExchange* pDX); protected:
afxmsg void OnFilter();DECLAREMESSAGEMAPOJ; class CRecordDlg: public CDialog {public:
CRecordDlg(CWnd* pParent= NULL); ~CRecordDlg();
void NewData(CWave*pWave, CWaveBIock* pBlock);
void EndPlayback(CWave*pWave);
enum { IDD =IDD_RECORDDLG };
CButtonmbtnOpenData;
CComboBox mcbSource;
CComboBox mcbFormat;
CStatic mwndFrame;
CButton mbtnPause;
CButton mbtnPlay;
CButton mbtnRecord;
CButton mbtnOK;
CButton mbtnStop;
CString mstrFormat;
CString m_strSource;
public:
void UDdatdTJClientDC*curDC>:
CFilterDIg* m_pFUter;CWave* m_pWave; private:
enum MODE {IDLE,SAMPLING,PLAYTNG,RECORDING,OPEN };
CVUMeter m_VU;
int mJNumDevs;
WAVEINCAPS* m_pDevCaps;
CWavelnDevice mlnDev;
CWave mSampleWave;
CRecDlgNotifyObjm_NotifyObj;
int mJMode;
void FillDeviceList();
void FillFormatListQ;
void SetMode(MODE m);
voidBuildFormat(PCMWAVEFORMAT& fmt, DWORD dwFormat); protected:
virtual voidDoDataExchange(CDataExchange* pDX);
virtual BOOL OnlnitDialogO;
afxmsg voidOnSelchangeFormat();
afxmsg voidOnClickedPlay();
afxjmsg voidOnClickedRecordO;
afxmsg voidOnClickedStop();
afxmsg voidOnSelchangeSource();
virtual void OnCancel();
virtual void OnOK();
afxmsg voidOnDrawItem(int nlDCtl, LPDRAW1TEMSTRUCT IpDrawItemStruct); afxmsg voidOnMeasureItem(int rJDCtl, LPMEASUREITEMSTRUCT IpMeasureltemStruct); afxmsg voidOnClickedOpenData(); afxmsg void OnUpdate();
afxmsg voidOnHScroll(UTNT nSBCode, UINT nPos, CScrollBar* pScrollBar);
afx_msg void OnGraphicQ;
afxmsg void OnHamming();
afxmsg void OnFilterQ;
afxmsg void OnFurjeQ;
afx_msg voidOnObrfurje();
afxmsg void OnClip();
DECLARE_MESSAGE_MAP()};
class CGraphicDlg: publicCDialog
{public:
CWaveOutDevice* mjOutDev;CGraphicDlg(CWnd* pParent = NULL); enum { IDD = IDD GRAPHIC };
protected:
virtual void DoDataExchange(CDataExchange* pDX);protected:
afxmsg void OnGraphicQ;DECLAREMESS AGE_MAP()}; class CHammingDlg: public CDialog {public:
CWaveOutDevice*m_pOutDev; CHammingDlg(CWnd* pParent = NULL); enum {IDD = IDD HAMMING };protected:
virtual void DoDataExchange(CDataExchange* pDX);protected:
afxmsg void OnHammingO;DECLAREMESSAGEMAPO); class CFurjeDlg. public CDialog {public:
CWaveOutDevice*m_pOutDev; CFurjeDlg(CWnd* pParent = NULL); enum {IDD = IDDFURJE }; protected:
virtual void DoDataExchange(CDataExchange* pDX);protected:
afxmsg void OnFurjeO;DECLAREMESSAGEMAPO}; class CObrFurjeDlg: public CDialog {public:
CWaveOutDevice*m_pOutDev; CObrFurjeDlg(CWnd* pParent = NULL); enum { IDD = IDD OBRFURJE };protected:
virtual void DoDataExchange(CDataExchange* pDX);protected:
afxmsg void OnObrfurje();DECLAREMESSAGEMAPO}; class CClipDlg. public CDialog {public:
CWaveOutDevice*m_pOutDev; CClipDlg(CWnd* pParent = NULL); enum { IDD = EDDCLIP }; protected:
virtual void DoDataExchange(CDataExchange* pDX);
ON_BN_CLICKED(IDC_GRAPHIC,OnGraphic) ON_BN_CLICKED(IDC_HAMMrNG, OnHamming) ON_BN_CLICKED(IDC_FILTER OnFilter) ON_BN_CLICKED(IDC_FURJE, OnFurje) ON_BN_CLICKED(IDC_OBRFURJE, OnObrfurje)ON_BN_CLICKED(IDC_CLIP, OnClip) END_MESSAGE_MAP() BOOLCRecordDlg::OnInitDialog() {CDialog::OnInitDialog(); ASSERT(mjpWave = NULL);CRect rcVU;
m_wndFrame.GetWindowRect(&rcVU);ScreenToClient(&rcVU);
m_VU.Create(nVU",WS_CHILD| WS_VISIBLE,rcVU,this,l);
m_VU.SetValue(0> 0);
FillDeviceListQ;
FillFormatListO;
SetMode(SAMPLLNG);
return TRUE; }
void CRecordDlg::OnSelchangeFormatO
{OnClickedStopO;}
void CRecordDlg::OnClickedPIayO
{SetMode(PLAYING);
CClientDCdc(this);}
void CRecordDlg.OnClickedRecordO
{ SetMode(RECORDLNG);}
void CRecordDlg.OnClickedStopO
{SetMode(S AMPLING);}
void CRecordDlg::OnSelchangeSource()
{OnClickedStopO;
FillFormatListO;}
void CRecordDlg::OnCancelO
{ OnClickedStopO;
SetMode(IDLE);
mVU.DestroyWindowO;
if (m_pWave) {deletem_pWave;
m_pWave = NULL;}
CDialog::OnCancel();}
void CRecordDlg. OnOKO
{ OnClickedStopO;
SetMode(IDLE);
mVU.DestroyWindowO;
CDialog::OnOK();}
voidCRecordDlg::FillDeviceList()
{miNumDevs =wavelnGetNumDevsO;
if (miNumDevs == 0) {
AfxMessageBox(«Thereare no suitable input devices»);
EndDialog(IDCANCEL);
return;}
if (m_pDevCaps) deletem_pDevCaps;
m_pDevCaps = newWAVEINCAPSfmiNumDevs];
m_cbSource.ResetContent();
for (int i=0; KmiNumDevs;i++) {
waveInGetDevCaps(i,&m_pDevCaps[i],sizeof(WAVEINCAPS));m_pDevCaps[i].wMid = i;
m_cbSource.AddString((LPCSTR)&m_pDevCaps[i]);}
mcbSource. SetCurSel(0);}
void CRecordDlg.:FillFormatList()
{mcbFormat.ResetContentO;
int iSel =m_cbSource.GetCurSel();
if(iSel = CBERR) return;
WAVEINCAPS* pCaps =(WAVEINCAPS*) m_cbSource.GetItemData(iSel);
ASSERT(pCaps);
DWORD dwMask =0x00000001;
for(inti=0; i
if (pCaps->dwFormats& dwMask) {
m_cbFormat.AddString((LPCSTR)dwMask);}
dwMask = dwMask « 1; }
mcbFormat. SetCurSel(O);}
void CRecordDlg.OnDrawItem(intnlDCtl, LPDRAWITEMSTRUCT pDI) {char* pszText = NULL; switch (nlDCtl) { caseIDC_SOURCE: {
WAVEINCAPS* pCaps =(WAVEINCAPS*)(pDI->itemData); pszText = pCaps->szPname; } break;
case IDC FORMAT: {switch(pDI->itemData) { case WAVE_FORMAT_1M08: pszText = «11.025 kHz, 8bit, mono»; break;
case WAVE_FORMAT_1S08:pszText = «11.025 kHz, 8 bit, stereo»; break;
case WAVE_FORMAT_lM16:pszText = «11.025 kHz, 16 bit, mono»; break;
case WAVE_F0RMAT_1S16.pszText = «22.05 kHz, 16 bit, stereo»; break;
case WAVE_FORMAT_2M08:pszText = «22.05 kHz, 8 bit, mono»; break;
case WAVE_FORMAT_2S08:pszText = «22.05 kHz, 8 bit, stereo»; break;
case WAVE_FORMAT_2M16:pszText = «22.05 kHz, 16 bit, mono»; break;
case WAVEJFORMATJ2S16.pszText = «22.05 kHz, 16 bit, stereo»; break;
case WAVEJ?ORMAT_4M08:pszText = «44.1 kHz, 8 bit, mono»; break;
case WAVE_FORMAT_4S08:pszText = «44.1 kHz, 8 bit, stereo»; break;
case WAVE_FORMAT_4M16:pszText = «44.1 kHz, 16 bit, mono»; break;
case WAVE_FORMAT_4S16:
pszText = «44.1 kHz,16 bit, stereo»;
break; default:
pszText =«Unknown»;
break;} } break; default:
break;} if (IpszText)return;
: ^rawTextCpDI^hDC^szText.-L&CpDI^rcItem),DTLEFT | DTVCENTER); if (pDI->itemState & ODSSELECTED) {
::InvertRect(pDI->hDC,&(pDI->rcItem));} if (PDI->itemState & ODS_FOCUS) {
::DrawFocusRect(pDI->hDC,&(pDI->rdtem)); }}
void CRecordDlg::OnMeasureItem(int ruDCtl,LPMEASUREITEMSTRUCT lpMeasureltemStruct) { CClientDC dc (this);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
lpMeasureItemStruct->itemHeight= tm.tmHeight;} void CRecordDlg::SetMode(MODE m) { CClientDC dc(this); if (m =miMode) return; if (m_pWave) m_pWave->Stop(); switch (miMode) {caseSAMPLING: case RECORDING: mlnDev.ResetO; m_InDev.Close(); break; case PLAYING:break;
case OPEN:
break;}
miMode = IDLE;
switch (m) {caseSAMPLING:
f                    case RECORDING.
{int iSel = m_cbSource.GetCurSel(); if(iSel =CBERR) return;
WAVEINCAPS* pCaps = (WAVEINCAPS*)m_cbSource.GetItemData(iSeI);
ASSERT(pCaps);
UINT uiBD = pCaps->wMid;
iSel = m_cbFormat.GetCurSel();
if(iSel == CBERR) return;
DWORD dwFormat = mcbFormat.GetltemData(iSel);
ASSERT(dwFormat);
PCMWAVEFORMAT fmt;
BuildFormat(fmt, dwFormat);
if (!m_InDev.Open(uiID, &fmt)) return;
if (m = SAMPLING) {
mSampleWave.DeleteAllO;
mSampleWave.Create(&frnt);
m_SampleWave.Record(&m_InDev,1024,&m_NotifyObj); } else if (m — RECORDING) { if (!m_pWave) m_pWave = newCWave; ASSERT(m_pWave); mjpWave->Create(&fmt);
m_pWave->Record(&mJnDev,4096,&m_NotifyObj);}
case PLAYING, if(m_pWave) m_pWave->Play(NULL, &m_NotifyObj); break;
case OPEN.
if (m_pWave)m_pWave->OpenData(NULL, &m_NotifyObj,&dc); break;} miMode = m,
if ((mjMode = PLAYING) ||(mjMode = RECORDING)! |(m_iMode btnStop.EnableWindow(TRUE);
} else{m_btnStop.EnableWindow(FALSE);}
if (mjMode = PLAYING) { m_btnPlay.EnableWindow(FALSE);} else {mbtnPlay.EnableWindow(TRUE);}
if (m_iMode = OPEN){mbtnOpenData.EnableWindow(FALSE); } else {mbtnOpenData.EnableWindow(TRUE);} if(mjMode = RECORDING) {m_btnRecord.EnableWindow(FALSE); } else {m_btnRecord.EnableWindow(TRUE);}}void CRecordDlg::NewData(CWave *pWave, CWaveBlock* pBlock) { ASSERT(pWave);ASSERT(pBlock);
PCMWAVEFORMAT* pwf =(PCMWAVEFORMAT*) pWave->GetFormat(); ASSERT(pwf->wf.wFormatTag =WAVEFORMATPCM); int iCount = pBlock->GefNumSamples(); if(pwf->wBitsPerSample = 8) {
BYTE* pData =(BYTE*)pBlock->GetSamplesO; BYTE bMax — 0; while (iCount—) {
if (*pData > bMax)bMax = *pData; pData++;}
if (bMax GetSamples(); int iMax =0;
while (iCount—) {if(*pData > iMax) iMax = *pData;
pData++;}m_VU.SetValue(iMax, iMax);} if(m_iMode!= RECORDING) {pWave->GetBlockList()->FreeAll();}} void CRecordDlg::EndPlayback(CWave*pWave) { ASSERT(pWave); SetMode(SAMPLjrNG);}
voidCRecordDlg::BuildFormat(PCMWAVEFORMAT& fmt, DWORD dwFormat) { ASSERT(dwFormat);fmt.wf.wFormatTag = WAVEFORMATPCM; switch (dwFormat) { case WAVE_FORMAT_1M08:fmt.wf.nChannels = 1; rmtwf.nSamplesPerSec = 11025; fmtwBitsPerSample = 8;break;
case WAVE_F0RMAT_1M16:fmt.wf.nChannels = 1; fmt.wf.nSamplesPerSec = 11025; fmt.wBitsPerSample = 16;break;
case WAVE_FORMAT_1S08:fmt.wf.nChannels = 2; fmt.wf.nSamplesPerSec = 11025; fmt.wBitsPerSample = 8;break;
case WAVE_F0RMAT_1S16:fmt.wf.nChannels = 2; fmtwf.nSamplesPerSec = 11025; fmt.wBitsPerSample = 16;break;
case WAVE_FORMAT_2M08:fmt.wf.nChannels = 1; fmt.wf.nSamplesPerSec = 22050; fmt.wBitsPerSample = 8;break;
case WAVE FORMAT 2M16 fmt.wf.nChannels= 1; fmt.wf.nSamplesPerSec = 22050; fmt.wBitsPerSample = 16; break;
case WAVE_FORMAT_2S08:fmt.wf.nChannels = 2; fmt.wf.nSamplesPerSec = 22050; fmt.wBitsPerSample = 8;break;
case WAVE_FORMAT_2S16:fmt.wfnChannels = 2; fmt.wf.nSamplesPerSec = 22050;
fmt.wBitsPerSatnple = 16; break;
case WAVE_FORMAT_4M08:fmt.wf.nChannels = 1; fmt.wf. nSamplesPerSec = 44100; fmt.wBitsPerSampIe = 8;break;
case WAVE_FORMAT_4M16:fmt.wf.nChannels = 1; fmt.wf.nSamplesPerSec = 44100; fmt.wBitsPerSampIe = 16;break;
case WAVE_FORMAT_4S08.fmt.wf.nChannels = 2; fmt.wf.nSamplesPerSec = 44100; fmt.wBitsPerSampIe = 8;break;
case WAVE_FORMAT_4S 16:
fmt.wf.nChannels = 2;
fmt.wf.nSamplesPerSec = 44100;
fmtwBitsPerSample = 16;
break; default:
ASSERT(O);
return;}
fmt.wf.nAvgBytesPerSec =fmt.wf.nSamplesPerSec;
fmt.wf.nBlockAlign =fmt.wBitsPerSampIe /8;} CRecDlgNotifyObj::CRecDlgNotifyObj() { m_pDlg = NULL;}CRecDlgNotifyObj.:~CRecDlgNotifyObj() {}
void CRecDlgNotifyObj::NewData(CWave*pWave,CWaveBlock* pBlock) { ASSERT(m_pDlg);
m_pDlg->NewData(pWave,pBlock);} void CRecDlgNotifyObj::EndPlayback(CWave *pWave) { ASSERT(m_pDlg);
m_pDlg->EndPlayback(pWave);}
void CRecordDlg.:OnClickedOpenData0
{        SetMode(OPEN);
CClientDC dc(this);}CFilterDlg::CFilterDlg(CWnd* pParent /*=NULL*/): CDialog(CFilterDlg::IDD,pParent)
void CFilterDlg::DoDataExchange(CDataExchange*pDX)
{        CDialog::DoDataExchange(pDX);}
BEGIN_MESSAGE_MAP(CFilterDlg, CDialog)
ONJBN_CLICKED(IDC_FILTER,OnFilter) ENDMES S AGEM AP() void CFiIterDlg::OnFilterO (CCIientDC dc(this);
dc.SelectObject(GetStockObject(WHITE_PEN));
for(inti=0; i
{        dc.MoveTo(lO*i,0);
dc.LineTo(10*i,800);
dc.MoveTo(0,10*i);
dc.LineTo(1100,10*i);} dc.SelectObject(GetStockObject(BLACK_PEN));dc.MoveTo(0,200); dc.LineTo(l 100,200); m_pOutDev->ShowFilter(&dc);}
void CRecordDlg::OnUpdate{) { CCIientDC dc(this);Update(&dc);}
void CRecordDlg::Update(CClientDC *curDC) (CWnd*win= curDC->GetWindowO; win->Invalidate(TRUE);}
int hspos=0; int curpos=0;
     voidCRecordDlg::OnHScroll(UTNT nSBCode, UINT nPos, CScrollBar* pScrollBar) {curpos=hspos;
switch (nSBCode) { caseSBJLEFT:.
if(hspos>0)
hspos--;
break;
case SBRIGHT: hspos++;
break;
case SBLINELEFT:if(hspos>0) hspos--;
case SBLINEPJGHT:hspos++;
break;
case SBTHUMBPOSITION:hspos = nPos;
break;
case SBTFTUMBTRACK: hspos= nPos; break;
case SBPAGELEFT:if(hspos>0) hspos—;
break;
case SBPAGERIGHT.
hspos++;
break;}
CREATESTRUCT cs;
cs.cx =::GetSystemMetrics(SM_CXSCREEN);
SetScrollPos(SB_HORZ,hspos,TRUE);
curpos=hspos-curpos;
Scroll Window(-curpos*10,0,NULL,NULL); CDialog::OnHScroll(nSBCode, nPos, pScrollBar);} CGraphicDlg::CGraphicDlg(CWnd*pParent /*=NULL*/): CDialog(CGraphicDlg::IDD, pParent)
(}
voidCGraphicDlg..DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX);}BEGLN_MESSAGE_MAP(CGraphicDlg, CDialog)
ON_BN_CLICKED(IDC_GRAPHIC,OnGraphic) END MESSAGEJVIAP() void CRecordDlg::OnGraphicO (CGraphicDlg* a; a =new CGraphicDlgO; if(a!= NULL)
{ BOOL ret =a->Create(IDD_GRAPHIC,this); if(!ret)
AfxMessageBox(«Errorcreating Dialog»); a->ShowWindow(S W_SHOW);} elseAfxMessageBox(«Error Creating Dialog Object»);} void CGraphicDlg..OnGraphicQ
{ CClientDC dc(this);
dc.SelectObject(GetStockObject(WHITE_PEN));
for(int i=0;i
{ dc.MoveTo(10*i,0);
dc.LineTo(10*i,800);
dc.MoveTo(0,10*i);
dc.LineTo(1100,10*i);} dc.SelectObject(GetStockObject(BLACK_PEN));dc.MoveTo(0,200); dc.LineTo(1100,200); m_pOutDev->Graphic(&dc);}CHammingDlg:.CHammingDlg(CWnd* pParent /*=NULL*/): CDialog(CHammingDlg::IDD,pParent)
void CHammingDlg.:DoDataExchange(CDataExchange*pDX)
{        CDialog.:DoDataExchange(pDX);}
BEGIN_MESSAGE_MAP(CHarnmingDlg, CDialog)
ON_BN_CLICKED(IDC_HAMMING,OnHamming) END_MESSAGE_MAP() void CRecordDlg::OnHamming() {CHammingDlg* a; a =new CHammingDlgO; if(a!=NULL)
{ BOOL ret =a->Create(roDJHAMMING,this);
ifTJret) ArxMessageBox(«Errorcreating Dialog»);
a->ShowWindow(SW_SHOW);} else AfxMessageBox(«Error Creating Dialog Object»);}
void CHammingDlg::OnHamming() (CClientDCdc(this);
dc.SelectObject(GetStockObject(WHITE_PEN));
for(inti=0; i
{        dc.MoveTo(10*i,0);
dc.LineTo(10*i,800);dc.MoveTo(0,10*i); dc.LineTo(l 100,10*i); }dc.SelectObject(GetStockObject(BLACK_PEN)); dc.MoveTo(0,250); dc.LineTo(l100,250); m_pOutDev->ShowHamming(&dc);} void CRecordDlg::OnFilter(){CFilterDlg* a;
a = new CFilterDlg();if(a!=NULL)
{ BOOL ret =a->Create(TDDJFILTER,this);
if(!ret)AfxMessageBox(«Error creating Dialog»);
a->ShowWindow(SW_SHOW);}else
AfxMessageBox(«ErrorCreating Dialog Object»);} CFurjeDlg::CFurjeDlg(CWnd* pParent /*=NULL*/):CDialog(CFurjeDlg::TDD, pParent)
{}
voidCFurjeDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX);}BEGIN_MESSAGE_MAP(CFurjeDlg, CDialog)
ON_BN_CLICJQED(IDC_FURJE,OnFurje) ENDMESSAGEMAPQ
voidCRecordDlg::OnFurje() {CFurjeDlg* a; a = new CFurjeDlgQ; if(a!=NULL)
{ BOOL ret =a->Create(lDD_FURJE,this); if(!ret) AfxMessageBox(«Error creatingDialog»);
a->ShowWindow(SW_SHOW);} else AfxMessageBox(«Error Creating Dialog Object»);} voidCFurjeDlg::OnFurje() {CClientDC dc(this);
dc.SelectObject(GetStockObjectOVHITE_PEN));
for(inti=0; i
{        dc.MoveTo(10*i,0);
dc.LineTo(10*i,800);
dc.MoveTo(0,10*i);
dc.LineTo(1100,10*i); }dc.SelectObject(GetStockObject(BLACK_PEN)); dc.MoveTo(0,250); dc.LineTo(l100,250); m jpOutDev->ShowFurje(&dc);} CObrFurjeDlg::CObrFurjeDlg(CWnd*pParent /*=NULL*/): CDialog(CObrFurjeDlg::IDD, pParent)
{}
void CObrFurjeDlg.:DoDataExchange(CDataExchange*pDX)
{        CDialog::DoDataExchange(pDX);}
BEGINMESS AGEMAP(CObrFurj eDlg, CDialog)
ON_BN_CLICBCED(IDC_OBRJFURJE,OnObrfurje) END_MESSAGE_MAP() void CRecordT>lg::OnObrfurje() {CObrFurjeDlg*a; a = new CObrFurjeDlg(); if(a!=NULL)
{ BOOL ret =a->Create(IDD_OBRFURJE,this);
if(!ret)         AfxMessageBox(«Errorcreating Dialog»);
a->ShowWindow(SW_SHOW);} else
AfkMessageBox(«ErrorCreating Dialog Object»);} void CObrFurjeDlg::OnObrfurje() {CClientDCdc(this);
dc.SelectObject(GetStockObject(WHITE_PEN));
for(int i=0; i
{        dc.MoveTo(10*i,0);
dc.LineTo(10*i,800);
dc.MoveTo(0,10*i);
dc.LineTo(1100,10*i); }dc.SelectObject(GetStockObject(BLACK_PEN)); dc.MoveTo(0,250); dc.LineTo(l100,250); m_pOutDev->ShowObrFurje(&dc);} CClipDlg::CClipDlg(CWnd*pParent /*=NULL*/): CDialog(CClipDlg::IDD, pParent)
{}
voidCClipDlg..DoDataExchange(CDataExchange* pDX) { CDialog..DoDataExchange(pDX);}BEGIN_MESSAGE_MAP(CClipDlg, CDialog)
ON_BN_CLICKED(IDC_CLIP,OnClip) ENDMESSAGEMAPQ void CRecordDlg::OnClip() {CClipDlg* a; a = newCClipDlgQ; if(a!=NULL)
{ BOOL ret =a->CreateODD_CLIP,this); itXIret) AfxMessageBox(«Errorcreating Dialog»); a->ShowWindow(SW_SHOW); } else AfxMessageBox(«ErrorCreating Dialog Object»);} void CClipDlg::OnClip() {CClientDC dc(this);
dc.SelectObject(GetStockObject(WHITE_PEN));
for(inti=0;i
{                 dc.MoveTo(10*L0);
dc.LineTo(10*i,800);
dc.MoveTo(0,10*i);
dc.LineTo(1100,10*i); }dc.SelectObject(GetStockObject(BLACK_PEN)); dc.MoveTo(0,100); dc.LineTo(l100,100); m__pOutDev->ShowClip(&dc);}
// animate.h: header file#include #include «OutDialog.h» /Mnclude «recorddl.h»#include «resource.h» #include using namespace std;class CDIB. public CObject { DECLARESERIAL(CDIB) public: CD1B0; ~CDIB();
BITMAPFNFO*GetBitmapInfoAddress()
{return m_pBMI;} void*GetBitsAddress()
{return m_pBits;} RGBQUAD*GetClrTabAddress()
{return(LPRGBQUAD)(((BYTE *)(m_pBMI)) + sizeof(BITMAPINFOHEADER));} intGetNumClrEntries();
BOOL Create(int width,int height, CPalette* pPal = NULL);        BOOL Create(int width, int height,
HP ALETTE hPal);
BOOL Create(BITMAPrNFO* pBMI, BYTE*pBits, BOOL bOwnBits = FALSE); BOOL Create(BITMAPINFO* pPackedDTB); void*GetPixelAddress(int x, int y); int GetBitsPerPixelO
{returnm_pBMI->bmiHeader.biBitCount;} virtual BOOL Load(const char* pszFileName =NULL); virtual BOOL Load(CFile* fp); virtual BOOL Load(WORD wResid); virtualBOOL Save(const char* pszFileName = NULL); virtual BOOL Save(CFile *fp);
virtual voidSerialize(CArchive& ar); virtual void Draw(CDC *pDC, int x, int y); virtualvoid DrawfHDC hDC, int x, int y); virtual int GetWidthO (return DibWidth();}virtual int GetStorageWidth() (return StorageWidthQ;} virtual int GetHeight()(return DibHeight();} virtual BOOL MapColorsToPalette(CPalette *pPal); virtualBOOL MapColorsToPalette(HPALETTE hPal); virtual void GetRect(RECT* pRect);
virtual voidCopyBits(CDIB* pDIB, int xd, int yd,int w, int h,     int xs, int ys,COLORREF
clrTrans = OxFFFFFFFF);
virtual voidStretchBits(CDIB* pDIB, int xd, int yd.int wd, int hd,        int xs, int ys,int ws,
int hs,COLORREF clrTrans= OxFFFFFFFF);
virtual voidDoubleBits(CDIB* pDIB, int xd, int yd,int xs, int ys, int ws, int
hs,COLORREF clrTrans =OxFFFFFFFF);
BOOLSetColorTable(CPalette* pPal); static BOOL IsWinDffi(BITMAPrNFOHEADER* pBIH); staticint NumDIBColorEntries(BITMAPINFO* pBmpInfo); protected:
BITMAPINFO *m_pBMI; BYTE*m_pBits; BOOL mbMyBits; private:
int DibHeightO
(returnm_pBMI->bmiHeader.biHeight;} int DibWidthQ
(returnm_pBMI->bmiHeader.biWidth;} int StorageWidthO
(return(((m_pBMI->bmiHeader.biWidth * m_pBMI->bmiHeader.biBitCount)}}; classCDIBPal. public CPalette (public:
CDIBPalO;
~CDIBPal();
BOOL Create(CDIB *pDIB);
BOOL Create(BITMAPINFO*pBMI);
BOOL Create(RGBQUAD*pRGB, int iClrs);
void Draw(CDC *pDC, CRect*pRect, BOOL bBkgnd = FALSE);
void Draw(HDC hDC, RECT*pRect, BOOL bBkgnd = FALSE);
int GetNumColorsQ;
BOOL SetSysPalColors();
BOOL Load(const char*pszFileName = NULL);
BOOL Load(CFile* fp);
BOOL Load(UINT hFile);
BOOL Load(HMMIO hmmio);
BOOL Save(const char*pszFileName = NULL);
BOOL Save(CFile* fp);
BOOL SavefUTNT hFile);
BOOL Save(HMMIO hmmio);
BOOL CreateWash();
BOOLCreateSystemColorPaletteO;}; typedef HDC (WLNGAPI WinGCreateDCProc)(void);typedef HBITMAP (WLNGAPI WinGCreateBitmapProc)(HDC WinGDC,
const BITMAPINFO*pHeader, void** ppBits);
typedef UINT (WLNGAPIWinGSetDIBColorTableProc)(HDC WinGDC,
UINT Startlndex,
UINT NumberOfEntries,
const RGBQUAD* pCoIors);
typedef BOOL (WLNGAPIWinGBitBlfProc)(HDC hdcDest,        int nXOriginDest,int
nYOriginDest,                       intnWidthDest,int nHeightDest,HDC hdcSrc, int nXOriginSrc,
int nYOriginSrc);
typedef BOOL (WINGAPIWinGStretchBltProcXHDC hdcDest,  int
nXOriginDest,intnYOriginDest,int nWidthDest,int nHeightDest, HDC hdcSrc,irt
nXOriginSrc, intnYOriginSrc, int nWidthSrc,   int nHeightSrc);
class CDIBSurface: publicCDIB { DECLARE_SERIAL(CDrBSurface) public: CDIBSurfaceQ; -CDIBSurfaceO; public:
CDC* GetDCO {return&m_dcBuffer;} HDC GetHDCQ {return (HDC) m_dcBuffer.GetSafeHdc();} public:
BOOL Create(int cx, intcy, CPalette* pPal = NULL); BOOL Create(int width, int height, HP ALETTE hPal);void BitBlt(CDC* pDC, int xd, int yd, int w, int h,
int xs, int ys); voidBitBlt(HDC hDC, int xd, int yd, int w, int h,
int xs, int ys);
void StretchBlt(CDC* pDC,int xd, int yd, int wd, int hd,
int xs, int ys, int ws,int hs); void Draw(CDC* pDC); void Draw(HDC hDC, int x, int y); voidSefPalettelCPalette* pPal);
BOOL Load(const char*pszFileName = NULL);
BOOLMapColorsToPalette(CPalette *pPal);
BOOLMapColorsToPalette(HPALETTE hPal); protected:
CPalette* m_pPal;
HP ALETTE m_hPal;
CDC m_dcBuffer; private:
static BOOLmbUseCreateDIBSection;
static BOOL mbUseWinG;
static WinGCreateDCProc*m_pWinGCDCProc;
staticWinGCreateBitmapProc* m_pWinGCBProc;
staticWinGSetDIBColorTableProc* m_pWinGSDCTProc;
static WinGBitBltProc*mjpWinGBBProe;
staticWinGStretchBltProc* m_pWinGSBProc;
HBITMAP mhbmBufFer;
HBITMAP mhbmOld;
static BOOLCDIBSurface::TestPlatform();}; class COSBView: public CScrollView {protected:
COSBViewQ;
DECLAREDYNCREATE(COSBView)public:
CDocument* GetDocumentO;CDIB* GetDffiO {return m_pDIBSurf;} CDIBPal* GetPaletteQ {return m_pPal;} CDC*GetBufferDCO; public:
BOOL Create(CDIB* pDIB);BOOL Create(int w, int h, CPalette* pPal); void Draw(CRect* pClipRect = NULL);virtual void RenderfCRect* pClipRect = NULL) {return;} void AddDirtyRegion(CRect*pRect); void RenderAndDrawDirtyListO; public: virtual -COSBViewQ; virtual voidOnDraw(CDC* pDC); virtual void OnInitialUpdate(); virtual void OnUpdate{CView*pSender,
LP ARAM Hint,
CObject* pHint);
virtual voidAssertValid() const;
virtual voidDump(CDumpContext& dc) const; protected:
CDIBSurface* mjpDIBSurf;
CDffiPal* m_pPal;private:
CObList mDirtyList;
void EmptyDirtyList();protected:
afxmsg voidOnPaletteChanged(CWnd* pFocusWnd);
afxmsg BOOLOnQueryNewPalette();
afxmsg BOOL OnEraseBkgnd(CDC*pDC);
DECLAREMESSAGEMAPO};inline CDocument* COSBView::GetDocument()
{ return (CDocument*)m_pDocument; } class CSprite;
class CSpriteNotifyObj:public CObject {public:
enum CHANGETYPE { ZORDER =0x0001,POSITION =0x0002, IMAGE 0x0004 };
public:
virtual voidChange(CSprite *pSprite,CHANGETYPE change,    CRect*
pRectl = NULL,   CRect*pRect2 = NULL) = 0;};
class CSprite: publicCDBB { DECLARE_SERIAL(CSprite) public:
CSprite();
~CSprite();
virtual int GetXQ {return m_x;} // get x
virtual int GetY() { returnm_y;} // get y
virtual int GetZ() {return m_z;} // get z order
virtual void Render(CDIB*pDIB, CRect* pClipRect = NULL);
virtual BOOLHitTest(CPoint point);
virtual voidSetPosition(int x,          int y);
virtual void SetZ(int z);
virtual voidSetNotificationObject(CSpriteNotifyObj* pNO)
{m_pNotifyObj = pNO;}virtual void Serialize(CArchive& ar); virtual BOOL Load(CFile *fp); virtualBOOL Load(char *pszFileName = NULL); virtual BOOL Load(WORD wResid);Формат  Зона  Поз. Позначення Назва  Кільк.  Примітка 1  ГЮИК. 505330.002 ПЗ Текстові документи Пояснювальна записка 1 ___ арк. ф.А.4 Графічні документи Елементи текстів програмного коду файл формату *.doc 1 __ арк. ф. А4 Демонстраційний графічний матеріал у вигляді презентації, файл формату 1 __ арк. ф. *.ppt А4 ГЮИК. 505330.002 ВД № докум Підп. Дата Виконав
Голосове керування тривимірними моделями функціонування ПР
відомість дипломної роботи Літера Аркушш Аркушів Перевір.  1 Н.контр.
ХНУРЕ
КАФЕДРА ТАВР Затв. Невлюдов /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> />


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.

Сейчас смотрят :

Реферат А. И. Герцена Факультет биологии методические рекомендации
Реферат Ценовая политика и стратегия фирмы
Реферат Вибір та застосування стандартів серії ISO 9000 і 10000
Реферат Анализ альтернативных подходов к формированию структуры организации
Реферат Учет операций по формированию уставного капитала акционерного общества
Реферат Расчет трансформатора ТМ1000/35
Реферат Порушення правил водіння або експлуатації машин Порушення правил польотів або підготовки до них
Реферат О понятии "абсолютизм"
Реферат Агентство путешествий «Potoktravel ru»
Реферат Страхование средств транспорта
Реферат 350020,  г.  Краснодар, ул
Реферат Комплекс дифференцированных заданий к текстам как средство обучени
Реферат Учет и анализ товарных ресурсов организаций розничной торговли
Реферат Социолингвистическая характеристика речи русских, говорящих на адыгейском языке
Реферат Права і обов'язки, що впливають з патентів та інших охоронних документів на об'єкти промислової власності. Дії які не визначаються порушенням прав на об'єкти промислової власності