Sayısal Tekniklerle Ses Tanıma

Başlatan TeamTurk, 29 Haziran 2006, 22:19:34

TeamTurk

arkadaşlar öncelikle merhaba herkese..

benim yapmak istediğim bir projem var fakat bir konuda yardım almam gerekli..

bilirsiniz çoğu cep telefonun ses komut verip birilerini araya biliyorsunuz ( örneğin ev diyip evinizi arıyorsunuz ) .. bende böyle bir proje düşünüyorum..

projem şu : matrix led sistemli devreye bir mikrofon koyup kullanıcının söylediği harfleri algılaması ve yazmasını yapmaya düşünüyorum.. takıldğım nokta ise sesi ayırd etme.. ben şöyle düşünüyorum ben mesela "a" dediğimde mikrofondan a karşılık bir gerilim çıkacak atıyorum 3.24 v .. bunu bir ad çeviri kullanıp pice yazdığım program sayesinde kontrol etmeyi düşünüyorum.. sizce aklınıza başka bir çözüm geliyor mu ?? yada düşündüğüm çözüm çalışır mı???



yorumlarınız için şimdiden teşekkür ederim..

SpeedyX

Anahtar kelime: Voice Direct 364

Bir işlemci ile kendim yapacağım diyorsanız biraz zor, şöyle ki; sesi kayıt ederken iyi bir çözünürlükte kayıt etmelisiniz ve karşılaştırma yapaken tam o sayıyı değilde sabit bir töleransa göre bir sayı aralığını kontrol etmelisiniz.
(Mesela sayı=60, eğer alınan byte 50-70 aralığında ise şeklinde)
Öncelikle sesi eeproma değilde ram e kayıt edip (hızlı olması için), sonra yavaş yavaş eeproma almak gerekiyor. Yazma süresi 50ms olan bir eepromda 3sn lik bir sesin kaç byte kaplayacağını ve bunu eeproma kayıt etmenin nekadar uzun süreceğinide hatırlatmaya gerek yok sanırım.

polilies

merhaba arkadaşlar, aslında benimde buna benzer bir projem var ve ileryen dönemlerde üzerine yoğunlaşacağım henüz araştırma aşmasındayım..ben ses ayırdı ile çalışan bir kilit yapmak istiyorum..yalnız kişiye ait ses analizinin yapilması nasıl mümkün olmakta onu henüz tam anlamış değilim..FFT sisteminin bununla bir ilgisi varmı?  bilgilendirirseniz cok sevinirim..

arges

evet, FFT ile yapabilirsin. Soyle anlatayim;
Belli uzunlukta ( 2nin katlari olacak 256,512,1024,...vb) sesi alip FFT ile frekanlarini cikaracaksin.
512 yeterli oluyor.

Sesleri 44100 Hz ile kayit yaptigini varsayalim. Bu kayitta ornekleyebilecegin en yuksek frekans 22050 Hz dir. Problem yok.
birinci Frekans degeri= 44100Khz*1/512 = 86 Hz, ikincisi 172Hz, ucuncusu 258Hz, vb..

FFT den elde ettigin frekanslarin hepsini kullanmayacaksin, insan sesinin araligini alacaksin.

İNSAN SESİ
Soprano............240-1152
Alto....................160-768
Tenor..................128-480
Baritone................95-384
Bass....................80-320

Bu tabloya gore 80Hz-12Khz yeterli.

80 Hz-12Khz arasi  143 deger vardir (yukarida frekans degerlerini hesaplamistik. 143 e kadar devam edersek 143. frekans degeri 12298Hz buluruz). bu degerler icin Feed Forward Neural Network kuracaksin.
Neural network icin hidden layer katmani 143 adet, output layer katmani 29 adet (alfabedeki sesler) olacak. Daha sonra herbir sesi ogreteceksin.
ogrettikten sonra senin sesini taniyacak ve "speech to text" olarak cikis verecek.  textte "ev" yaziyorsa evi arayacaksin. "iş" yaziyorsa işi...
Biraz teorik bir konu ancak baska yolu yok.  Hele ki AD cevirimi ile yapmak olanaksiz. eger olursa bu sekilde yapan tarihte ilk kisi olursun :).
Tabii bu is icin dsPIC kacinilmaz bir secenek (dsPIC te hic denemedim ARM icin HLA koduyla yazmistim uzun zaman once).
Uzun uzun anlatmam burada mumkun degil ancak butun ipuclari yazimda mevcut. kolay gelsin.



http://www.brains-n-brawn.com/default.aspx?vDir=noreco
The whole is equal to the sum of parts(Euclid)... The whole is greater than the sum of its parts(Max Wertheimer)...

z

#4
Alıntı YapHele ki AD cevirimi ile yapmak olanaksiz. eger olursa bu sekilde yapan tarihte ilk kisi olursun .

FFT ile kelimeye ait frekans bileşenleri  romda çok  az yer kapladığı ve karşılaştırma işlemi daha az zaman aldığı için tercih edilir.

Ancak bahsi geçen yontem olanaksız değil. Örneklenmiş kelimeler romda büyük yer kaplayacağı ve karşılaştırma işlemi hızlı işlem gerektirdiği için tercih edilmez.

