Проекты:Голосовое управление мобильным роботом

Материал из BrSTU Robotics Wiki
Перейти к: навигация, поиск
Разработка программных средств для распознавания голосовых команд управления мобильным роботом
SpeechRec.jpg
Тема Человеко-машинный интерфейс, нейронные сети, робототехника
Исполнитель Евчик Сергей, АС-25
Руководитель Артеменко Светлана Владимировна
Консультант Касьяник В.В.
Язык программирования fann, mathlab, c++
Операционная система Linux
Год выполнения 2012
Использованные роботы Проект мобильного робота для образовательных целей


Структура дипломного проекта

Цель: Разработать программные средства для распознавания голосовых команд и применить полученные средства для организации человеко-машинного интерфейса с мобильным роботом проекта MARVIN. Постановка задачи: будет уточняться

Этапы работ по диплому (будет уточняться):

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

Результаты работы над проектом

Результаты обзора существующих решений

(результаты обзора статей)

Обучающая выборка

1. Создана обучающая выборка на 2000 образов (скачать c GoogleDocs)

2. Создана тестовая выборка на 300 образов (скачать c GoogleDocs)

Итоги экспериментов

Предобработка сигнала

Предобработка сигнала велась с помощью преобразования Фурье. Результаты fft необходимо привести к логарифмическому масштабу.

Так как после Фурье преобразования правая часть является зеркальным отражением левой, то ее можно удалить.

Последним шагом в предобработке является масштабирование сигнала в диапазоне [-1; 1].

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

(поставить подписи к картинкам)

Скрипт на MatLab, реализующий предобработку сигнала
x = log(abs(fft(x,2048)));
tmp = size(x);
 
x(tmp(1)/2+1:tmp(1),:) = [];
x = scale(x,-1, 1);
 
function [scaled] = scale(Data, Lower, Upper)
if (nargin<3) 
    Lower = -1;
    Upper = 1;
elseif (Lower > Upper)
    disp ('Wrong Lower or Upper values!');
end
 
[MaxV]=max(Data);
[MinV]=min(Data);
 
[R,C]= size(Data);
 
scaled=(Data-ones(R,1)*MinV).*(ones(R,1)*((Upper-Lower)*ones(1,C)./(MaxV-MinV)))+Lower;
end;

Нейронная сеть

Архитектура

Использовалось 2 типа нейронных сетей:

  1. Рециркуляционная нейронная сеть — используется для сжатия предобработанного сигнала.
  2. Многослойный персептрон — используется для распознавания сжатого сигнала

Архитектура рециркулционной сети Архитектура многослойного персептрона

(поставить подписи к картинкам)

Скрипт реализующий создание и обучение сетей
PCANet = feedforwardnet(100, 'trainoss');
PCANet.layers{1}.transferFcn = 'tansig';
PCANet.layers{2}.transferFcn = 'tansig';
PCANet = configure(PCANet,x,x);
 
PCANet.trainParam.epochs = 350;
PCANet.trainParam.goal = 1e-3;
PCANet = init(PCANet);
PCANet.divideParam.trainRatio = 0.1;
PCANet.divideParam.valRatio   = 0.1;
PCANet.divideParam.testRatio  = 0.8;
PCANet = train(PCANet,x,x);
%Удаление слоя востановления
PCANet.numLayers = 1;
PCANet.layerConnect = 0; PCANet.outputConnect = 1;
PCAoutputs = PCANet(x);
 
perceptNet = feedforwardnet(30, trainFunc);
perceptNet.layers{1}.transferFcn = 'tansig';
perceptNet.layers{2}.transferFcn = 'tansig';
perceptNet.trainParam.max_fail = 50;
perceptNet = configure(perceptNet,PCAoutputs,y);
perceptNet.trainParam.epochs = 1000;
perceptNet.trainParam.goal = 1e-4;
perceptNet = init(perceptNet);
perceptNet.divideParam.trainRatio = 0.1;
perceptNet.divideParam.valRatio   = 0.1;
perceptNet.divideParam.testRatio  = 0.8;
perceptNet = train(perceptNet,PCAoutputs,y);
Результаты обучения

Слева - обучающая выборка, справа - тестовая выборка

Реализация программного обеспечения

(уточнять)

Оформление дипломного проекта

  • Введение -
  • Раздел 1 -
  • Раздел 2 -
  • Раздел 3 -
  • Раздел 4 -
  • Заключение -
  • Список литературы -

Защита дипломного проекта

Материалы по теме