Upload
emory
View
119
Download
1
Embed Size (px)
DESCRIPTION
Konuşma İşleme. Konuşma dosyaları üzerinde yapılabilecekler hakkında bir çalışma. Giriş. Rasgele istatistik sinyaller üzerinde yapılan işlemlerin konuşma sinyaline uygulanması Konuşma (speech), ses (audio) değildir f max(konuşma) = 3.4 kHz f max(ses) = 20 kHz - PowerPoint PPT Presentation
Citation preview
Konuşma İşleme
Konuşma dosyaları üzerinde yapılabilecekler hakkında bir çalışma
Giriş
Rasgele istatistik sinyaller üzerinde yapılan işlemlerin konuşma sinyaline uygulanması
Konuşma (speech), ses (audio) değildir fmax(konuşma) = 3.4 kHz fmax(ses) = 20 kHz Sinyal, hemen her zaman parçalara ayrılır
ve işlemler stationary kabul edilen bu parçalar üzerinde yapılır
Uygulamalar
Bu doküman boyunca yapılacak uygulamalar aşağıdaki konuşma dosyası üzerinde olacaktır
konusma.wav
Voiced vs. Unvoiced
Konuşma, voiced (ötümlü) ve unvoiced (ötümsüz) olarak ikiye ayrılır
Voiced, yüksek seslere; unvoiced, kısık seslere ya da gürültüye karşılık gelir
Stationary kabul edilen parçaların voiced/unvoiced olarak sınıflandırılması yapılacak diğer işlemler için önemlidir
Sınıflandırma: Sinyalin enerjisi Normalize otokorelasyon katsayıları Sıfır geçişleri
V/UV Classification – Enerji metodu
Sinyalin toplam enerjisi belli bir threshold değerinden yüksekse voiced olur.
Burdaki m, alınan parçadaki sample sayısıdır
ThixEm
im
1
0
2
Uygulama
Dokümanın en başında verilen konuşma dosyası Matlab’ta açılacak Parçalara bölünecek Tüm parçaların enerjilerinin bir
değerden yüksek olup olmadığına bakılacak
İşlem tekrar kullanılabilir olması için bir fonksiyon olarak hazırlanacak
Uygulamafunction [ samples,vuv ] = vuv_energy( file_name )%Verilen ses dosyasini voiced / unvoiced olarak siniflandirir% Fonksiyon oncelikle dosyayi acar ve 20 ms lik % parcalara boler. Eger dosya 20 ms olarak tam % bolunemiyorsa son 20 ms den kisa olan bolum % kullanilmaz. % % Daha sonra bolunen parcalarin enerjileri hesaplanir% enerjisi 1.5 ten az olan parcalar unvoiced kabul edilir
[speech,fs,nbits] = wavread(file_name);window_ms = 20;threshold = 1.5;
% alinacak parcalarin sample sayisiwindow = window_ms*fs/1000;% sinyal uzunlugu kontroluspeech = speech(1:(length(speech) - mod(length(speech),window)),1);samples = reshape(speech,window,length(speech)/window);
energies = sqrt(sum(samples.*samples))';vuv = energies > threshold;
Uygulama•Konuşma sinyalinin uzunluğu 500ms•20ms lik toplam 25 parça•Kırmızı ile gösterilen voiced / unvoiced data noktaları kendinden sonra gelen 20ms konuşma parçasının voiced ya da unvoiced olduğunu gösterir
LPC Analizi
Konuyla ilgili anahtar kelimeler Linear Predictive Coding Linear Regression Time series analysis All-pole filtering
Sistem kendi katsayılarını değiştirir Giriş sinyaline göre sistem değişir Sistem sinyali, önceki değerleriyle
hesaplamaya çalışır
LPC Sistem
s[n] : işlenen sinyal e[n] : hata sinyali ai : LPC katsayıları Sistem, katsayılarını e[n]’nin
enerjisini minimum yapacak şekilde ayarlar
Uygulama - LPC
Görülebilir sonuçlar elde edebilmek için voiced bir parça üzerinde LPC analiz ve sentez işlemleri yapılacak
LPC sentez filtresinin genlik tepkesinin sinyalin genlik spektrumu ile olan ilgisi incelenecek.
V/UV sınıflandırma için vuv_energy kullanılacak
Uygulama - LPC
Bulunan voiced parçalardan ikincisi kullanılacak vuv_energy’nin voiced olarak belirlediği
ilk parçanın bir kısmı unvoiced olabilir Matlab LPC katsayılarını direk verir
ama e[n] i direk vermez
Uygulama - LPC
function [ sample, lpc_coef, e ] = lpc_a( file_name, predictor )%Basit lpc analizi% Verilen dosya icindeki voiced parcalar bulunur% Ikinci voiced parcanin lpc katsayilari ve bu lpc analizinin% hatasi hesaplanir
[samples,vuv] = vuv_energy(file_name);
% ikinci voiced pencere seçilirfor i = 1:length(vuv) if i ~= 1 & vuv(i - 1) == 1 & vuv(i) == 1 sample = samples(1:length(samples),i); break endend%%%%
lpc_coef = lpc(sample,predictor);e = filter(lpc_coef, 1, sample);
Uygulama - LPC
LPC katsayıları: 1.0000 -1.2920 0.2980 -0.1749 0.5167 0.1699 -0.4452 -0.0797 0.1563 0.0553 0.0033
Uygulama - LPC
Zaman bölgesi sinyallere bakarak İletilmesi gereken veri miktarı ciddi
miktarda azalmıştır LPC Analiz işlemi aynı zamanda bir
sıkıştırma işlemidirdenebilir
Uygulama - LPC
Frekans bölgesi analiz%sinyal parcasinin frekans spektrumusample_f = fft(sample,1024);%1/A(z) filtresinin durtu tepkesiir = filter(1,lpc_coef,[1 zeros(1:1023,1)]);%1/A(z) filtresinin frekans tepkesifr = fft(ir);%genlik spektrumunun yarisi cizdirilir cunku diger yarisi%cizilen yarinin simetrigidirsemilogy(0:1/512:1-1/512,abs(sample_f(1:512)))hold;%genlik tepkesinin, sinyalin spekturumuna oturabilmesi%icin bir miktar yukseltilirplot(0:1/512:1-1/512,3*abs(fr(1:512)))
Uygulama - LPC
Mavi grafik sinyalin genlik spektrumu
Kırmızı grafik LPC Sentez (1/A(z)) filtresinin genlik tepkesi
1/A(z) filtresinin genlik tepkesinin tepe noktaları sinyalin formantlarıdır
LSF – LSP(Line Spectral Frequencies – Pairs)
LPC katsayıları özel bir işlemle LSF’lere dönüştürülür
Bu sayede elde edilen LSP’ler 0-1 ya da 0-pi aralığında Pozitif Küçükten büyüğe ya da büyükten
küçüğe sıralı İletimde kolaylık sağlar
LSF – LSP
P(z) ve Q(z) polinomlarının kökleri LSF’leri verir Bu kökler
Birim çember üzerinde Interlaced (Birbiri içine girmiş)
Buna karşılık 1/A(z) filtresinin kökleri Fazlasıyla dağınık Eğer otokorelasyon metoduyla hesaplanmışsa
hepsi birim çember içinde
)()()(
)()()(1)1(
1)1(
zAzzAzQ
zAzzAzPp
p
1/A(z) kökleri
poles = roots(lpc_coef);zplane([],poles);
Uygulama – LSF
1110110
292
1101
110
92
101
111010
22
11
1010
221
)1(1010
22
11
1)1(
...1)(
......1)(
...1...1)(
)()()(
zzaazaazaazP
zazazazzazazazP
zazazazzazazazP
zAzzAzPp
p
1110110
292
1101
110
92
101
111010
22
11
1010
221
)1(1010
22
11
1)1(
...1)(
......1)(
...1...1)(
)()()(
zzaazaazaazQ
zazazazzazazazQ
zazazazzazazazQ
zAzzAzQp
p
% P(z) katsayilarip = [1,lpc_coef(2:end) + fliplr(lpc_coef(2:end)),1];poles_P = roots(p);zplane([],poles_P);hold;% Q(z) katsayilariq = [1,lpc_coef(2:end) - fliplr(lpc_coef(2:end)),-1];poles_Q = roots(q);zplane([],poles_Q);
Uygulama – LSF
0 ve 1 de işe yaramayan birer kök var
Bunlardan kurtulmak için P(z) ve Q(z) polinomlarını modifiye etmek gerekir
Uygulama – LSF
0 ve 1 deki kökler çizdirme esnasında kullanılmadı
LSF – LSP
P(z) polinomunun köklerinin gösterdiği frekanslar formantlardır
Q(z) polinomunun kökleri ise sinyalin genlik spektrumunun zarfının çizilmesini sağlar
Uygulama – LSF
Sinyalin kendi genlik spektrumunun çizilmesi grafiği fazla karmaşıklaştırdığından sadece zarfı çizildi
Hidden Markov Model
Deterministik bir olayı stokastik bir şekilde modelleme
Modellenecek sistemin bir Markov chain olduğunu kabul ederek izlenebilir parametrelerden gizli parametrelerin hesaplanması
HMM - Örnek
x: gizli durumlary: izlenebilir çıktılara: geçiş olasılıklarıb: çıktı olasılıkları
http://en.wikipedia.org/wiki/Image:MarkovModel.png
HMMKullanım Alanları
Pattern Recognition Bioinformatics Hand-written Word Recognition Adaptive Power Management Speech Recognition …
HMM - Ergodic
Durumların her birinden tüm durumlara geçiş mümkün
HMM - LTR
Durum geçişleri soldan sağa yönde, ters yönde geçiş yok
HMM
Markov Chain A = [aij] : state transition matrix
Durumdan duruma geçme olasılığı Π = πi : initial probabilities
Başlangıç durumu olasılıkları B = [bjot] = [bjk] : observation
probability matrixj durumunda k çıktısının olma olasılığı
HMM - aij
0.3 0.5 0.2 0 0 00 0.4 0.3 0.3 0 00 0 0.4 0.2 0.4 00 0 0 0.7 0.2 0.10 0 0 0 0.5 0.50 0 0 0 0 1.0
a11 a12 a13 a14 a15 a16
a21 a22 a23 a24 a25 a26
a31 a32 a33 a34 a35 a36
a41 a42 a43 a44 a45 a46
a51 a52 a53 a54 a55 a56
a61 a62 a63 a64 a65 a66
=
(# of states) X (# of states)
HMM - πi
0.5 0.5 0 0 0 0
Durum sayısı uzunluğunda bir vektör
π1 π2 π3 π4 π5 π6
HMM - bjk
b11 b21 b31 b41 b51 b61
b12 b22 b32 b42 b52 b62
… … … … … …
b1M b2M b3M b4M b5M b6M
Durum sayısı X Görülebilecek çıktı sayısı
(# of states) X (# of outputs)
HMM - Örnek
6 kutu içinde çeşitli renk toplar var 10 farklı renk var her kutuda her
renkten eşit olmayan sayıda top var Başlangıç kutusunu belirlemek için
yazı-tura atılıyor (Yazı :1 Tura: 2) 50 kere
Zar atılıp bir kutu seçiliyor Seçilen kutudan rasgele bir top alınıyor Rengi kaydedilip top yerine konuyor
HMM
Çıktılara bakarak topların hangi kutulardan çekildiğinin bulunması
Her bir çıktı için olasılıkların hesaplanması
Baum-Welch gibi bir beklenti artırma (expectation maximization) algoritması kullanımı
HMM – Baum Welch
Bir HMM’in parametrelerinin (A,B) maximum-likelihood tahminleri maximum a posteriori tahminleri
HMM: ise Baum-Welch, verilen çıktıların olma
olasılığını maksimize eden HMM’i bulur
),,( BA
)|(max* OP
HMM – Baum Welch
Algoritma verilen başlangıç olasılığı ile başlatılır
t zamanında j durumunda olan,O1, O2, … Ot çıktı sırasının olasılığını hesaplar (forward probabilities)
1,...,2,1),(.)()(
)(}{)(,...,2,1}, | t at time j state,,...,,Pr{)(
11
1
11
21
TtObaij
ObjjNjMOOOj
tj
N
iijtt
j
tt
HMM – Baum Welch
Çıktı sırasının oluşmasının olasılığı bu değerlerin toplanmasıyla bulunabilir
Bu olasılığa Baum-Welch olasılığı denir O çıktısının izlenme olasılığı, mümkün tüm
durum sıraları üzerinden toplanmış olur
N
jt
BW jP1
)(
HMM – Viterbi
Çıktıyı oluşturmuş olabilecek maksimum olasılıklı durum sırasını verir
Baum-Welch toplama işlemi yaparken Viterbi maksimumunu alır
PV genelde PBW den küçüktür PBW nin PV ye eşit olması sadece tek bir
durum sırası mümkün olduğunda olur
)(
1,...,2,1),(.)()( 11
jMaxP
TtObajMaxj
tV
tjijtt
HMM – Viterbi
En olası durum sırasını hesaplamak da mümkündür
t zamanında s1 durumundayken t-1 zamanındaki en olası durumu kaydetmekle yapılır
Bu değerler tüm j ler için hesaplandıktan sonra en olası durum sırası data üzerinde geri giderek bulunur
)(.)(Argmax)( 11 tjijtt Obajj
HMM – Örnek
3 vazo, R G B toplar O = RGGBRB
b1(R) = 0.3 b2(R) = 0.1 b3(R) = 0.4b1(G) = 0.5 b2(G) = 0.4 b3(R) = 0.1b1(B) = 0.2 b2(B) = 0.5 b3(R) = 0.5
П(j) = {0.8, 0.2, 0.0}
HMM – Örnekfunction [ alfa, phi, mu ] = hmm( A, B, I, O )
alfa = zeros(length(O),length(I));for i = 1:length(O) for j = 1:length(I) if i == 1 alfa(1,j) = I(j)*B(1,j); continue end for k = 1:length(I) alfa(i,j) = alfa(i,j) + alfa(i-1,k)*A(k,j); end alfa(i,j) = alfa(i,j)* B(O(i),j); endend
HMM – Örnek)( jt
1 2 31 0.240000000 0.020000000 0.0000000002 0.036000000 0.070400000 0.0012000003 0.005400000 0.021344000 0.0043440004 0.000324000 0.006158800 0.0085752005 0.000029160 0.000269030 0.0049082006 0.000001750 0.000064012 0.002534800
HMM – Örnekfunction [ alfa, phi, mu ] = hmm( A, B, I, O )
phi = zeros(length(O),length(I));mu = zeros(length(O),length(I));for i = 1:length(O) for j = 1:length(I) if i == 1 phi(1,j) = I(j)*B(1,j); continue end for k = 1:length(I) val = phi(i-1,k)*A(k,j); if val > phi(i,j) phi(i,j) = val; mu(i,j) = k; end end phi(i,j) = phi(i,j)* B(O(i),j); endend
HMM – Örnek
)( jt
1 2 31 0.240000000 0.020000000 0.0000000002 0.036000000 0.067200000 0.0012000003 0.005400000 0.010752000 0.0040320004 0.000324000 0.002150400 0.0032256005 0.000029160 0.000086016 0.0012902006 0.000001750 0.000017203 0.000645120
)( jt
1 2 31 0 0 02 1 1 23 1 2 24 1 2 25 1 2 36 1 2 3
HMM – Training Baum Welch
Algoritma rasgele bir değerle başlatılır t zamanında j durumunda olacak,
O1, O2, … Ot çıktı sırasının olasılığını hesaplar (forward probabilities)
1,...,2,1),(.)()(
)(}{)(,...,2,1}, | t at time j state,,...,,Pr{)(
11
1
11
21
TtObaij
ObjjNjMOOOj
tj
N
iijtt
j
tt
HMM – Training Baum Welch
t zamanında j durumunda olan modelin,Ot+1, … OT çıktı sırasıyla bitme olasılığını hesaplar (backward probabilities)
)()()(
1)(
11
1
tjij
N
jtt
T
Obajj
j
HMM – Training Baum Welch
N
i
N
jtjjiji
tjjijiij
ij
N
jjj
jjt
Obtat
Obtatt
Ot
tt
ttOj
1 11
1
1
)()1()(
)()1()()(
},|1j@t state i@t, statePr{)(
)()(
)()(},|j@t statePr{)(
HMM – Training Baum Welch
Hesaplanan değerlerleA, B ve П hesaplanır ve yerlerine konup işlem tekrar gerçekleştirilir
T
ti
T
tioO
i
T
ti
T
tij
ij
ii
t
tkb
t
ta
kt
1
1,
1
1
1
1
)(
)()(
)(
)(
)1(