Реализация текстозависимой верификации диктора

В данном параграфе будут подробно описаны все этапы практической разработки формантного метода текстозависимой верификации диктора, рассмотренного в параграфе 3.3. Кроме того, будут приведены коды на языке MATLAB и указаны параметры вызываемых функций. Конечной целью является реализация текстозависимой верификацией диктора в виде модулей с графическим интерфейсом и демонстрацией разработанной системы. Для каждого этапа будут сформулированы эксперименты и задания для выбора тех или иных параметров, как функции, так и системы в целом, критерием для их выбора будет оценка надежности реализованной системы.

Необходимо осуществить запись выходных данных с микрофона в массив S с помощью функции wavrecord, для чего зададим параметры настройки микрофона: число записываемых отсчетов п, частоту дискретизации Fs в Гц, число каналов ch, и тип записываемых данных dtype:

Если речевой сигнал записывается в два канала, то массив S представляет собой двухмерную матрицу, где первый столбец — это правый канал, второй столбец — левый, а стоки — это временные отсчеты сигнала. Функцию wavrecord можно использовать только с 32-битной операционной системой Windows, иначе необходимо использовать функцию audiorecorder.

Для параметра dtype возможны следующие значения:

  • • ’double’ — 16-битная запись, данные представляются в восьмибайтовом формате с плавающей запятой (диапазон от -1 до 1);
  • • ’single’ — 16-битная запись, данные представляются в четырехбайтовом формате с плавающей запятой (диапазон от -1 до 1);
  • • ’intl6’ — 16-битная запись, данные представляются в двухбайтовом целочисленном формате (диапазон от -32768 до 32767);
  • • ’uint8’ — 8-битная запись, данные представляются в однобайтовом беззнаковом целочисленном формате (диапазон от 0 до 255, нулевому напряжению на входе соответствует значение 128).

Входные параметры Fs, ch, dtype можно опускать, при этом их значения будут приниматься но умолчанию: Fs=11025 Гц, ch=l, dtype= ’double’. Так как частота дискретизации речевого сигнала должна быть не менее 6800 Гц, то положим частоту дискретизации как раз равной 11025 Гц. Тогда вызов функции будет следующим:

S = wavrecord (5*11025);.

Для считывания wav-файлов можно использовать функцию wavread:

где входной параметр ’filename’ — путь к wav-файлу, а выходные: S отсчеты сигнала в wav-файлах, Fs — частота дискретизации в Гц, bits число бит на отсчет.

Для записи сигнала в виде wav-файла используется функция wavwrite:

где S — отсчеты записываемого сигнала в виде матрицы, Fs — частота дискретизации в Гц, bits — число бит на отсчет (8 или 16), ’filename ’ — путь к создаваемому wav-файлу. Параметры Fs и bits можно опускать, при этом используются значения по умолчанию: Fs = 8000 Гц, bits 16.

Для воспроизведения сигнала в звуковом виде можно использовать функции sound или wavplay:

где S — отсчеты сигнала в виде матрицы, Fs — частота дискретизации в Гц, bits — число бит на отсчет (8 или 16). Параметры Fs и bits можно опускать, при этом их значения будут приниматься по умолчанию: Fs 8000 Гц, bits = 16.

Для обработки речевого сигнала сначала производят предкоррекцию, выравнивание его спектра (pre-emphasis), для того чтобы устранить естественные искажения, возникающие в речевой системе человека при произнесении звуков. В результате предкоррекции верхняя часть спектра усиливается, и поэтому форманты более высокого порядка выделяются с большей точностью. Для этого речевой сигнал пропускают через корректирующий фильтр верхних частот:

PreEmphFact=-0.98;

S=real(filter([1 PreEmphFact],1,S));

Существуют и другие более сложные способы предкоррекции, например, шумоподавляющая фильтрация ослабляет те части спектра, о которых известно, что они более всего искажены шумом. Для сглаживания спектра и частотной коррекции можно применить фильтр Баттерворда 5 порядка с частотой среза 200 Гц:

[cb,са] = butter(5,2*200/11025,’high’);

Т = filtfilt(cb,ca,T);

Качество распознавания диктора по голосу сильно зависит от качества сигнала, так как система распознавания диктора чувствительна к фоновому шуму, канальному шуму и искажениям, создаваемым различными микрофонами [15; 22].

Необходимо осуществить шумоочистку речевого сигнала на основе дискретного вейвлет-преобразования с помощью функции wden:

