Proje  Yürütücüleri : Şennur ÇENESİZ,  Merve ÖZTÜRK

Danışman : Prof.Dr. Sarp ERTÜRK

Üniversite : Kocaeli Üniversitesi

Bölüm : Elektronik ve Haberleşme Mühendisliği

Projenin Amacı :

Msp430 ile ses tanıma sistemi geliştirmektir. Belirli komutlara göre işlem yapmak amacımızdır.

Projenin Özeti :

Ses tanıması, konuşmacı tarafından söylenen sözleri tanımlamak için işitsel sinyallerin analizi işlemidir. Ses tanıma sistemlerinin kullanılması ile insan – bilgisayar iletişimi ve veri girişi açısından, kullanıcının alışkın olduğu en yaygın iletişim aracını, yani doğal konuşma dilini kullanması bilgisayar kullanımını kolaylaştıracaktır.

Hepimizin elimi şıklatınca ışıklar sönsün, açıl susam açıl deyince kapı açılsın, temizle deyince ev temizlensin… gibi hayalleri olmuştur. Günümüzde yapılan çalışmalar sonucu gösteriyor ki bunların gerçekleşmesi sadece hayalde kalmayacaktır. Engelli kardeşlerimizin hizmetinden askeri uygulamalara kadar birçok alanda işe yarayacaktır böyle bir sistemin var olması. Tekerlekli sandalyelerin ses ile kontrol edilmesi, ev içinde işlerin kolaylaştırılması, bilgisayar kullanımının konuşma ile yapılması, sadece belli seslere duyarlı sistemler için kullanılabilir.

Ses tanıma süreci, sesin kaydedilmesi ile baslar, sesin işlenmesi, öz niteliklerinin çıkarılıp kaydedilmesi , karşılaştırma yapılarak sesin tanınması ile son bulur.

Ses tanıma sisteminin çalıştırılma aşamaları olarak:

1. Referansların oluşturulması, oluşturulan referanslardan özellik vektörü çıkarılması ve özellik vektörünün kaydedilmesi ile sistemin eğitilmesi.

2. Algılanması istenilen sözcüğün sisteme söylenerek ses kaydı ve özellik vektörünün çıkarılması.

3. özellik vektörlerinin karşılaştırılması ve sistemin verilen komutu algılaması.

4. Algı sonucu belirlenen işlemlerin yapılması

Aşağıdaki şekilde bir ses tanıma sisteminin nasıl gerçekleşebileceği konusunda bir algoritma göstermektedir.

ozellik-cikartimi

Bu projede böyle bir sistemin geliştirilmesi üzerine çalışılması düşünülmüştür. Çeşitli ses tanıma işlerinin nasıl gerçekleştirildiği araştırılıp ses işleme konusunda bilgi sahibi olmaya çalışılmıştır. Böyle bir sistem bilgisayar ortamında yapıldı. Belirlediğim komutlar üzerinden hangi komutun söylendiğini tespit edip, sonucunda gerekli iş yapılmaktadır. Elde edilen bilgiler mikroişlemci ile gerçekleştirilmeye çalışılacaktır. Bunun için ilk olarak mikroişlemciye ses almak gerekmektedir ve bu konudaki araştırmalarım devam etmektedir.


GÜNCELLEME_1 : ÖZELLİK VEKTÖRLERİNİN ÇIKARTILMASI

Örneklenen ses bilgisi bir bütün olarak islenmek yerine daha etkili islemeye yardımcı olan çerçevelere bölümleme işlemine tabi tutulur. Ve her bölüm yukarıda anlatılan pencereleme işlemine tabi tutulur.

Geliştirilen uygulamada kullanılan Hamming penceresi uygulandığı çerçevenin orta noktalarını iyileştirirken uç noktalarında bilgi kaybına neden olmaktadır. Pencereleme yönteminin bu etkisi pencerelerin üst üste bindirilmesi ile çözülür

