FFT ile Ses Analizi

Başlatan SB7, 23 Kasım 2019, 23:17:41

SB7

@taydin hocam şuan istediğim gibi çalışıyor. İstediğim algoritmayı buldum. Matlaba şuan için ihtiyaç kalmadı dediğiniz gibi.
@OptimusPrime hocam aynen şuan oldu gibi. Ancak siz söyleyince aklıma takıldı 16 noktanın genlik değeri elimde bu frekansların kaç Hertz olduğunu anlayabilirim? (Deneme yanılmayla kalibrasyon yapmak aklıma geliyor ama matematiksel olarak kaç hertz olduğu nasıl hesaplanıyor?

Şuan herşey istediğim gibi . Tek yapmam gereken başka bir stm32 kartından DAC ile farklı frekansta sinüs sinyalleri elde edip hoparlöre giriş yapmak. 4 adet buton ile farklı frekansta sinyaller sesler üretip bunların hangi frekansta ses sinyalleri olduğunu anlamak.

-SB7

OptimusPrime

Madem hazir kutuphane kullaniyorsun, ayarlari bir .h dosyasinin icinde olmali. Ornekleme frekansi, kac nokta fft alindigi vs vs.

Mesela, ornekleme frekansin 16kHz olsun. Nyquist amcaya gore 8kHz en yuksek frekansin. Bu 16. kanalin frekansi. bundan sonra 15 defa daha 2 ye bolerek geri gel. Her sonuc senin bir kanalinin cevap verdigi/olctugu frekans.
https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

SB7

Örnekleme frekansım 35kHz ve 16 point fft alyorum 16. Noktanın frekansı 17.5kHz dersek ilk 8 noktanın frekansı birbirine çok yakın oluyor hocam.  Özellikle de 1 2.nokta arasındaki frekans farkı 0.5 Hertz civarı sizce bu mantıklı mı?
-SB7

OptimusPrime

https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

SB7

Hocam o halde 8 point fft alıp frekans farkını arttırmam daha işlevsel olacak . Çünkü amacım sesleri fft ile ayırt edebilmek. Ancak bu dediğinizi uygulamada denemeden bunu yapmak istemiyorum. Bilindik frekansta sesleri verip deneyeceğim.Uygulamaya dökünce sonucu burdan bildiririm . Herkese çok teşekkür ederim.
-SB7

elektronart

bir STM için biraz fazla yükleniyorsun gibi. Eğer ses tanıma gibi bir amacın varsa kullandığın platformu bir üst basamağa taşıman iyi olur. RPi zero gibi bir modül işini kolaylaştırır. Amacın sadece ölçüm yapmak ise MSGEQ7 diye bir çip var. Biraz pahalı ama FFT kısmını bu çip halledebilir.
Açık Elektronik

SB7

Bnden istenen fft yi kendim hesaplatmam. Entegreli çözümleri o yüzden düşünmüyorum. Aslnda dediğiniz doğru da şuan için istediklerimi karşılıyor. Daha kapsamlı bir projede dediğiniz mcularla ilgilenebilirim. Şuan bilgim olmadığı için zaman kaybı olacak.
-SB7

OptimusPrime

Aslinda senin proje sesden cok ton analizi gibi geldi bana. Eger oyle ise band geciren bir filtrede yazabilirsin, hic fft ile ugrasmadan.  :du:
https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

mehmet

Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

SB7

Merhabalar.
Projeyi tamamlamak üzereyim. Şuan yaptığım çalışmaların sonucunun mantıklı olup olmadığı konusunda kararsız kaldım. Aslında aldığım genlik değerleri mantıklı sonuçlar aldığımı gösteriyor. Ancak hangi frekans bandının genliği olduğunu bulma konusunda biraz sıkıntı çekiyorum.
@OptimusPrime Hocam dediğiniz şekilde sonuçlar almayı beklerken denemeler yaptım . 1kHz, 2kHz, 4kHz ve 8kHz sinyallerin fft sonucunu inceliyorum aldığım sonuçlar böyle:
1kHZ  297 2276 7815 2229 1807 3040 1584  927  477 1009 1654  379 1801  995  840 1051
2kHz  760  999 1275 1498 6651 5409 2200 1002 1418 1943 1955 1437  598  796 1662 2907
4kHz  2938  855  718  873  132  843  491  896 1601  744 9256  789 1031  890  305  828
8kHz  2272 1322  747  442  433  791 1305 1392 1145 5235 4494 1907 1649  966 1287 1347

Hangi sütunun frekansının kaç Hertz olduğunu sizce nasıl anlayabilirim?
-SB7

OptimusPrime

#25
16 nokta var fs kac ise ordan bole bole geri geleceksin daha once bahsettigimiz gibi. Ama yinede kullandigin kutuphanenin aciklamalarina bir bak.  ::ok

Bu arada bu degerler bana mantikli gelmedi. Aldigin ornekleri pencerelemiyor olabilir misin?
https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

SB7

Hocam kullandığım kütüphane 32 point fft alıyor. For döngüsüyle 16 noktayı uarttan yazdırıyorum. Dediğinizi yaptım ancak çok yakın oluyor. 7000 in üzerine çıkan genlik olduğunda o bandın frekansının olduğunu kabul ederek ilerlemek istedim ancak 1 kHz ile 2kHz arasnda 1 frekans bandının genliği daha ortaya çıkıyor. Sürekli ara değerler oluyor yani.

Pencerelemeden kastınız ne hocam donanımsal bir filtre mi yoksa yazılımla belirli genliğin altındaki degerleri yok sayarak mı yapmam gerekiyor bu işlemi?
-SB7

alicavuslu

Alıntı yapılan: SB7 - 25 Kasım 2019, 23:03:43Örnekleme frekansım 35kHz ve 16 point fft alyorum 16. Noktanın frekansı 17.5kHz dersek ilk 8 noktanın frekansı birbirine çok yakın oluyor hocam.  Özellikle de 1 2.nokta arasındaki frekans farkı 0.5 Hertz civarı sizce bu mantıklı mı?

9. Nokta 17.5 KHz frekansına denk gelir. Frekans çözünürlüğü örnekleme frekansı / FFT uzunluğu olarak bulunur. FFT binlerinin  indisleri bu değerler ile çarpılır.

İlk 8 noktadan kasıt FFT binleri ise bu değerler nasıl yakın çıkmış olabilir?

SpeedyX

Alıntı yapılan: SB7 - 16 Aralık 2019, 12:18:37Pencerelemeden kastınız ne hocam donanımsal bir filtre mi yoksa yazılımla belirli genliğin altındaki degerleri yok sayarak mı yapmam gerekiyor bu işlemi?
Hanning window diye arayabilirsin.

Aşağıdakine benzer bir döngüde window tablosunu oluşturup, sonra aldığın analog veriyi bu tablo ile çarptıktan sonra FFT ye vermen gerekiyor. İlk mesajımda spectral leakage diye yazmıştım.
for (int n = -m; n < m; n++)
    w[m + n] = 0.5f + 0.5f * cos(n * r);

OptimusPrime

@SB7

@SpeedyX in bahsetrigi gibi hanning veya humming. Dogrudan fft alirsan basina bela olur  :)
https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||