• Регистрация
Алан Алимурадов
Алан Алимурадов 0.00
н/д

Повышение эффективности сегментации речевых сигналов на основе энергетического оператора Тигера

11.04.2021

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

Функция сегментации речь/пауза на основе энергетического анализа фрагментов речевого сигнала с помощью энергетического оператора Тигера с последующим анализом значений количества пересечения через нулевую ось и кратковременной энергии функции энергетической характеристики.

% Функция сегментации речь/пауза на основе энергетического анализа фрагментов речевого сигнала с помощью энергетического оператора Тигера с последующим анализом значений количества пересечения через нулевую ось и кратковременной энергии функции энергетической характеристики
% x – речевой сигнал;
% fs – частота дискретизации
% N – длительность речевого сигнала в дискретных отсчетах
% L – длительность одного фрагмента в дискретных отсчетах
% S – количество фрагментов в речевом сигнале
% s – переменная для нумерации фрагментов
% a – переменная для использования в вычислениях
% b – переменная для использования в вычислениях
% frag – фрагмент речевого сигнала
% i – дискретный отсчет времени
% teager – функция энергетического оператора Тигера речевого сигнала во фрагменте
% ZCR_frag – количество пересечения функции речевого сигнала во фрагменте
% ZCRmean – среднее значение количества пересечения функции через нулевую ось среди первых 20-ти фрагментов речевого сигнала
% ZCRdelta – дисперсия значений количества пересечения функции через нулевую ось среди первых 20-ти фрагментов речевого сигнала
% E_frag – кратковременная энергия речевого сигнала во фрагменте
% Emean – среднее значение кратковременной энергии среди первых 20-ти фрагментов речевого сигнала
% Edelta – дисперсия значений кратковременной энергии среди первых 20-ти фрагментов речевого сигнала
% z1 – переменная результата сегментации речь/пауза на основе анализа количество пересечения функции речевого сигнала во фрагменте
% z2 – переменная результата сегментации речь/пауза на основе анализа кратковременной энергии речевого сигнала во фрагменте
% z – переменная результата сегментации речь/пауза на основе совместного анализа количества пересечения функции и кратковременной энергии речевого сигнала во фрагменте
% v – переменная результата сегментации речь/пауза на основе совместного анализа количества пересечения функции и кратковременной энергии речевого сигнала во фрагменте после исправления ошибочных фрагментов

function [S frag v]=segment2(x, L);

p=max(x); % Определение максимального значения речевого сигнала

% Фрагментирование, определение функции Тигера фрагментов речевого сигнала, вычисление количества пересечения через нулевую ось функции Тигера фрагментов речевого сигнала, вычисление кратковременной энергии функции Тигера фрагментов речевого сигнала
N=length(x); % Определение длительности речевого сигнала в дискретных отсчетах
S=fix(N/L); % Определение и округление количества фрагментов до целого числа в меньшую сторону
teager=0; % Обнуление
ZCR_frag=0; % Обнуление
E_frag=0; % Обнуление

for s=0:S-1; % Задание номера фрагмента
% Фрагментирование речевого сигнала на отрезки по 10 мс
frag(:,s+1)=x(s*L+1:(s+1)*L); % Определение фрагментов frag
% Определение функции Тигера фрагментов речевого сигнала
for i=2:L-1; % Количество анализируемых дискретных отсчетов в анализируемом фрагменте
teager(i,s+1)=(frag(i,s+1).^2)-(frag(i-1,s+1)*frag(i+1,s+1));
end
teager(i+1,s+1)=0;
% Вычисление количества пересечения через нулевую ось функции Тигера фрагментов речевого сигнала
ZCR_frag(s+1)=0; % Обнуление переменной для использования в вычислениях
for i=2:L-1; % Количество анализируемых дискретных отсчетов в анализируемом фрагменте
ZCR_frag(s+1)=ZCR_frag(s+1)+abs(sign(teager((s)*L+i))-sign(teager((s)*L+i-1)));
end
ZCR_frag(s+1)=0.5*ZCR_frag(s+1);
% Вычисление кратковременной энергии функции Тигера фрагментов речевого сигнала
E_frag(s+1)=sum(abs(teager(:,s+1)).^2); % Определение энергии фрагмента
end