Belli bir pencere aralığında mikrofandan alınan ses örnekleri romdaki mevcut patern ile karşılaştırılır bunun için convolution, cross-correlation gibi tekniklerden yararlanılır.

Burada amaç ADC den gelen her bir örneğin romdaki örneklerle bire bir eşleşip eşleşmediğine bakmak değil bu pencere aralığında alınan örnek grubunun romdaki  gruplara ne kadar daha çok benzediğine bakmaktır.

Belli bir eşiği geçen benzerlik durumunda ADC den alınan örnekler romdakine bayağı benziyor o halde konuşan kişi bu kelimeyi söylemiş olabilir sonucuna ulaşlır.

Zaten bu yöntem FFT ile aynı mantığa sahip. Birisinde frekans domeninde, diğerinde zaman domeninde işlem yapılıyor.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

arges

Convolution ile FFT aynı mantığa sahip degildir. Birisi zaman domeninde digeri frekans domeninde calisir. Convolution da zaman onemlidir. Radarla ucagi kestirebilirsin ancak sesteki patternleri bulamazsin. Cunku zamana baglidir. ben a sesini 1 sn uzatarak soylerim, 15 dk sonra 3 sn uzatarak soylerim sen bu a'lari ayni paternmiş gibi yakalayamazsin. Frekans domenine gecersen ancak zamandan bagimsiz calisabilirsin.

"Burada amaç ADC den gelen her bir örneğin romdaki örneklerle bire bir eşleşip eşleşmediğine bakmak değil bu pencere aralığında alınan  örnek grubunun romdaki  gruplara ne kadar daha çok benzediğine bakmaktır.
Belli bir eşiği geçen benzerlik durumunda ADC den alınan örnekler romdakine bayağı benziyor o halde konuşan kişi bu kelimeyi söylemiş olabilir sonucuna ulaşlır."
demissin. Bu genlik icin dogru olabilir. ancak zaman farkini benzerlikten yakalayamazsin.

Sende convolution'la yada cross-correlation'la speech recog yaparsan (hadi soyle birde esneklik taniyalim. sadece kendi sesin olsun)  tarihe gecersin .
The whole is equal to the sum of parts(Euclid)... The whole is greater than the sum of its parts(Max Wertheimer)...

z

Alıntı YapConvolution ile FFT aynı mantığa sahip değildir. Birisi zaman domeninde digeri frekans domeninde calisir. Convolution da zaman onemlidir. Radarla ucagi kestirebilirsin ancak sesteki patternleri bulamazsin. Cunku zamana baglidir. ben a sesini 1 sn uzatarak soylerim, 15 dk sonra 3 sn uzatarak soylerim sen bu a'lari ayni paternmiş gibi yakalayamazsin. Frekans domenine gecersen ancak zamandan bagimsiz calisabilirsin.

1 sn lik pencere icine alinmis a sesini 3 sn lik pencereye sikismis a sesinde elbette yakalarsin.
Cunku araligi 3 sn degil 1 sn alip bakacaksin.

Daha once yazdigim gibi fft de roma sadece frekans ve genlik degerleri yazilir. Zaman domeninde tum ornekleri yazmak fazla yer kaplar.

Fakat 0...9 rakam, sil, gir gibi sesli komutlar icin kabul edilebilir bir tekniktir.

Eger sifir olarak kaydedilen sesi siiiiifiiiir diye okursan elbette fft, konvolusyona kiyasla daha dogru sonuc verir. Fakat bu sinirlama imkansiz gibi bir iddiada bulunmayi gerektirmez.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

arges


Alıntı YapEger sifir olarak kaydedilen sesi siiiiifiiiir diye okursan elbette fft, konvolusyona kiyasla daha dogru sonuc verir. Fakat bu sinirlama imkansiz gibi bir iddiada bulunmayi gerektirmez.
iddiada bulunmuyorum. imkansiz diyorum. resim nasil eklenir bilmiyorum. bilseydim sifir ve bir nasil gorunuyor resimli olarak buraya koyardim.
sifir yerine siifiiiir demenize de gerek yok. 44Khz ornekleme ile 100ms fark epey fazla olur...

Neyse uzatmanin anlami yok. Siz convolution bolumunu yapin sesi  okuma ve degerlendirme bolumunu ben tamamlarim. Bilime de siteye de katkimiz olur boylece. :)
The whole is equal to the sum of parts(Euclid)... The whole is greater than the sum of its parts(Max Wertheimer)...

z

#8
Bahsettiginiz sorunun cozumu burda ele alinmis. 

http://www.scipub.org/fulltext/si/jcs_si_84-88.pdf

Daha baska dokumanlarda ekleyecegim.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

arges

Gonderdigin makale de sf-85 solt alt kosede;
Alıntı YapThe comparison of the signals in the time domain is
not suitable for speech signals, because of the statistical
behaviour of these signals. 

baska bisey demiyorum. uStelik bu algoritma frekans specktrumunda calisiyor. Convolution bunun neresinde.

Baska makaleler bekliyorum. :)

