500 likes | 880 Views
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
E N D
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
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
Uygulama function [ 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 sayisi window = window_ms*fs/1000; % sinyal uzunlugu kontrolu speech = 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şlemidir denebilir
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/A(z) kökleri poles = roots(lpc_coef);zplane([],poles);
Uygulama – LSF % P(z) katsayilarip = [1,lpc_coef(2:end) + fliplr(lpc_coef(2:end)),1];poles_P = roots(p); zplane([],poles_P); hold; % Q(z) katsayilari q = [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 durumlar y: izlenebilir çıktılar a: 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 matrixDurumdan duruma geçme olasılığı • Π = πi : initial probabilitiesBaşlangıç durumu olasılıkları • B = [bjot] = [bjk] : observation probability matrixj durumunda k çıktısının olma olasılığı
HMM - aij = (# of states) X (# of states)
HMM - πi • Durum sayısı uzunluğunda bir vektör
HMM - bjk (# of states) X (# of outputs) • Durum sayısı X Görülebilecek çıktı sayısı
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
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)
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
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
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
HMM – Örnek • 3 vazo, R G B toplar • O = RGGBRB П(j) = {0.8, 0.2, 0.0}
HMM – Örnek function [ 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); end end
HMM – Örnek function [ 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); end end
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)
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)
HMM – Training Baum Welch • Hesaplanan değerlerleA, B ve П hesaplanır ve yerlerine konup işlem tekrar gerçekleştirilir