Thread overview
Ses için temel frekansı bulma YINS-FFT-DLANG
Jun 28, 2015
kerdemdemir
Jun 28, 2015
kerdemdemir
June 28, 2015

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_vibration

Ö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_JASA_YIN.pdf

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

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 28, 2015

Merhaba,

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

  1. 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

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 28, 2015

Ç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

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]