The whole is equal to the sum of parts(Euclid)... The whole is greater than the sum of its parts(Max Wertheimer)...

z

http://research.nokia.com/files/Speech%20Recognition%20with%20Hidden%20Markov%20Models%20in%20Visual%20Communication.pdf

Sayfa:19-20 de zaman domeninde cross correlation ile yapilamayacagini iddia etmiyorlar.

--------------------------------------------

Ucuz islemcilerle 10 kadar sesli komut taniyan proje zamaninda  circuitcellar da verilmis.



Buradaki cip ucuz 16 serisi PIC ailesine yakin islem gucu ve kapasitede.

Linki asagida.

http://www.circuitcellar.com/pastissues/articles/stewart91/text.htm

Ancak source kodu goremedim.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ahmet2004


z

#12
Kaynak kodlarin bulunmasi iyi oldu.

Verdigim linkte calisma prensibine kisaca deginilmis. Denetleyici ADC ye sahip değil. Sesin sifir gecislerinden yararlanarak peryodu olcerek frekansi buluyor. Burada sesde sifir gecisine neden olamayan harmonikler tamamen gozardi ediliyor.

Ses bilesenlerinin 2 frekansdan hangisine yakin oldugunu tespit edip cerceve icine giren sesin 2 frekans cinsinden bir paterni elde ediliyor ve harici E^2 ye kaydedilmis paternle sonucu karsilastiriyor.

Ideal cozum oldugu soylenemez ancak devrenin toplam maliyeti 10 lirayi gecmedigi icin rahatlikla denenebilir.

Sonucta duzenek sadece iki frekansa baktigi icin Yes no gibi kisa kelimeler yerine biraz daha uzun kelimeler kullanilmasi gerektigi soyleniyor. Ornegin yes please gibi.


Bana e^st de diyebilirsiniz.   www.cncdesigner.com

arges

Her ikisi de makale degil.

Alıntı Yaphttp://research.nokia.com/files/Speech%20Recognition%20with%20Hidden%20Markov%20Models%20in%20Visual%20Communication.pdf

Bu calismada (makale degil tez calismasi) zaman domeninde enerjiye bakarak sesin ancak sesli harf mi sessiz harf mi oldugunu bulabiliyor.
"a" sesini "e" sesinden ayiramiyor. Ancak daha sonra isin en dogrusunun spectral analiz oldugunu anliyor ve spectral analizde karar kiliyor.

Alıntı Yaphttp://www.circuitcellar.com/pastissues/articles/stewart91/text.htm

Bu calismada ise (homework dersek daha iyi olur.) ses high pass filter den gecirilerek kuvvetlendiriliyor ve ses +Vcc veya -Vcc ye clip ediliyor. Sag kanaldan alcak frekanslar sol kanaldan yuksek frekanslar elde ediliyor. Elde edilen kare dalganin darbe genisligine bakarak bir siniflandirma yapmaya calisiyor. Hata yapmamak icin tek harf veya tek hece olacak sekilde kirpiyor. bir kelimenin ilk harfine bakabiliyor. Pek de speech recog tanimina uymuyor.

Simdi bunlara bakarak bu is olur diyorsak  TeamTurk un AD kanalindan yapmaya calismasina da olur demek zorundayiz.
o zaman Convolution, cross-corelation gibi (cross-corelation bir algoritma degil bir karsilastirma yontemdir ayrica. Algoritmanin sonunda benzerliklere bakmak icin kullanilir. Baslibasina bir siniflandirma algoritmasi degildir. Ilk makalede iyice incelemeden onun icin yolladiniz oysa orada spectral convolution yapip cross-corelation ile benzerlik arastiriyordu.)
yada FFT gibi yontemlerle ugrasmayalim.

Eger burada birilerine yol gostereceksek birakalim uygulama yapanlar, isi deneyenler ve tecrubesi olanlar tecrubelerini anlatsin. Bildik iki uc yontemi (hayatinda hic uygulamamis birisi) olabilirmis gibi anlatmasin.

Ancak bu gibi tartismalarda ise yaramiyor degil biraz daha devam edersek konuyu okuyan herkes dogru yolu bulacak.

Alıntı YaphFakat 0...9 rakam, sil, gir gibi sesli komutlar icin kabul edilebilir bir tekniktir.

Hadi bakalim, soylediginiz komutlari taniyabilecek (hadi fazla sıkmayalim sadece sil ve gir'i ayirsin) baska gercekci makaleler bekliyorum :)

The whole is equal to the sum of parts(Euclid)... The whole is greater than the sum of its parts(Max Wertheimer)...

z

Sizi makalelere bogacagimi degil dokumanlar oldukca ekleyecegimi soylemistim.

Kulagi tirmalayan imkansiz kelimesiyle kurdugunuz  cumlenizden yola cikarak dahil oldugum bu tartismaya girmekle hata mi ettim?

Firsatim olursa size bir yada iki kelimeyi zaman domenindeki islemlerle algilayacak PC yazilimi sunmayi gorev bilirim.




Bana e^st de diyebilirsiniz.   www.cncdesigner.com