Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Кафедра ЕОМ
Лабораторна робота №2
„Моделювання роботи препроцесора для попередньої обробки мовних сигналів ”
Львів-2005
1.Мета роботи: опрацювати та випробувати в середовищі MATLAB 6.5 програму, яка реалізує етапи попередньої обробки мовних зразків.
2.Теоретична частина:
Сучасні системи для розпізнавання суцільної мови з великим словником ґрунтуються на принципах статистичного розпізнавання образів [3,4]. На рис.1 показана структура типової системи статистичного розпізнавання, що включає чотири складових.
Складові виконують такі функції:
- звуковий препроцесор здійснює початковий етап обробки, на якому з мовного сигналу вибирається вся необхідна звукова інформація в компактному вигляді;
- звукова модель забезпечує обчислення правдоподібності будь-якої послідовності звукових векторів при заданій послідовності слів;
- модель мови забезпечує обчислення апріорної ймовірності послідовності слів незалежно від спостереження мовного сигналу. Для цього треба забезпечити механізм оцінки ймовірності певного слова у фразі, якщо знаємо попередні слова;
- класифікатор зводить воєдино дані від трьох раніше описаних компонент і знаходить найбільш імовірний текст (транскрипцію).
Принципи статистичного розпізнавання образів полягають у наступному [4].
На першому етапі мовний зразок перетворюється звуковим процесором на послідовність звукових векторів . Кожен вектор є стислим поданням короткочасного мовного спектру на інтервалі, як правило, близько 25 мс зі зсувом інтервалів на 10 мс. Типова фраза з десяти слів по 6-7 звуків у кожному може мати тривалість біля 3 с і представлятися послідовністю з Т=300 звукових векторів.
У загальному, фраза складається з послідовності слів . Робота системи розпізнавання полягає у визначенні найбільш імовірної послідовності слів , маючи звуковий сигнал Y. Для цього використовується правило Байєса [4]:
.
Ця рівність показує, що для знаходження найбільш правдоподібної послідовності слів W, повинна бути знайдена послідовність, що робить максимальним добуток P(W) та P(Y/W).Так як значення знаменника P(Y) не залежить від W, то його при розпізнаванні ігнорують.
Перший із співмножників є апріорною ймовірністю спостереження W незалежно від спостереження мовного сигналу. Ця ймовірність визначається моделлю мови.
Другий співмножник є ймовірністю спостереження послідовності векторів Y при заданій послідовності слівW. Ця ймовірність визначається звуковою моделлю.
В звуковій моделі послідовності слів розбиваються на базові звуки – фонеми. Кожна індивідуальна фонема представляється прихованою моделлю за Марковим (англійська назва – hidden Markov model (HMM)). HMM-модель фонеми, як правило, має три породжуючі стани та вхідний і вихідний стан. Вхідний і вихідний стани дозволяють моделям фонем об’єднуватися, щоб утворювати слова та об’єднувати слова для утворення речень (послідовності слів).
Розглянемо більш детально функції препроцесора для попередньої обробки мовних сигналів.
Звуковий препроцесор
Потрібен початковий етап обробки, на якому з мовного сигналу вибирається вся необхідна звукова інформація в компактному вигляді.
Принципове припущення, яке робиться в сучасних розпізнавачах [3,4] є те, що мовний сигнал розглядається як стаціонарний (тобто спектральні характеристики відносно постійні) на інтервалі в кілька десятків мілісекунд. Тому основною функцією попередньої обробки є розбиття вхідного мовного сигналу на інтервали [1 - 4] і отримання для кожного інтервалу згладженої спектральної оцінки. Зсув між інтервалами звичайно рівний 10 мс. Інтервали, як правило , перекриваються і мають тривалість 25 мс. Як звичайно для обробки такого типу до кожного інтервалу на початку застосовується функція вікна (наприклад, вікно Гемінга). Часто застосовують високочастотне підсилення, щоб компенсувати послаблення, спричинене розсіюванням звуку від губ.
Щоб отримати спектральні оцінки використовується швидке перетворення Фур’є.
Фур’є спектр згладжується додаванням спектральних коефіцієнтів у межах “трикутних” частотних смуг розташованих на нелінійній (подібній до логарифмічної) Mel-шкалі [4]. Для граничної частоти мови (16 КГц) беруть 24 таких частотних смуги. Mel-шкала введена для наближення частотного розділення людського вуха, яке є лінійним до 1000 Гц та логарифмічним понад 1000 Гц.
З метою зробити статистику оціненого спектру потужності мови близькою до Гауссової до виходів набору фільтрів застосовується логарифмічний стиск.
До прологарифмованих коефіцієнтів застосовують дискретне косинусне перетворення. Це зосереджує спектральну інформацію в кепстральних коефіцієнтах з малими номерами, а також декорелює їх, дозволяючи при наступному статистичному моделюванні використовувати діагональні коваріаційні матриці. Перші 12 кепстральних коефіцієнтів та логарифм енергії інтервалу сигналу утворюють базовий 13-елементний звуковий вектор.
Є ряд додаткових перетворень, які можна застосувати для отримання остаточного звукового вектора.
Для зменшення мультиплікативного шуму на звукових векторах роблять нормалізацію кепстральних коефіцієнтів. Для кожної з дванадцяти компонент обчислюються середні значення по всіх звукових векторах даного мовного зразка. Ці середні значення віднімаються від відповідних компонент всіх звукових векторів даного мовного зразка.
Компоненти логарифму енергії даного мовного зразка, які менші від максимального значення на 50 дБ, заміняються на значення цього порогу. Потім всі значення логарифму енергії масштабуються так, щоб максимальне значення стає рівним 1,0.
Припускається, що кожен звуковий вектор не зв’язаний зі своїми сусідами. Це досить грубе припущеня, бо фізичні обмеження голосового тракту людини передбачають плавні переходи між сусідніми спектральними оцінками. Проте додавання різниць та різниць різниць базових елементів значно пом’якшує припущення. Переважно для цього беруться два попередні та два наступні вектори. У результаті отримуємо 39-елементний вектор [4]. Кілька інших можливих варіантів отримання звукових векторів описано в [3].
Попередня обробка мовних зразків (реалізація звукового препроцесора) ISOLET
База даних ISOLET складається з 7800 мовних зразків окремо вимовлених звуків англійської мови. Два зразки кожного звуку були записані від 150 осіб. Зразки дискретизовані з частотою 16 КГц та мають розрядність 16. Середня тривалість зразків - 0,5 с.
Етапи попередньої обробки мовних зразків у базі даних ISOLET детально описані нижче.
1. Оцифрований (дискретизований за часом та квантований за рівнем) мовний сигнал розбиваємо на блоки по 25.6 мс із зсувом кожні 10 мс , тобто, блоки по 409 відліків кожен блок, із зсувом на 160 відліків.
2. Пропускаємо блоки через фільтр першого порядку
,
де Sn – n-й відлік у блоці.
3. Застосовуємо до блоку вікно Гемінга згідно з виразом
для n =1,...,409
4. Збільшуємо довжину блоку до 512 елементів за рахунок доповнення його вкінці потрібною кількістю нулів. Після цього застосовуємо дискретне перетворення Фур’є й отримуємо 256 спектральних комплексних значень.
5. Нульовий член ігноруємо, а величини решта 255 спектральних значень усереднюємо. Усереднення реалізуємо як 24 трикутні смугопропускні фільтри. Нижня, середня та верхня частоти подані в таблиці. Вони апроксимують Mel-шкалу згідно з формулою
g=2595 log10(1+ f / 700),
де g – частота в Mel, f – частота в Герцах.
Смуга
Нижня частота
Середня частота
Верхня частота
1
0,000 Гц
74,24 Гц
156,4 Гц
2
74,24 Гц
156,4 Гц
247,2 Гц
3
156,4 Гц
247,2 Гц
347,6 Гц
4
247,2 Гц
347,6 Гц
458,7 Гц
5
347,6 Гц
458,7 Гц
581,6 Гц
6
458,7 Гц
581,6 Гц
717,5 Гц
7
581,6 Гц
717,5 Гц
867,9 Гц
8
717,5 Гц
867,9 Гц
1034 Гц
9
867,9 Гц
1034 Гц
1218 Гц
10
1034 Гц
1218 Гц
1422 Гц
11
1218 Гц
1422 Гц
1647 Гц
12
1422 Гц
1647 Гц
1895 Гц
13
1647 Гц
1895 Гц
2171 Гц
14
1895 Гц
2171 Гц
2475 Гц
15
2171 Гц
2475 Гц
2812 Гц
16
2475 Гц
2812 Гц
3184 Гц
17
2812 Гц
3184 Гц
3596 Гц
18
3184 Гц
3596 Гц
4052 Гц
19
3596 Гц
4052 Гц
4556 Гц
20
4052 Гц
4556 Гц
5113 Гц
21
4556 Гц
5113 Гц
5730 Гц
22
5113 Гц
5730 Гц
6412 Гц
23
5730 Гц
6412 Гц
7166 Гц
24
6412 Гц
7166 Гц
8000 Гц
6. Логарифмуємо отримані 24 середні значення.
7. Обчислюємо перші 12 значень дискретного косинусного перетворення.
для i=1…12
де mj - значення логарифму j-го середнього значення.
8. У кінець додаємо тринадцятий елемент, енергію поточного блока .
Далі можна обчислювати ще 26 елементів. Це ”різниця” та “різниця-різниць” коефіцієнти. 13 “дельт” [O(u)t]14,….,[O(u)t]26 апроксимують степінь зміни базових коефіцієнтів косинусного перетворення та енергетичних коефіцієнтів. Їх обчислюємо так:
13 “дельта-дельт” , які апроксимують прискорення базових коефіцієнтів косинусного перетворення Фур’є та енергетичних коефіцієнтів, отримуємо за наведеною вище формулою.
Кожний логарифмічний енергетичний профіль запису скануємо і низькочастотні
значення заміняємо значенням на 50дБ нижче пікового значення. Потім енергетичний профіль масштабуємо так, щоб пікове значення було 1.0.
3.Блок-схема попередньої обробки мовного сигналу
4.Програма на мові сценаріїв MATLAB 6.0 з коментарями:
Розглянуто звуковий файл example.wav у середовищі професійного звукового редактора Sony Sound Forge 7.0.
% очищення пам`яті від змінних
clear all;
% оголошення з одночасним присвоєнням значення для змінної
vybirka = 1 ;
% читає wave-файл example.wav та повертає мовні зразки у масив signal, амплітуда значень за % модулем не перевищує 1
signal = wavread('example.wav') ;
% створення на екрані вихідного зображення вікна розміром 3х3 під номером 1
subplot(3,3,1);
% зображує signal у вікні
plot(signal);
% підписує вікно
title('example.wav');
% у змінну заноситься довжина масиву
% d=358092
d = length(signal) ;
% лічильник відліків
% і=357761=2236*160+1
i = 1 ;
% Мовний сигнал параметризується – розбивається на відрізки по 25мс
% Оцифрований (дискретизований за часом та квантований за рівнем) мовний сигнал
% розбиваємо на блоки по 25,6 мс із зсувом кожні 10 мс, тобто, блоки по 409 відліків кожен
% блок, із зсувом на 160 відліків
%
% Цикл виконається 2236 раз, бо (і=357761=2236*160+1)<(d-408=358092-408=357684)
while i < d - 408
% лічильник циклу або лічильник блоків відліків
% vybirka=2237
vybirka = vybirka + 1 ;
%
% 1.Розбиття на блоки
%
% створення матриці з 409 відліків (біжучий блок)
y = signal(i : i + 408) ;
%
% 2.Пропускаємо блоки через фільтр першого порядку
% Це попереднє високочастотне підсилення
% ,
% де Sn – n-й відлік у блоці.
S(1) = 0.0 ;
for n = 2 : 409
S(n) = y(n) - y(n - 1) ;
end;
%
% 3.Застосування вікна Хемінга
%
% для n =1,...,409
%
for n = 1 : 409
D(n) = (0.54 - 0.46 * cos(2 * pi * (n - 1) / 408)) * S(n) ;
end;
%
% 4. Збільшення значень до 512 та застосування дискретного перетворення Фур`є
% Набір з 409 відліків доповнюється нулями до степеня двійки (512) з метою виконання
% швидкого перетворення Фур`є
B = abs(fft(D,512)) ;
% Немає сенсу брати усі 512 значень, тому беремо лише 256 комплексних спектральних
% доменних значень (перші 256 значень з масиву В)
C = B(1:256);
%
% 5. Усереднення реалізуємо як 24 трикутні смугопропускні фільтри
% Задаємо масив частот для апроксимації Mel-шкали
% вибираються переважно нижні частоти
Hz = [0; 74.24; 156.4; 247.2; 347.6; 458.7; 581.6; 717.5; 867.9 ; 1034; 1218; 1422;1647; 1895;
2171; 2475; 2812; 3184; 3596; 4052; 4556; 5113; 5730;6412; 7166; 8000];
for n = 1 : 26
V(n) = round (Hz(n) * 256 / 8000) ;
V(1) = 1;
end;
% Нульовий член ігноруємо, а величину решти 255 спектральних значень усереднюємо.
% Усереднення реалізуємо як 24 трикутні смугопропускні фільтри
Sum = 0 ;
R(1 : 24) = 0;
for j = 1 : 24
N = V(j + 2) - V(j);
N1 = V(j + 1) - V(j);
D1 = 1 / N1;
for k = 1 : N1
Sum = Sum - S(k + V(j)) * D1 * k;
end;
N2 = V(j + 2) - V(j + 1);
D2 = 1 / N2;
for k = 1 : N2
Sum = Sum - S(k + V(j + 1)) * (1 - D2 * k) ;
end;
R(j) = Sum / N ;
Result (vybirka,j) = R(j);
end;
% збільшення лічильника відліків
i = i + 160;
end;
% виведення значень з кожного етапу обробки
% виведення останнього блоку з 409 відліків
subplot(3,3,2); plot(y);title(' 409 values ');
% виведення результатів застосування фільтру першого порядку
subplot(3,3,3); plot(S);title(' applying filters');
% виведення результатів застосування вікна Хемінга
subplot(3,3,4); plot(D);title(' Hemming');
% виведення результатів застосування збільшення кількості відліків та ШПФ
subplot(3,3,5); plot(B);title(' 512 fft ');
% виведення результатів відбору перших 256 комплексних спектральних значень
subplot(3,3,6); plot(C);title(' 256 elements ');
% виведення результатів усереднення як застосування 24-ох трикутних смугопропускних
% фільтрів
subplot(3,3,7); plot(Result(vybirka,1:24)); title(' 24-element vector');
5.Результат виконання програми:
6.Висновок: на лабораторній роботі я опрацював та випробував в середовищі MATLAB 6.5 програму, яка реалізує етапи попередньої обробки мовних зразків.