где S — сигнал до шумоочистки; Sden — сигнал после шумоочистки; criteria — критерий, с помощью которого для каждого уровня выбирается оптимальный порог criteria:

  • • ’ rigrsure ’ — адаптивный выбор порога, при котором используется принцип Штейна несмещенной оценки риска,
  • • ’ heursure ’ — эврестический вариант первого выбора,
  • • ’sqtwolog’ — универсальный порог,
  • • ’minimaxi’ — минимаксный порог;

softhard — принцип пороговой обработки, задающего мягкий ’soft’ или жесткий ’hard’ вид трешолдинга; scaling — вид трешолдинга, определяющего способ пересчета порога:

  • • ’min’ — для каждого из уровней разложения,
  • • ’sin’ — только для первого уровня разложения,
  • • ’one’ — один для всех уровней разложения;

lev — глубина разложения; wname — вейвлет-функция:

  • • Нааг — вейвлеты Хаара,
  • • Db — вейвлеты Добеши,
  • • Sym — симлеты,
  • • Coif — койфлеты,
  • • Bior — биортогональные вейвлеты,
  • • Rbio — дуальные биортогональные вейвлеты,
  • • Меуг — вейвлеты Мейера,
  • • Dmey — дискретные аппроксимации вейвлетов Мейера,
  • • Gaus — гауссовы вейвлеты,
  • • Mexh — вейвлет «мексиканская шляпа»,
  • • Mori — вейвлеты Морле,
  • • Cgau — комплексные гауссовы вейвлеты,
  • • Shan — вейвлеты Шеннона,
  • • Fbsp — частотные В-сплайновые вейвлеты,
  • • Cmor — комплексные вейвлеты Морле.

Для декомпозиции речевого сигнала может быть выбран вейвлет с уровнем разложения от 4 до 6. Он должен быть ортогональным вейвлетом с компактным носителем, на базе которого легко реализуется вейвлет-преобразование с использованием быстрых алгоритмов. Например, можно выбрать вейвлеты Добеши (db4) или биортогональные вейвлеты (bior2.2). Для каждого уровня должен выбираться оптимальный порог с помощью критерия Штейна несмещенной оценки риска 115] и применяться мягкая пороговая обработка детализирующих коэффициентов с многоуровневым трешолдингом. Далее производится вейвлет- реконструкция, основанная на первоначальных аппроксимирующих коэффициентах и модифицированных детализирующих коэффициентах всех уровней:

Для лучшей шумоочистки сигнала необходимо самостоятельно провести эксперименты с выбором параметров функции wden: критерия criteria, принципа пороговой обработки softhard, глубины разложения lev, вейвлет-функции wname, вида трешолдинга scaling; а также качественно оценить ее работу. Для проведения экспериментов можно использовать функцию awgn — добавление к сигналу S аддитивного белого нормального шума, приемлемый уровень отношения сигнала к шуму deb считается от 50 до 30 дБ:

Для нормализации уровня сигнала необходимо применить метод усреднения уровня сигнала на протяжении всей фразы. Далее приведен пример на языке MATLAB, в котором выполняется нормализация уровня сигнала S:

к=1; °/0 Коэффициент нормализации к

Ss=fft(S);

nor=k*mean(abs(Ss));

Snor=ifft(Ss./nor);

S=Snor;

[A,B]=size(S); offset=mean(S);

S=S-offset*ones(A,B);

Для улучшения нормализации можно провести эксперименты по выбору коэффициента к от 0 до 1 с шагом 0.1 и от 1 до 10 с шагом 1.

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

Ниже приведен исходный код для удаления из фразы слабовыраженных речевых участков сигнала S методом, основанным на измерении энергии:

ко=128; а1=0.05; а2=0.03;

for i=l:ко:(А-257)

no = mean(abs(fft(S(i:(i+ko)),ko))); if no>=al break

end

end

for j=A:-ko:257

no = mean(abs(fft(S((j-ko+l):j),ko))); if no>=a2 break

end

end

S=S (i:j);

Для более точного удаления слабовыраженных участков речевого сигнала методом, основанным на измерении энергии, необходимо провести эксперименты по выбору порогового значения для начала речевой фразы а1 и для окончания а2, а также длины непересекающихся сегментов ко.

Для более точного определения границ фразы можно использовать метод, основанный на измерении числа переходов через нуль сигнала S: al=0.05; a2=0.03;

for i=l:ko:(A-257)

no = mean(abs(fft(S(i:(i+ko)),ko))); if no>=al

for ii=i:—1:1

si=S(i:(i+ko));

zo=mean(abs(sign(si)-sign([0,si(1:(end-1))]))); if zo>ko/2 break;

end

end

break

end

end

for j=A:-ko:257

no = mean(abs(fft(S((j-ko+l):j),ko))); if no>=a2

for ii=i:—1:1

si=S(i:(i+ko));