Mel frekans kullanılarak her sesin belirgin noktaları bulunur. Bu noktalar bize kepstrum katsayılarını verir.

Öznitelik Çıkarma (Feature Extraction)

Ses sinyalindeki akustik özelliklerin çıkarılmasına öznitelik çıkarma denilir.

MFCC, konuşma tanıma alanında en çok kullanılan öznitelik çıkarma yöntemlerinden birisidir. Öznitelik çıkarma hem kaydolma hem de saptama aşamasında kullanılır ve aşağıdaki aşamalardan oluşur:

1. Çerçeve Bloklama (Frame Blocking)

2. Pencereleme (Windowing)

3. Fourier Transformasyonu (FFT)

4. Mel-Frekansı saptırması (Mel-Frequency Warping)

5. Kepstrum (Cepstrum)

Öznitelik çıkarmanın ana hedefi, ses örneğindeki, konuşmacıyı tanımlayan akustik özelliklerden ödün vermeden yüklü miktardaki veriyi özetlemektir. Bu sayede tanıma işlemi kolaylaşır ve daha verimli olur.

  • Çerçeveleme (Frame Blocking)

Araştırmalar göstermiştir ki ses sinyali karakteristikleri yeteri kadar küçük bir zaman aralığında kararlı kalmaktadır. Bu nedenle ses sinyalleri kısa zaman aralıklarında işlenmektedir. Sinyaller, genellikle 20 ve 100 milisaniye arasında değişen uzunluklarda çerçevelere bölünürler. Çoğu durumda en etkili zaman aralığı 20-30 ms arasındadır. Kısa zaman aralıklarına bölünen ses dalgasından elde edilen bir spektrum örneği şekil 3.6’da görülmektedir. Her çerçeve kendisinden bir önceki çerçevenin belli bir kısmını örter. Örtme yönteminin amacı bir çerçeveden diğerine geçişim yumuşak olmasını sağlamaktır.

  • Pencereleme (Windowing)

İkinci aşama bütün çerçeveleri pencerelemektir. Pencerelemenin amacı çerçeve başında ve sonundaki süreksizlikleri ortadan kaldırmaktır. Bu aşamada en çok kullanılan pencereleme fonksiyonlarından birisi Hamming fonksiyonudur.

  • Dönüşümü (FFT)

Bir sonraki aşama her çerçevede Hızlı Fourier Dönüşümü almaktır. Bu dönüşüm Ayrık Fourier Dönüşümünün hızlı bir şeklidir ve tanım kümesini zaman uzayından frekans uzayına geçirir.

  • Mel Frekansı Saptırması (Mel-Frequency Warping)

Normal bir insan kulağı frekansları doğrusal olmayan bir şekilde algılar.

Araştırmalar göstermiştir ki, ölçüler, 1 kHz e kadar doğrusal, daha yüksek değerlerde ise logaritmiktir. İnsan kulağının frekans yanıtını karakterize eden bu ölçüye Mel-Ölçüsü (Melodi Ölçüsü) de denir. Konuşmacı tanımanın bu aşaması bant geçiren süzgeç (band pass filter) olarak kullanılır. Bir frekansı mel-frekansına çevirmek için aşağıdaki formül kullanılır :

  • Kepstrum

Öznitelik çıkarmanın son aşaması olarak, her çerçeve ters fourier transformasyona uğratılır ve frekans uzayından tekrar zaman uzayına döndürülür.Bu işlemin sonucu olarak Mel-Frekansı Kepstral Katsayıları ( MFCC : Mel – Frequency Cepstral Coefficients ) elde edilir.

Mel frekans cepstral özellikleri için her pencereye sırasıyla şu adımlar uygulanır.

  • Ayrık Fourier Dönüsümü alınır.
  • Ayrık Fourier Dönüsümü katsayıları Mel filtre bankasının genlik frekans cevabına göre ağırlıklandırılır.
  • Logaritmik Enerjileri Hesaplanır.
  • Ayrık Kosinüs Dönüşümü bulunur.

