C ile FFT kodlama

Başlatan Kaanx, 20 Eylül 2013, 23:51:34

Kaanx

Merhabalar GNU üzerinde ve ya herhangi bir C compiler üzerinde Fast Fourier transform kodlayan var mı ? hazır olarak mevcut fakat mantıgını iyice kavramak için adım adım ilerleyip bizler türkçe olarak yazabilir miyiz ?

fatih6761

#1
Hocam FFT'den kastınız Radix-2 FFT ise şurada DFT'den FFT'ye kadar açıklamalı anlatan bir sayfa mevcut ancak ingilizce:
http://en.literateprograms.org/Cooley-Tukey_FFT_algorithm_%28C%29
Not : Algoritma fixed-point değil double türü içindir. Son koddaki rekürsif yaklaşımı while döngüsüyle iterative çevirebilirsiniz.

Kaanx

Teşekkürler umarım işime yarıcak bunlar sanırım ben bunu kendim yazamıcam :)

Kaanx

 Real time olarak FFT spectrum analyzer hakkında bilgisi olan var mı ? Elimde Stm32f4 discovery , Tİ stellaris lmf120hq , Tİ msp430 var şuan kullanabileceğim

kantirici

#4
Bir ses sinyali için girişi adc ile fft örnekleme sayısı kadar örnekleyip (nyquist frekansına göre) gerekli matematiksel işlemleri yapıp sonucu çıkışta gösterdikten sonra tekrar örnek alıp bunu sürekli yapacak bir algoritma ile yapılır. 
İşin teorik kısmı böyle, bende pratik uygulama yapmadım.

fatih6761

Real time spectrum için STFT (short time fourier transform) daha kullanışlı olur. STFT aslında normal FFT'nin circular buffer tarzında olanı. Her seferinde 16-sample (veya daha fazla/az) overlap yapılarak önceki sinyal de spektruma katılmış oluyor.

Icarus

Alıntı yapılan: Kaanx - 21 Eylül 2013, 14:06:04
Real time olarak FFT spectrum analyzer hakkında bilgisi olan var mı ? Elimde Stm32f4 discovery , Tİ stellaris lmf120hq , Tİ msp430 var şuan kullanabileceğim
Real time olarak olmaz. (Yada çok düşük frekanslar için olur ki, bu da olmaz ile aynı şey)

Kaanx

Söyle bir kaç örnekle karsılaşmıstım ben buradada FFT tekniği kullanılmıyor mu ?

audio analyzer stm32f4


Icarus

#8
Real time değil, olay şu: Max band genişliğinden en az 10 kat hızlı ve sabit gecikme(delay) ile yapabiliyorsan real time'dır. Değilse değildir...

mesaj birleştirme:: 21 Eylül 2013, 16:37:07

Örneğin FFT özelliği olan osiloskopların gösterdiği bilgi, real time değildir. LCD güncellenme zamanına, total aqusation time, vb..... bağlıdır. Her sinyaldeki glitch FFT'de çıkmaz

berat23

#9
@Icarus

ne dediğinizi anlamadım, daha doğrusu siz herşeyi birbirine katmışsınız.

mesela ;
Alıntı YapReal time olarak olmaz. (Yada çok düşük frekanslar için olur ki, bu da olmaz ile aynı şey)

demişsiniz. real time demek aynı anda olması demek değil. aslında bunun farkında gibisiniz fakat sonra şunu yazmışsınız;

Alıntı YapReal time değil, olay şu: Max band genişliğinden en az 10 kat hızlı ve sabit gecikme(delay) ile yapabiliyorsan real time'dır. Değilse değildir...
Örneğin FFT özelliği olan osiloskopların gösterdiği bilgi, real time değildir. LCD güncellenme zamanına, total aqusation time, vb..... bağlıdır. Her sinyaldeki glitch FFT'de çıkmaz

nereden başlasam bilemedim. real time fft demek şudur, diyelim 8 uzunluklu alacaksınız, 8 veri gelme süresinde fft'yi hesaplayıp sonucu ekrana göndermek demektir, öyle 10 katı falan değil. kısaca yeni veri gelene kadar eskisini hesaplamak demektir. pekala orada sayılan işlemciler bu işi yapabilir, nasıl yapıldığı önemli. gidipte msp430 ile 1024 uzunluklu fft alma, 8 al. çözünürlüğün düşer ama real time yapabilirsin pekala. bu işte muhtemelen ekran kısmı en sorunsuzu zira insan 50 hz ile güncellenen bir görüntüyü sabit görür, dolayısıyla 20ms gecikme olabilir. osiloskop örneğide yanlış bu sebepten dolayı, pekala real time çalışırlar osiloskoplar(ekran olarak ).

