0.1 Hz frekans çözünürlüğü(DFT)

Başlatan erkantr67, 03 Haziran 2019, 06:42:35

erkantr67

Hayırlı akşamlar.

Daha önce sürekli zaman fourier dönüşümü formülünden yola çıkarak DFT yaptığımı düşünüyordum. Son DFT incelemelerimde yanlış düşündüğümü fark ettim. Ama eğer yanlış düşünüyorsam neden sonuç doğru çıkıyor anlamış değilim.

Bildiğiniz üzere sürekli zaman formülü şu:



Ben şimdiye kadar PC platformlarında(C#, Matlab, Android) yukarıdaki formülü mantıklı bir dönüşüm olarak şu şekilde kullandım:



Sürekli zamandaki t yerine örnekleme frekansının periyodunu koydum ve her örneğin indeks değeri ile çarptığımda örneklerin zamandaki karşılıkları işleme soktum. Bu şekildeyken istediğim frekansı yerine koyup, elimdeki örneklerin çıkışını kontrol ediyordum. f 'de doğal olarak direkt olarak frekansım oluyordu. Mantık sürekli zamanın aynısı.

FAKAT
Bunu DFT yapıyorum zannetmiştim. Yeni farkettim ki DFT'de frekans f = k.(fs/N) olarak ölçeklendiriliyor. Yani istediğim frekans çözünürlüğü için fs/N oranını ayarlamam lazım. Örneğin fs=44100Hz ise 0.1 Hz çözünürlük ölçekleme için 441k tane örnek işleme sokmam lazım.  Bu real-time'ı baltalayan bir durum. Ben 40 ms içerisinde ilgili örnekleme frekansına göre alabildiğim kadar örnek alıp içerisindeki frekansları görmek istiyorum.

Bu işlemi yapacağım android platformunda 44100Hz örnekleme frekansı ile 40ms de 1764 tane örnek veriyor. Buffer 1764 signed16.

Playstore'dan yapmak istediğim benzen uygulamaları kontrol ediyorum 0.1Hz çözünürlükte olanlar var. %99 FFT kullanıyor. FFT kullanıyorsa DFT işlemide var demektir. Yani uygulamayı yapan adamın işleme soktuğu örnek sayısı 441k demek oluyor. 441k örnek 10sn'de veriliyor. Ama adamın uygulaması göz algılayamayacak şekil tepki veriyor ses girişine.

Buda demek oluyor ki bu adam 0.1Hz çözünürlük için 10sn beklemiyor. 50ms'den düşük bir tepki süresi ile  çıkış veriyor.

Sizce bunu nasıl yapmış olabilir?

441k'ya tamamlamak için elimdeki örnekler haricindekileri 0 ile doldursam bir problem olur mu?

Fikir ve düşünceleriniz için şimdiden teşekkür ederim.

ferdem

441k'ya 0 ile doldurarak tamamlamak zero-padding olarak adlandırılır, az örnekle daha yüksek çözünürlük gerektiğinde kullanılan bir teknik olarak biliyorum. Kolay gelsin.

Mehmet Salim GÜLLÜCE

Yazılım pek alanım değil.
Ancak vektörel değerlendirme ölçme yada örnekleme olabilirmi diye aklımdan geçiyor.

yas

Örneklemeler buffera alınırken sırasıyla 0-10-20-30...... gibi aralıklara alınıyor olabilir. Daha sonra artış veya düşüş yönüne göre iki değer arasında vektör olacak şekilde dolduruyor olabilir.
Örneğin; Buf0 = 28, Buf10 = 78 ise arasındaki fark alınıp 10 a bölünüp adım artış değeri hesaplanıp ara değerler dolduruluyor olabilir. Step=(78-28)/10 = 5
Buf0 28
Buf1 
Buf0 Step
Buf2 
Buf1 Step
Buf3 
Buf2 Step
Buf4 
Buf3 Step
Buf5 
Buf4 Step
Buf6 
Buf5 Step
Buf7 
Buf6 Step
Buf8 
Buf7 Step
Buf9 
Buf8 Step
Buf10 
78

Gibi anlaşılır olması için böyle yazdım for next le daha şık olacaktır.

Birde 44100 olan örnekleme hızı costum olarak set edilip 441k olarak ayarlanıp sonra 0.1 çözünürlük için 10 a bölünüyor olabilir olabilir. Bu daha gerçekçi bir çözüm olur bence.

OptimusPrime

Oncelikle DFT ve FFT farkli seyler. ;)

FFT nin complexity sine baktiginda 441k ornek icin 1 milyondan fazla islem yapman gerekiyor saniyede. Buna arada isletim sistemi, derleyici/yorumlayici, framework falan deyip 100 kat daha yavasladigini dusunursen 100MHz lik bir islemci 1sn de bu isin altindan kalkabilir gibi duruyor. Mobil islemci hala bundan hizli. Belki donanimsal hizlandiricilarida olabilir!

Fakat 0.1Hz cozunurlukteki islem sonucunu zaten ekrana cizdirecek kadar yeterli buyuklukte bir ekranin yok. Bu isin espiriside sanirim buradan geliyor. Kullanici belirli bir alani buyutup burada neler var deyinceye kadar ekranda detaylar gosterilmiyor. Yani genel anlamda bakildiginda hicbir zaman ekrana bu cozunurlukteki sonuc basilmiyor/basilamiyor.

Tahminimce.  8-)


iboibo

04 Haziran 2019, 18:13:21 #5 Son düzenlenme: 04 Haziran 2019, 18:29:04 iboibo
AlıntıÖrneğin fs=44100Hz ise 0.1 Hz çözünürlük ölçekleme için 441k tane örnek işleme sokmam lazım

Neden böyle olsun ki frekansın tam peryotlarını alabiliyorsan daha sonra gelen peryotlar öncekinin  aynısı olacaktır, neden 10saniye boyunca alıyorsun örnek.

Burada önemli olan örnekleme sayısı ve bit olarak derinliği ve tam  peryotların hafızaya sığması. Bir saniye içine kulağın duyacağı tüm frekanslar hafızaya sığarbilir diye düşünyorum.