Forum: D Programlama Dili RSS
Ses için temel frekansı bulma YINS-FFT-DLANG
kerdemdemir #1
Üye Eyl 2013 tarihinden beri · 123 mesaj · Konum: Danimarka
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Ses için temel frekansı bulma YINS-FFT-DLANG
Merhaba arkadaşlar;

Kulağımıza ulaşan ses çeşitli frekanslardan oluşur. Konuşma veya müzik aletleri tarafından oluşturulan seslerde genelde temel bir frekans olur ve ortaya çıkan ses bu temel frekansın harmoniclerinden oluşur .

Harmonikleri biraz daha anlamak için aşağıdaki video'ya bakabiliriz.
https://auditoryneuroscience.com/acoustics/modes_of_vibrat…

Örneğin sadece "A" dediğimde eğer benim temel frekansım eğer "150" ise sizin kulağınıza ulaşan ses dalgasında 150-300-450-600... frekanslarının güçü daha yüksek olucaktır.

İnsanda temel frekansın nasıl oluştuğu görmek isterseniz:
https://auditoryneuroscience.com/vocal_folds

Ben temel frekansı, kendi tecrübelerimle en iyi sonuçlar elde ettiğim YINS-FFT algoritmasını kullanarak buldum. Ve aynı .vaw dosyası için sonuçları ses işlemede çok önemli bir araç olan "Praat"'ın sonuçları ile karşılaştım. Sonuçlar neredeyse birebir aynı.
YINS-FFT  makalesinin linki:
http://recherche.ircam.fr/equipes/pcm/cheveign/pss/2002_JA…

Performans'ı test etmedim fakat muadil implementasyonlardan çok daha iyi olması gerektiği düşünüyorum. Bunun sebebi kritik yerlerde dinamik programlama methodu kullanmam ve difference fonksiyonunu FFT ile implemente etmem.

Link : https://github.com/kerdemdemir/YINS-FFT-DLANG

Uzun lafın kısası:

-Temel frekansı bulan bir kod yazdım. Hiç bir kütüphane bağımlı olmadığından ".d" dosyaları direk projelere alınabilir.
- Kırk fırın ekmek yemem lazım olması rağmen  sanki güzel oldu yorumlarınızı bekliyorum.
- Ali Hocanın her zaman "özet" kısmına koyduğu gibi : D güzel bir dil
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Çok da ustaca olmuş! :)

Hızlıca baktım. Gözüme çarpan bir kaç nokta:

1) reduce!((a,b) => a+b) yerine sum() işlevini kullanmak daha iyi. Hem amacı daha iyi gösteriyor hem de sum() kesirli sayı türlerinde daha doğru sonuç üretir.

2) RIFFChunkId(string id) işlevinde string'i bayt dizisi gibi kullanıyorsun. Her ne kadar işe yarıyor olsa da string'i UTF-8 kodlaması olarak kabul etmek ve bu gibi işlemlerde ubyte[] kullanmak daha uygun oluyor.

Ali
kerdemdemir #3
Üye Eyl 2013 tarihinden beri · 123 mesaj · Konum: Danimarka
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Merhaba,

sum() diye ayrı bir fonksiyon olduğu hep unutuyorum,  benim için faydalı olur gerçekten. C++ "accumulate()" alışkanlıkları hep.

2. dediğin yerede bakıp anlamaya çalışacağım. Yorumların benim için önemli.  Fakat benim yazdığım kısım source dosyasının altında olan kısım; FFTUtilities.d,YinsFFT.d,example.d.
example.d  bir wav dosyası açıyor o nedenle vaw dosyası açabilecek bir tane kütüphaneyide ekledim kodlara. Internetten aldığım source kodları "wave" folderının altına koydum.

Bu akşam iş dönüşünde, koda,  makale'ye referans  olacak "yorum"'lar eklemeyi düşünüyorum. Umarım birileri kullanır.

Saygılarımla
Erdem
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-19, 08:12:58 (UTC -08:00)