for K=1:15; % Задание коэффициента дисперсии

% Определение статуса речь/пауза фрагментов речевого сигнала
ZCRmean=mean(ZCR_frag(1:20)); % Определение среднего значения количества пересечения функции сигнала через нулевую ось среди первых 20-ти фрагментов
a=0; % Обнуление переменной для использования в вычислениях
for s=1:20; % Задание номера фрагмента
a=a+(ZCR_frag(s)-ZCRmean)^2;
end
ZCRdelta=sqrt(a/20); % Значение дисперсии

z1=0; % Обнуление переменной результата сегментации речь/пауза на основе анализа ZCR
a=0; % Обнуление переменной для использования в вычислениях
for s=0:S-1; % Задание номера фрагмента
a(s+1)=abs(ZCR_frag(s+1)-ZCRmean); % Определение разницы между количеством пересечения функции сигнала в текущем фрагменте и средним количеством
% Проверка условия
if a(s+1)>=K*ZCRdelta;
%if a(s+1)>=coef*ZCRdelta;
z1(s*L+1:(s+1)*L)=p;
else
z1(s*L+1:(s+1)*L)=0;
end
end

% Определение статуса речь/пауза фрагментов речевого сигнала по логарифму энергии
Emean=mean(E_frag(1:20)); % Определение среднего значения энергии первых 20-ти фрагментов
a=0; % Обнуление переменной для использования в вычислениях
for s=1:20; % Задание номера фрагмента
a=a+sum(E_frag(s)-Emean)^2;
end
Edelta=sqrt(a/20); % Значение дисперсии

z2=0; % Обнуление переменной результата сегментации речь/пауза на основе анализа ZCR
a=0; % Обнуление переменной для использования в вычислениях
for s=0:S-1; % Задание номера фрагмента
a(s+1)=abs(E_frag(s+1)-Emean); % Определение разницы между количеством пересечения функции сигнала в текущем фрагменте и средним количеством
% Проверка условия
if a(s+1)>=K*Edelta;
z2(s*L+1:(s+1)*L)=p;
else
z2(s*L+1:(s+1)*L)=0;
end
end

% Сопоставление статусов речь/пауза фрагментов речевого сигнала по ZCR и энергии
for s=0:S-1; % Задание номера фрагмента
% Проверка условия
if ((z1(s*L+1:(s+1)*L)==0) & (z2(s*L+1:(s+1)*L)==0));
z(s*L+1:(s+1)*L)=0;
else
z(s*L+1:(s+1)*L)=p;
end
end

% Исправление ошибочных фрагментов речевого сигнала на основе физиологии формирования речи
% Первый этап исправления ошибочных фрагментов
v(K, :)=0; % Обнуление переменной результата сегментации речь/пауза на основе совместного анализа ZCR и LSTE после исправления ошибочных фрагментов

a=0; % Обнуление переменной для использования в вычислениях
a=z; % Переименование переменной для использования в вычислениях
for s=1:S-2; % Задание номера фрагмента
% Проверка условия
if a(s*L+1:(s+1)*L)==p;
if ((a((s-1)*L+1:(s)*L)==0) & (a((s+1)*L+1:(s+2)*L)==0));
v(K, s*L+1:(s+1)*L)=0;
else
v(K, s*L+1:(s+1)*L)=p;
end
else
if ((a((s-1)*L+1:(s)*L)==p) & (a((s+1)*L+1:(s+2)*L)==p));
v(K, s*L+1:(s+1)*L)=p;
else
v(K, s*L+1:(s+1)*L)=0;
end
end
end
end

 

Код сегментации речь/пауза на основе энергетического анализа фрагментов речевого сигнала с помощью энергетического оператора Тигера с последующим анализом значений количества пересечения через нулевую ось и кратковременной энергии функции энергетической характеристики.

