Picproje Elektronik Sitesi

SERBEST BÖLGE => Programlama ve Algoritma => Konuyu başlatan: kantirici - 16 Temmuz 2012, 23:56:14

Başlık: hızlı fourier dönüşümünde takıldım.
Gönderen: kantirici - 16 Temmuz 2012, 23:56:14
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 (http://web.itu.edu.tr/~yalcinmust/ELE433/dft_ifft.pdf) ve http://web.itu.edu.tr/~baykut/lab/pdf/Deney_3.pdf (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 (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-
(http://www.transtutors.com/Uploadfile/CMS_Images/21120_Twiddle%20factor.JPG)

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 ;
(http://www.transtutors.com/Uploadfile/CMS_Images/8067_Radix-2%20decimation%20A.JPG)

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.
Başlık: Ynt: hızlı fourier dönüşümünde takıldım.
Gönderen: kantirici - 18 Temmuz 2012, 09:49:10
arkdaşlar bir yol gösterseniz. :(
Başlık: Ynt: hızlı fourier dönüşümünde takıldım.
Gönderen: GreeN - 18 Temmuz 2012, 11:53:42
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.


Başlık: Ynt: hızlı fourier dönüşümünde takıldım.
Gönderen: kantirici - 21 Temmuz 2012, 11:17:02
Hocam çok teşekkürler.Aklımdaki sou işaretler gitmiş oldu :)