Главная Случайная страница


Категории:

ДомЗдоровьеЗоологияИнформатикаИскусствоИскусствоКомпьютерыКулинарияМаркетингМатематикаМедицинаМенеджментОбразованиеПедагогикаПитомцыПрограммированиеПроизводствоПромышленностьПсихологияРазноеРелигияСоциологияСпортСтатистикаТранспортФизикаФилософияФинансыХимияХоббиЭкологияЭкономикаЭлектроника






Анализ: измерение частоты основного тона

Из всего разнообразия методов измерения частоты основного тона [3,10,11] рассмотрим лишь два: корреляционный и кепстральный.

Корреляционный метод. Рассмотрим здесь одну из разновидностей корреляционного метода. Выделенный сегмент речи (рис.11.а) центрируют, затем подвергают центральному (с порогом 0.75) клиппированию (рис.11.б), после чего вычисляют АКФ клиппированного сегмента (рис.12.б). Координата максимального бокового лепестка АКФ близка периоду основного тона. Для сравнения, на рис.12.а показана АКФ исходного сегмента речи.

а) б)

Рис.11. Звук «и» до центрального клиппирования (а) и после (б)

а) б)

Рис.12. АКФ звука «и» до клиппирования (а) и после (б)

Очевиден положительный эффект центрального клиппирования – структура клиппированного сигнала и его АКФ значительно проще, что облегчает измерение периода основного тона.

Рис.13. Результат измерений частоты основного тона

Более того, по уровню всплеска максимального бокового лепестка АКФ клиппированного сигнала можно принимать решение о степени вокализованности звука – если, например, этот уровень превышает значение 0.2, принимается решение о наличии гласного звука, в противном случае принимается решение о наличии согласного звука либо о паузе.

Пример результата измерений частоты основного тона приведен на рис.13, а листинг соответствующей программы имеет следующий вид:

% ============ main_tone_corr.m ===========

% Измерение частоты основного тона корреляционным методом

% x - анализируемый (речевой) сигнал

% Ton - массив значений частоты тона (0 - признак шума)

% ====================================

% начальные параметры

fs = 11025; nfft = 512; numoverlap = 256; % сегменты из 512, перекрываются на 256

step=nfft-numoverlap; % сдвиг сегментов

window = rectwin(nfft);

%

% ======= Формирование 2-мерного массива данных =====

sig2dim=[];

for ik = 1:step:(length(x)-nfft) % начальные номера сегментов

for jk = 1:nfft

seg_sig2dim(jk) = x(jk+ik-1).*window(jk);

end;

seg_sig2dim = seg_sig2dim-mean(seg_sig2dim);

sig2dim=[sig2dim seg_sig2dim'];

end;

% ==== центральное клиппирование ====

sig_clip=[]; % результат клиппированиЯ

for ic = 1:size(sig2dim,2)

seg_sig = sig2dim(:,ic); % выбор сегмента сигнала

seg_sig = seg_sig/max(abs(seg_sig)); % нормирование сегмента по максимуму

% seg_clip - результат клиппированиЯ сегмента

for jc = 1:length(seg_sig)

if seg_sig(jc)> 0.75

seg_clip(jc)=seg_sig(jc)-0.75;

elseif seg_sig(jc)< -0.75

seg_clip(jc)=seg_sig(jc)+0.75;

Else

seg_clip(jc)=0;

End

End

sig_clip=[sig_clip seg_clip']; % sig_clip - результат клиппированиЯ сигнала

End

% ====== Вычисление АКФ клиппированного сигнала ========

akf_clip=[]; % АКФ клиппированного сигнала

for ic = 1:size(sig2dim,2)

[akf_seg_clip,tau_clip]=xcov(sig_clip(:,ic),'coeff');

akf_clip=[akf_clip akf_seg_clip];

End

% ====== Вычисление частоты основного тона ========

akf_inf=akf_clip(nfft+38:nfft+130,:); % выделение информативного участка АКФ

[akf_infm,indmx]=max(akf_inf);

for ic=1:length(akf_infm)

if akf_infm(ic)<0.2

Ton(ic)=0;

Else

Ton(ic)=fs/(indmx(ic)+37);

End

End

tTon=0:step/fs:(length(x)-nfft)/fs;

figure; plot(tTon,Ton) % график частоты основного тона

title('Частота основного тона (коррел.метод)');

Xlabel('ВремЯ, с'); ylabel('Частота, Гц')

Grid on

 

Кепстральный метод.Принципиальное отличие данного метода от корреляционного в том, что вместо оценки АКФ центрально-клиппированного сегмента речи используют оценку кепстра (1). На рис.14 приведен результат измерения кепстра речевого сегмента протяженностью 512 выборок (звук «и», осциллограмма которого приведена на рис.11.а). На приведенном графике отчетливо наблюдается всплеск бокового лепестка кепстра, соответствующий периоду основного тона примерно 8 мс (частота 125 Гц). Результат измерений частоты основного тона кепстральным методом приведен на рис.15

Рис.14. Кепстр звука «и» Рис.15. Частота основного тона

Листинг программы вычисления частоты основного тона по результатам кепстрального анализа имеет следующий вид:

% ============ main_tone_cpstr.m ===========

% Измерение частоты основного тона кепстральным методом

% Bcpstr - двумерный массив кепстров

% porog - порог обнаружениЯ кепстрального пика

% Ton - массив значений частоты тона (0 - признак шума)

% ====================================

porog=0.09; % порог обнаружениЯ кепстрального пика

% ====== Вычисление частоты основного тона ========

Cs=Bcpstr(38:130,:); % выделение информативного участка кепстра

for iz=1:93

for jz=1:length(Cs(1,:))

if Cs(iz,jz)<=0

Cs(iz,jz)=0; % отбрасывание отрицательных значений кепстра

End

End

End

% построение графика кепстра

[X,Y] = meshgrid(0:256/fs:256*(length(Cs(1,:))-1)/fs,38/fs:1/fs:130/fs);

figure;meshc(X,Y,Cs);

axis([1 15 38/fs 130/fs -0.1 0.4])

xlabel('ВремЯ, с'); ylabel('ВремЯ кестра, с'); title('Кепстр');

%

SumCs=sum(Cs);

for ic=1:length(SumCs)

for jc=1:93

Csn(jc,ic)=Cs(jc,ic)/SumCs(ic);

End

End

%

Csnp=(Csn-porog).*floor((sign(Csn-porog)+1)/2);

% построение графика нормированного кепстра выше порога

figure;meshc(X,Y,Csnp);

axis([1 15 38/fs 130/fs -0.1 0.4])

xlabel('ВремЯ, с'); ylabel('ВремЯ кестра, с');

title('Нормированный кепстр выше порога');

%

[Csnpm,indmx]=max(Csnp);

for ic=1:length(SumCs)

if Csnpm(ic)==0

Ton(ic)=0;

Else

Ton(ic)=fs/(indmx(ic)+37);

End

End

for iton=1:length(Ton) % устранение ложных выбросов

if Ton(iton)>290

Ton(iton)=0;

End

End

Последнее изменение этой страницы: 2016-08-28

lectmania.ru. Все права принадлежат авторам данных материалов. В случае нарушения авторского права напишите нам сюда...