% Сегментация речь/пауза на основе энергетического анализа фрагментов речевого сигнала с помощью энергетического оператора Тигера с последующим анализом значений количества пересечения через нулевую ось и кратковременной энергии функции энергетической характеристики
% x – речевой сигнал;
% fs – частота дискретизации
% N – длительность речевого сигнала в дискретных отсчетах
% L – длительность одного фрагмента в дискретных отсчетах
% S – количество фрагментов в речевом сигнале
% p – максимальное значение дискретных отсчетов речевого сигнала
% frag – фрагмент речевого сигнала
% v – переменная результата сегментации речь/пауза на основе совместного анализа количества пересечения функции и кратковременной энергии речевого сигнала во фрагменте после исправления ошибочных фрагментов
% q – переменная результата ручной сегментации речь/пауза
% error(:,1) – ошибка первого рода
% error(:,2) – ошибка второго рода

% Исходные данные
L=80; % Задание одного фрагмента в дискретных отсчетах (10 мс при частоте дискретизации 8000 Гц)
x=data; % Загрузка и переименование речевого сигнала
p=max(x); % Определение максимального значения речевого сигнала
N=length(x); % Определение длительности речевого сигнала в дискретных отсчетах

% Сегментация речь/пауза
[S frag v]=segment1(x, L); % Функция сегментации речь/пауза на основе энергетического анализа фрагментов речевого сигнала с помощью энергетического оператора Тигера с последующим анализом значений количества пересечения через нулевую ось и кратковременной энергии функции энергетической характеристики

% Ручная разметка (сегментация) речь/пауза
q(1:N)=0; % Формирование сигнала ручной разметки «q»
q(9450:15290)=max(x); % Участок полезной речи
q(20340:27060)=max(x); % Участок полезной речи
q(32800:40000)=max(x); % Участок полезной речи
q(47230:53470)=max(x); % Участок полезной речи
q(60770:69730)=max(x); % Участок полезной речи

% Сравнение результатов сегментации с ручной разметкой
for K=1:15; % Задание коэффициента дисперсии
N=length(v(K, :)); % Определение длительности речевого сигнала в дискретных отсчетах
a=0; % Обнуление переменной для использования в вычислениях
error1=0; % Обнуление переменной ошибки 1-ого рода
for s=0:S-2; % Задание номера фрагмента
% Проверка условия
if ((q(s*L+1:(s+1)*L)==p) & (v(K, s*L+1:(s+1)*L)==p));
a=a+0;
else
a=a+1;
end
end
error1=((a-563)*100)/437; % Ошибка 1-ого рода

b=0; % Обнуление переменной для использования в вычислениях
error2=0; % Обнуление переменной ошибки 2-ого рода
for s=0:S-2; % Задание номера фрагмента
% Проверка условия
if ((q(s*L+1:(s+1)*L)==0) & (v(K, s*L+1:(s+1)*L)==0));
b=b+0;
else
b=b+1;
end
end
error2=((b-437)*100)/563; % Ошибка 2-ого рода

error(K,1)=error1';
error(K,2)=error2';
end

% Построение результатов
% Построение зависимости ошибок 1-ого и 2-ого рода от коэффициента K
plot(error(:,1), 'b-o', 'LineWidth', 1); grid; xlim([1 K]); hold on;
plot(error(:,2), 'r-o', 'LineWidth', 1); hold off;
xlabel ('Threshold coefficient','FontSize',12);
ylabel ('Errors of the 1st and 2nd kind, %', 'FontSize',12);

% Построение результат сегментации
plot (x, 'LineWidth', 1); grid; hold on;
plot (q, 'k', 'LineWidth', 1);
plot (v(10, :), 'r', 'LineWidth', 1); hold off;
xlabel ('Discrete timing', 'FontSize',12);
ylabel ('Amplitude, V', 'FontSize',12);

 

Файл статьи в формате PDF, а также m-файл функции (segment1), m-файл сценарий (paper) прикреплены к данной публикации.

Теги

    11.04.2021

    Комментарии