İlk olarak çerçeve uzunluğunun ikinin katlarından bir değere dönüştürülmesi gerekir.

Ayrık zamanlı işaret olan y[n]’lerden (çerçeveler) FFT sonrasında Y[k]’lar elde edilir. Elde edilen frekans spektrumu ile mel ölçekli frekans spektrumu birlikte kullanılarak mel spektrum katsayıları hesaplanır. Mel ölçeği katsayıları filtrelenmiş sonucun toplamıdır

Mel ölçeği katsayıları hesaplandıktan sonra logaritması alınır ve Ayrık Kosinüs Dönüşümü (AKD) uygulanır .

Son olarak sıfırlardan oluşan son kepstral katsayılarından bazılarının atılması gerekir, bu yüzden kepstral katsayıları bulunan çerçeveler liftering işlemine tabi tutulur. Bu işlemden sonra MKK hesaplanmış olur.

Bu projede MFCC katsayısı 12 olarak seçilmiştir. Her çerçeve için elde edilen 12 boyutlu vektörlere (feature vectors: öznitelik vektörleri) Kod Sözcüğü (Codeword) denilir. Bir konuşmacı için bulunan tüm kod sözcüklerinden oluşan kümeye de Kod Kitabı (Codebook) denilir. Kod kitabı o konuşmacıyı niteleyen bir model olarak ta düşünülebilir. Öznitelik çıkarma işleminin sonucunda, her konuşmacı için, daha sonra saptama aşamasında kullanılmak üzere kod kitapları çıkarılır.

Her ses için katsayılar bulunabiliyor. Bir veri tabanı oluşturup tanınması istenen sesin karşılaştırılması işleminde dinamik zaman eşleme yöntemi kullanıldı.

GÜNCELLEME_2 : ÖZELLİK VEKTÖRLERİNİN KARŞILAŞTIRILMASI (ÖVK)

Ses tanımada en önemli sorunlardan birisi aynı sözcüğü farklı kişilerin farklı biçimde söylemesi olduğu kadar aynı kişinin aynı sözcüğü farklı zamanlarda aynı şekilde söylememesidir. Aynı sözcüğü aynı kullanıcı tekrar seslendirdiğinde bile daha önceki seslendirilişlere benzemeyebilir. Sözcüğün uzunluğu doğrusal olmayan bir biçimde genişleme ve daralma gösterir.

Dynamic Time Warping (Dinamik Zaman Eşleştirme) yöntemi sözcüğün ya da fonemin sinyalinin, referans şablonu ile aynı zaman aralığında olabilmesi için zaman ekseninde daralma ya da genişleme yapmayı amaçlar. Sözcük tanıma ya da fonem tanıma için genel olarak DTW yöntemi kullanılmaktadır. DTW yönteminde zaman ekseni doğrusal olmayan bir biçimde genişletilip daraltılarak referans şablonu ile tanınacak olan sesli ifade kesiminin başlangıç ve bitiş zamanları çakıştırılmaya çalışılır. Amaç karşılaştırmanın aynı zaman aralıkları için yapılmasını sağlamaktır.