ayrıca anlamadığın nokta şu, gerçek zamanlı olması için zamanlama ne olmalı? mesela konu gözümüzse 20ms içinde diğer kare gelmelidir, gelmezse real time olmaz. 10us de 1 örnek alan bir sistemde 8 uzunluklu ft alınacaksa ilk hesaplama 80us sonra başlayıp, 80us den kısa zamanda biter ve bu süreç her 8er veri için devam ederse real time olur. bu saydığım gecikmeyi çok görüyorsanız siz toptan tüm dsp'yi çöpe atmışsınız gibi birşey oluyor, o zaman ne real time filtre olur ne diğer tüm dsp işleri.

Bayramsumbul

Merhabalar.Konu Açılmışken Sorayım Bu Fft-dft İle Belli Frekansların Genliği İle Oynanabilirmi?Equalizer Gibi.
Bir Elektronik Meraklısının Serüveni...

z

#11
100 Khz ile sample alan ADC var.
Ard arada 16 sample aliyorsunuz ve bu 16 "sample"i aldiktan  1 mili saniye sonra tum hesap kitap islemlerini bitiyorsunuz diyelim.

Bu sartlar altinda mercek altina alabileceginiz frekanslar hangi aralikta olabilir? Benim cihazim realtime anlamda hangi frekanslari izleyebilir?




mesaj birleştirme:: 22 Eylül 2013, 00:26:15

Most modern spectrum analyzers are now almost exclusively Hybrid Superheterodyne-FFT based giving a significant improvement in sweep time. However, even in such cases there is still processing time required to sample the spectrum and calculate the FFT. For this reason, both swept-tuned and FFT based analyser produce "blind time" meaning that while calculation of the spectrum is being performed, the instrument has gaps and misses information of the RF spectrum being applied to the RF front end.
A realtime spectrum analyser does not have any such blind time—up to some maximum span, often called the "realtime bandwidth". The analyser is able to sample the incoming RF spectrum in the time domain and convert the information to the frequency domain using the FFT process. FFT's are processed in parallel, gapless and overlapped so there are no gaps in the calculated RF spectrum and no information is missed.

http://en.wikipedia.org/wiki/Spectrum_analyzer
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Icarus

#12
@berat23: Bazen en iyisi insanın kendisinin deneyip görmesidir, hem osiloskop'u hemde FFT'i pembe gürültü, veya benzeri bir gürültülye söylediğini teknikleri uygulayarak deneyin.

@z:
Öncelikle frekans çözünürlüğü 6.25kHz ediyor. Özetle sistem 1kHz ile 5kHz'i yada 13kHz ile 15kHz'i bir birinden ayırt edemiyor.
İkinci sorun ise yaklaşık 1ms'lik sinyalin sadece 160us'sini alıp bu kısmın periodik olarak tekrar ettiğini varsayıyoruz.
Bir noktada verileri bir window fonksiyonundan geçirmek bu problemi çözmeyecektir.

Bunları yok farz edelim, elde ettiğimiz spektrum'daki en yüksek frekans nedir ? Nyquist 50kHz olmalı der, fakat uygulamalar için rule-of-thumb 1/10 'nunu alın 10kHz

mesaj birleştirme:: 22 Eylül 2013, 00:36:49

@z: great explanation

berat23

deneyip görmelik bir durum yok, herşey açık. nyquist ne diyorsa doğrudur, nereden nasıl baktığın önemli. fourier açılımı malumunuz sinüslerin toplamı. sinyal saf sinüs olursa max. frekanslı sinüsün 2  katı olması doğru örnekleme için yeterli. sinyalin frekansı aslında içindeki sinüslerin frekansı değil. periyodiklik demek T zaman içinde sinyalin dalga biçiminin kendini tekrarlaması demek, bizim sinyalde frekans olarak tanımladığımız ise sinüsler. şimdi diyelim elimizde 1us içinde dalga biçimini tekrarlayan ama genlik formu kare dalga olan bir sinyal var. sinyalin frekansı 1mhz ama içindeki max. frekanslı sinüs bileşeni sonsuz frekansta . sonsuz diye birşey olamayacğı gibi ideal kare dalga da yok. o 10 kat meseleside bu max. frekanslı bileşenden geliyor, aslında 10 değil ne kadar yüksek olursa o kadar iyidir karemsi dalgalar için. yani nyquist ne diyorsa doğru, uygulamada da şaşmıyor. sadece yanlış yorumlanıyor/yorumluyorsunuz.

Icarus

Alıntı yapılan: berat23 - 22 Eylül 2013, 13:10:18
o 10 kat meseleside bu max. frekanslı bileşenden geliyor, aslında 10 değil ne kadar yüksek olursa o kadar iyidir karemsi dalgalar için.
Sadece ilk mesajımı okusanız idda ettiğim şeyin bununla ilgisi olmadığını görürsünüz.
Olay kare dalga falan değil.

Alıntı yapılan: berat23 - 22 Eylül 2013, 13:10:18
deneyip görmelik bir durum yok,
Siz dizaynlarınızı 2fs olarak yaparsınız, zaten simulasyonlar varken prototip'lere gerek yok değil mi ?
Bir mühendis "denemeye gerek yok" diyorsa artık ne söylemek lazım bilemiyorum