hızlı fourier dönüşümünde takıldım.

Başlatan kantirici, 16 Temmuz 2012, 23:56:14

kantirici

MErhaba arkadaşlar.Pic ile adc den aldıgım ses sinyalinin fftsini almaya çalışıyorum.Öncelikle kağıt üzerinde fft işlemini yaparken wn katsayıları bulunurken ve internette gördügüm bit terslemede takıldım. Kullanmaya çalıştıgım algoritma radiax-2.
http://web.itu.edu.tr/~yalcinmust/ELE433/dft_ifft.pdf ve http://web.itu.edu.tr/~baykut/lab/pdf/Deney_3.pdf buradaki dükümanlardan ve şuradaki örnekten http://www.transtutors.com/homework-help/digital-signal-processing/fast-fourier-transform/radix-example-part1.aspx anlamaya çalışıyorum.
Öncelikle fft için anladıklarmı sıralayayım.
1-Alınan örnekleri (2^L adet) diziye atıp indisleri tek ve çift olanları ayırıyoruz.Daha sonra bu işlemi tekrar tekrar yaparak elimizde 2şerli gruplarda veriler oluyor.   
2-Wn katsayıları hesaplanıyor
3-


Bu algoritmaya göre gerekli hesaplamar yapılıyor ve 3.adımda sinyalin fftsini almış oluyoruz.Burada örnek sayısı kadar karmaşık sayı oluyor..Bu karmaşık sayıların genligine göre spectrum çiziliyor diye anladım.

Mesela elimizde adc den alınan 8 örnek olsun.
-öncelikle internette gördügüm kadarıyla bit-reserve işleminden bahsedilmiş.Bu indis numaraları içinmi yapılyor tam anlayamadım.(tek çift indisli örnekleri ayrımak için)

-wn katsayıları içinde w=e^(-j2pi/N)*n ve burada n indis numarası Nde alınan örnek sayısı oluyor.
w0=e^(-j2pi/8) *0=0
w1=e^(-j2pi/8) *1=cos45-jsin45=0,707-j0,707 şeklinde hesaplanıyor değilmi? wn katsayıları için dökümanlarda n,N,k gibi değişkenler wn formülünde kullanılmış ve pek anlayadım.Daha doğrusu yukarıdaki wn formülünü anladım.

-Daha sonra ;


yukarıdaki algoritmadan elde edilen işlemlere göre x(n)ler wn lerle işleme tabi tutulup komplex olarak elde ediliyor.

Arkadaşlar algoritmayı yukarıda anlattıgım gibi anladım ve emin olmadıgım yerleri belirttim.Hatalarım ve eksikliklerimi ve anlayamadıgım yerleri belirtirseniz sevinirim.

kantirici


GreeN

Alıntı yapılan: kantirici - 18 Temmuz 2012, 09:49:10
arkdaşlar bir yol gösterseniz. :(

Kısaca şöyele ;

Tek ve çift indisli örnekleri ayırdık.


                     -j(2*PI/N)k
        Wn= e               = cos ((2*PI/N)k) - j sin ((2*PI/N)k) ifadesi bu. Bu ifadenin hesaplanması için 2 değer gönderiyoruz fonksiyonumuza.

Misal ;

   __complex__ float Wn(int l,int N){
    __complex__ float A=0+0i;;
   float re ;
   float im;
   re =cos(2*3.14159*l/N);
   im = -sin(2*3.14159*l/N) ;
  __real__ A = re;
  __imag__ A = im;

return A;
}


Wn(l,N) fonksiyonumuza l index , N (2^n biçimli fft nokta sayısı)

daha sonra X_cift ,  X_tek toplamları elde edilir.


W_Frekans = Wn(k*r,N); //r =0... N/2     k=0....N
X_cift = X_cift + cift_sample[r]*W_Frekans;
X_tek = X_tek + tek_sample[r]*W_Frekans; 

her toplamın sonunda aşağıdaki hesaplanır;

W_Frekans = Wn(k,N);
X =  X_cift+W_Frekans*X_tek ;

X[N] sana sonucu verir.


Terörü Lanetliyoruz.

kantirici

Hocam çok teşekkürler.Aklımdaki sou işaretler gitmiş oldu :)