Zamanda birebir eşleştirme yapıldığında eşleştirmenin başarısı düşük seviyededir. DTW zaman ekseninde eşleştirme yaparken daha başarılı bir eşleştirme için eşleşen yerlerde daralma ve genişleme yapılır.

  • Kayıtlı şablon kelimeler ve tanınacak ses birbirleriyle karşılaştırılacak ve bu eşleşmede en kısa mesafe bize tanıma sonucunu verecektir. Belirli bir sözcüğün seslendirilmesi, kişiden kişiye hatta aynı kişinin farklı zamanlarda seslendirmesi ile zaman içinde farklılık gösterebilmektedir. Aynı sözcüğün seslendirilmesi, bir seslendirmede uzun, bir seslendirmede ise daha kısa zamanda gerçekleştirilebilir. Aynı zamanda, ses sinyalinde kimi fonemler daha uzun, kimileri ise daha kısa yer almaktadır. Dynamic Time Warping algoritması yardımıyla, bu iki seslendirme, zaman içinde yayılarak ya da daraltılarak birbirine yaklaştırılmaya çalışır. Yani bu iki seslendirmenin, zaman olarak örtüştürülmesi işlevi gerçekleştirilir. Bu yaklaşımla, çalışma anında tespit edilen sözcük kesimlemesi, sistemde kayıtlı sözcük şablonları ile seslendirme zamanları örtüştürülerek karşılaştırılması gerçekleştirilebilir. Geliştirilen uygulamada eşleştirilecek iki veri DTW yöntemi kullanılmak üzere, bağıntılar ile mesafe matriksi oluşturularak eşleştirilir.

DTW‟de temel olarak karşılaştıracağımız iki vektörümüz vardır . Bunları R ve T vektörleri olarak gösterebiliriz. DTW‟nin esnekliği nedeniyle R ve T vektörlerinin uzunlukları aynı olmak zorunda değildir.

R ve T vektörleri arasında uyumu bulmak demek bir anlamda yukardaki şekildeki matriste en alt sol noktadan (1,1) en üst sağ noktaya (m,n) en kısa yolu bulmakla eşdeğerdir. En kısa yolu gösteren fonksiyon büküm fonksiyonu olarak adlandırılır. Yolun uzunluğu üzerinden gidilen noktaların toplamıdır. Eğer R ve T vektörleri birbirine benzerse bu yol alt sol noktayla üst sağ noktayı birleştiren köşegen üzerinden uzaklaşmayacaktır. Ancak eğer R ve T birbirinden farklıysa büküm fonksiyonu yol boyunca köşegen çizgisinden uzaklaşacaktır. Her yolu tek tek deneyerek en kısa olanı bulmak bir çözüm yöntemi olabilir ancak bazı kısıtlar ile en kısa yolu bulmak daha verimli olacaktır.

R, T vektörlerinin uzaklık matrisi ve bu matris üzerinde tanımlanmış olan P büküm fonksiyonu

  • Ses tanıma sisteminin çalıştırılma aşamaları olarak:

1. Referansların oluşturulması, oluşturulan referanslardan ÖV çıkarılması ve ÖV kaydedilmesi ile sistemin eğitilmesi.

2. Algılanması istenilen sözcüğün sisteme söylenerek ses kayıdı ve ÖVÇ.

3. ÖVK ve sistemin verilen komutu algılaması.

4. Algı sonucu olarak istenilen işlemin gerçekleştirilmesi.

Aç-kapat-çek komutlarını kullanarak web-cam açıp fotoğraf çekip web-cam i kapatabiliyorum. Bunu ara yüz kullanarak bir program haline çevirdim.

Aşağıdaki ara yüz tasarladığım sistemin kullanımını kolaylaştırmak için geliştirilmiştir:

Burada VERİ TABANI KAYIT adlı butona tıkladığımızda aç-kapat-çek komutları tek tek girilir. Kelimelerin başlangıç ve sonunu kullanıcı enter a basarak belirliyor. Cam BAŞLAT butonu ise veri tabanında girilmiş kelimelerden herhangi biri girildiğinde hangisinin girildiğini bulmaya yarılıyor. Cam BAŞLAT butonuna tıklayıp aç dediğimizde web-cam açılıyor ve kullanıcıyı metin kısmında bilgilendirip yönlendiriyorum.. Çek komutu fotoğrafı çekip soldaki tabloya yerleştiriyor çekilen fotoğrafı. Kapat dendiğinde ise web-cam kapatılıyor. Sağ taraftaki küçük tablolarda da kaydedilen veri tabanı sesleri ve bulunması istenen sesler görülüyor. İmge işle butonuna tıkladığımız zaman aşağıdaki bize hangi komutları kullanacağımızın talimatlarını veriyor. Enter’a basınca konuşmaya başla konuşma bitince tekrar enter’a bas yönlendirme satırı bundan sonra görünüyor böylece programı nasıl kullanacağı gösteriliyor. Veri tabanı daha önceden kaydedilmişken yansıma komutu kullanıldığında şekildeki gibi çekilen resmin yansımasını alıyor. Veri tabanını değiştirmek istediğimizde ister cam aç-kapat-çek komutlarını veri tabanına yeniden girebilir, ister imge veri kayıt butonuna tıklayarak yansıma-siyah beyaz-kaydırma komutlarını veri tabanına yeniden girilebilir.


Bu çalışmayı yaparken çok farklı kaynaklardan yararlandığımı burada bulunan bilgilerin tamamen bana ait olmadığını belirtmemde fayda var. Kaynak eklemem gerekmektedir. Kullandığım kaynakları düzenleyince ekleyeceğimi söylememde fayda var diye düşünüyorum.

GÜNCELLEME_3 : Mikroişlemciye Ses Almak

Ses tanıma projesi kapsamında kullanmaya çalıştığımız msp430fg4618 kiti ile ilgili ulaşabildiğimiz en son durum ve ses verisini alarak bunu hafızaya kaydedip üzerinde bir işlem yapmadan tekrar analog çıkış olarak verilmesi ile ilgili açıklamalar…

Öncelikle temel amaç ses verisinin alınması ve onun sayısal verilere dönüştürülmesi şeklindedir. Bunun için analog olan ses sinyalini zamanda ve genlikte ayrık işarete yani sayısal işarete dönüştürmek için belli aşamalardan geçirmelidir. Bu aşamalar sırasıyla örnekleme, kuantalama (nicemleme) ve kodlama şeklindedir. Örnekleme aşamasında işaretten belli periyotlarda örnekler alınır ve bu sayede zamanda ayrık bir işaret elde edilir. Kuantalama aşamasında ise işaretin örneklerinin alabileceği genlik değerlerine sınırlama getirilmekte böylece zamanda ayrık hale getirdiğimiz analog işaretten genlikte de ayrık işaret elde edilmektedir. İşaret örneklerinin alabileceği değer adedi sınırlandırıldığından, bu değerlerin sayısal sözcükler ile (sayısal kodlar ile) ifade edilebilmesi de mümkün olabilmektedir. Elde edilen zamanda ve genlikte ayrık işaretin sayısal kod sözcüklerine dönüştürülmesi aşaması da kodlama veya darbe modülasyonu (PCM) olarak adlandırılmaktadır.

Kod akışımıza gelirsek öncelikle işlemcimizin low power mod4 ’ te (LPM4) çalışmasını istiyoruz. Bilindiği üzere ama yine de açıklamakta fayda var bu modda işlemcimizin merkezi işlem birimi (CPU) ve bütün clock kaynakları etkisiz durumdadır. Bu sayede normal durumda uykuda olan işlemcimiz sadece kesme durumlarında aktif olacak böylece hem gereksiz yere çalışmayacak hem de bize güç tasarrufu sağlayacaktır.

Bir sonraki aşama olarak mikrofondan alınan sesin 340 Hz kesim frekanslı YGS’den geçirilerek düşük giriş frekansları söndürüyoruz. Çünkü bu kısımlar bizi ilgilendirmiyor. Aktif 4 KHz kesim frekanslı AGS ile DAC çıkışındaki yüksek frekanslı gürültüyü bastırıyoruz. MSP430 dâhili yapısında bulunan OA0 ve OA1 op-ampları ile YGS ve AGS işlemleri gerçekleştiriyoruz. Ayrıca OA0 ile mikrofondan alınan ses yükseltilip ADC’ye verilir. OA2 op-ampı kullanılarak empedans uyumu ve kazanç sağlanır. OA2 çıkışı bir jacka bağlıdır. Böylece analog ses jacktan alınabilmektedir.

