Оглавление.

Введение. Общие вопросы компьютерного распознавания и порождения речи.

1. Программирование звука в Windows.

2. Основы цифровой обработки звуковых сигналов.

3. Определение параметров речевого сигнала.

4. Алгоритмы распознавания.

5. Использование Microsoft Speech API 5.1 для синтеза и распознавания речи.

6. Использование Microsoft Speech API 4.0 для синтеза речи.

Ссылки.

Об авторе.

Компьютерное распознавание и порождение речи

Глава 3. Определение параметров речевого сигнала.

Назад В начало главы Дальше

Подход 2. Автокорелляционный метод.

Изменим пределы суммирования в исходном выражении для cij :

N-1-|i-j|
cij=cji=(x[n]x[n+|i-j|])(9)
n=0

Если далее мы разделим выражение для cij на N, то получим функцию автокорреляции R(?), вычисленную для τ=|i-j|

N-1
R(|i-j|) = cij /N = 1/N (x[n]x[n+|i-j|])(10)
n=0

p
aiR(|i-j|)=R(j), (11)
i=1

где j=1..p.

В матричном виде система уравнений Юла-Уокера примет вид:

A R = B(8)

где A – вектор коэффициентов ai , С – вектор значений R(i),
i=1..p, а

Матрица R симметрична относительно главной диагонали и является матрицей Теплица, то есть каждая строка получается из предыдущей сдвигом вправо на одну позицию. Для подобных матриц система линейных уравнений может быть решена по более простому по сравнению с классическими методом Левинсона-Дарбина, алгоритм которого требует порядка p2 операций ( то есть значительно быстрее классических, применяемых при ковариационном методе).
Алгоритм Левинсона-Дарбина следующий.

1. Начальные условия:
l=0, E=R[0], a[i]=0 для i=1..p

2. Для l=1 по p цикл l-1

2.1. k[l] = (?a[i]R[l-1]-R[l])/E i=1

2.2. a[l] = -k[l]

2.3. Для j=1 по l-1 цикл

2.3.1. a[j]=a[j]+k[l]a[l-j]

2.4. E=E(1-k[l]2)

На выходе алгоритма получаем оценку ошибки E и вектор коэффициентов линейного предсказания a[i].
Приводим реализацию алгоритма вычисления линейных коэффициентов автокорреляционным методом с применением алгоритма Левинсона-Дарбина на языке C.

//Функция вычисляет коэффициенты линейного предсказания для сигнала х длиной
//N, возвращает оценку ошибки. Параметр p задает число отсчетов, на основании
//которых делается предсказание, в параметре a возвращается ссылка на массив
//полученных коэффициентов

double LineFactors(double* x, int N, int p, double* a)
{
double E;
double* R=(double*)malloc(sizeof(double)*p);
double* k=(double*)malloc(sizeof(double)*p);
int i,j,l,n;
a=(double*)malloc(sizeof(double)*p);
for(i=0;i‹p;i++)
{
a[i]=0;
R[i]=0;
for(n=0;n‹N;j++)
{
R[n]+=x[n]*x[n+i];
}
R[n]/=N;
}
E=R[0];
l=0;

for(l=1;l‹=p;l++)
{
k[l]=0;
for(i=1;i‹l;i++)
{
k[l]+=a[i]*R[l-i];
}

k[l]=(k[l]-R[l])/E;
a[l]=-k[l];

for(j=1;j‹l;j++)
{
a[j]+=k[l]*a[i-j];
}
E=E*(1-k[l]*k[l]);
}

return E;
}


Распознавание речи. Обработка текстов на естественном языке.
Hosted by uCoz