zo=mean(abs(sign(si)-sign([0,si(1:(end-1))]))); if zo>ko/2 break;

end

end

break

end

end

S=S (i:j);

Для более точного удаления слабовыраженных участков речевого сигнала методом, основанным на измерении числа переходов через нуль сигнала S, необходимо провести эксперименты по выбору порогового значения для начала речевой фразы а1 и для окончания а2, а также длины непересекающихся сегментов ко.

С помощью экспериментов проведите сравнение двух вышеописанных методов удаления слабовыраженных речевых участков.

Кроме того, необходимо реализовать процедуру сравнения речевых сигналов на временное сходство. Утверждается, что длительности одной и той же фразы, произнесенной диктором, должны совпадать. Проведите ряд экспериментов для получения граничного значения разницы длительности сигнала, которое обеспечивает временное сходство речевых фраз.

В формантном методе текстозависимой верификации диктора векторы признаков должны вычисляться на определенных сегментах речевого сигнала. Для выделения векторов параметров рассмотрим стандартный метод сегментации, который основан на отношении квадратного корня из кратковременной энергии к функции перехода через ноль.

Функция ShortTimeEnergy оценивает кратковременную энергию в окне длиной windowLength и шагом step:

function E=ShortTimeEnergy(signal,windowLength,step); signal = signal / max(max(signal)); curPos = 1;

L = length(signal);

numOfFrames = floor((L-windowLength)/step) + 1;

E = zeros(numOfFrames,1); for (i=l:numOfFrames)

window = (signal(curPos:curPos+windowLength-1));

E(i) = (1/(windowLength)) * sum(abs(window.~2)); curPos = curPos + step;

end

Функция zcr вычисляет число переходов через ноль в окне с длиной windowLength и шагом step:

function Z = zcr(signal, windowLength, step); signal = signal / max(abs(signal)); curPos = 1;

L = length(signal);

numOfFrames = floor((L-windowLength)/step) + 1;

Z = zeros(numOfFrames,1); for (i=l:numOfFrames)

window = (signal(curPos:curPos+windowLength-1)); window2 = zeros(size(window)); window2(2:end) = window(l:end-1);

Z(i)=(l/(2*windowLength))*...

sum(abs(sign(window)-sign(window2))); curPos = curPos + step;

end

Отношение G квадратного корня из кратковременной энергии Е к функции перехода через ноль Z найдем как

1=128;

E=ShortTimeEnergy(S, 1, 1);

Z=zcr(S, 1, 1);

G=sqrt(Е)./Z;

Для того чтобы вывести на экран отсчеты сигнала S и отобразить на нем вертикальными линиями границы полученных сегментов используем

g=smooth(G,10/length(G),’lowess’);

[pksl,locsl]=findpeaks(-l*g); locsl(end)= [] ;

plot(1:length(S),S), axis([l length(S) -1 1]); for op=l:length(locsl)

line([l*locsl(op) l*locsl(op)], [-1 1],...

’LineWidth’,2,’Color’,[0 0 0]); end

Для более точной и корректной сегментации необходимо провести эксперименты по выбору длины окна 1.

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

С помощью приведеннего ниже кода можно вычислить формантный набор на сегменте Seg.

Fs=11025; 1 Частота дискретизации

const=Fs/(2*pi);

ma=lpc(Seg,p); % p - порядок линейного предсказания

rts=roots(та);

rts=rts(imag(rts)>0.1); % удаление полюсов re=real(rts); im=imag(rts);

fr=sort(const*atan2(im,re)); bw=-2*const*log(abs(rts)); for i=l:length(fr)

if fr>200 & bw<500 & fr<5000 % удаление полюсов с частотой меньше 200 Гц % и больше 5000 Гц

% удаление полюсов с шириной больше 500 Гц formant(i)=fr(i);

end

end

Для увеличения надежности формантного метода текстозависимой верификации диктора необходимо провести эксперименты по выбору порядка предсказания р и числа формант.

Рассмотрим исходный код, вычисляющий меру близости Sww между речевыми фразами с со-метрикой:

Sww=0;

п=7; % число сегментов в фразе for i=l:n

fl=Frl(i,:);

% Frl массив частот формант для первой фразы f2=Fr2(i,:);

% Fr2 массив частот формант для второй фразы % строки отвечают за номер сегмента % столбцы - номер форманты Sww=Sww+max(abs(f1(:)-f2(:)));

end

Sww=Sww/n;

Для увеличения надежности формантного метода текстозависимой верификации диктора необходимо провести эксперименты по выбору метрики в решающем правиле: метрика /i-метрике или со-метрике.

 
Посмотреть оригинал
< Пред   СОДЕРЖАНИЕ   ОРИГИНАЛ   След >