ADC12 birimi kullanılarak analog-sayısal dönüşüm gerçekleştiriyoruz. Kayıt programında ise öncelikle mikrofon ön yükseltme görevini yapacak olan OA0 ayarları yapıyoruz. Ses işaretimiz hızlı değişim gösterdiğinden değişim hızı “hızlı” olarak ayarlıyoruz. Bu arada işaretlerin değişiminin hızı, işaretlerin frekans bileşenleri tarafından belirleniyor. Dolayısı ile işaretlerin minimum örnekleme frekanslarının tespiti için de işaretlerin frekans spektrumlarından faydalanılmaktadır.

ADC12 biriminin ayarlarını ise şu şekilde yapıyoruz. Önce modülü aktifleştiriyoruz. ADC saat kaynağı olarak ADC12OSC kullanıyoruz. Böylece ADC12 dâhili osilatörü ile 5 MHz frekansında saat sinyali üretebilmekteyiz. Referans gerilimini ise 2.5V olarak ayarlıyoruz. ADC biriminde örnekleme işlemleri örnekle ve tut şeklinde gerçekleştirilir. İstenilen örnekleme frekansı hassas olarak elde edebiliyoruz. ADC ’nin gelen sesi sürekli örnekleyip dönüştürmesi için dönüşüm modu tek-kanal-tekrarlı mod olarak belirleniyor. Dönüşüm işlemi saat sinyalinin yükselen kenarında gerçekleşir. ADC12 dönüşümü tamamladığında ise ADC12IFG bayrağı “1” olur.

Örnekleme periyodunu timer ile belirliyoruz, compare modunda ise sayıcımızın kaça kadar sayacağını karşılaştırıyor. Dönüşümü yapılan veriler flash a yazılmadan önce flash ı temizlemek iyi olabilir.

Dönüşüm sonuçları DMA kullanılarak işlemciye gerek duyulmadan saklanabilir. ADC12 her dönüşüm sonrasında ADC12IFGx bitini set eder. Bu önemli bilgiyi kullanarak, her dönüşüm sonucunun değeri elde edildiğinde, set edilen bu bayrağı hafızaya yazma işlemlerinin başlamasına tetikleyici olarak ayarlıyoruz. DMA için kaynak adresi belirlenir. Burada da zaten kaynak adresimizin, bizim ADC12 nin dönüşüm sonucunun tutulduğu ADC12MEM0 olması gerektiğini açıkça görebiliriz aslında. Hedef adresimiz belirlenir. Hedef adresimiz için de FLASH ın başlangıç adresini bildiriyoruz. Hedefimiz ve kaynağımızın adresleri belli oldu ama her seferinde ne kadarlık bir bilgi transfer edebileceğimizi, bizim bildirmemiz lazım. Bunun için transfer genişliğini de DMA için belirlemek gerekmektedir.

Biz hedef adresinin artış durumunu belirteceğiz, hedef adresinin birer birer artarak değişmesi için gerekli ayarlama yapılıyor. Ve son olarak DMA ya transfer işlemi gerçekleştiğinde oluşacak kesmemiz için de DMAIE bizim interrupt enable biti kullanılır.

FLASH hafızasını kontrol için de FCTL kontrolcüsünü kullanıyoruz. BUSY=1 olduğu zaman FCTLx  okuma yapıyor, okuma yapılırken de bozulma olmuyor. Bu arada önemli bir ek bilgi: Flash hafızaya veriler bayt ya da word olarak yazılabilir ancak veri silme işlemi segmentler halinde yapılabilmektedir.

Dönüşümü bitirdik.  Şimdi Low power mod gereği az güç tüketimi için tekrar uyku moduna giriyor.