Kriz maduru işsiz mühendis boş vaktini nasıl değerlendirir? Tabiki PIC'lerle oynayarak :D
İlk FFT denemem.
(http://img143.imageshack.us/img143/7395/res1.png)
(http://img268.imageshack.us/img268/719/res2q.png)
http://uploaded.to/file/i92u4p
FFT ( Fast Fourier Transform ) herhangi bir işareti frekans domeninde incelememize yarar.
Mesela farklı frekanslardaki 2 sinüs işaretini toplayıp elde edilen işareti FFT analizini yaptığınızda topladığınız işaretlerin genliklerini ve frekanslarını ayrı ayrı tesbit edebilirsiniz. Peki bu işlem ne işe yarayacak? Harmonik filtrelerinde kullanılabilir mesela. Şebekedeki ana harmoniğin frekansı 50Hz'dir, şebekeye bağli bir başka cihazında frekansını bilmediğimiz bir harmonik üretebilir. Ohalde FFT ile şebekeden çekilen akımın harmonik analizini yaparız istenmeyen harmonikleri frekansları ve genlikleri ile tespit ederiz ve uygun yöntemlerle bastırmaya çalışırız.
Daha birçok kullanım alanı var.
Endüstride genellikle 7 harmonik başa beladır.
Bahsettiğim konuya bir örnek.
(http://img527.imageshack.us/img527/4403/fftmihrires.png)
Merhaba Hocam;
malesef bende simulasyonda calıstıramadım. Versiyon no:7.4 Sp3
Biz nerde yanlış yaptık acaba.
Teşekkürler
@mihri, eline sağlık hocam ,
acaba olayı madde madde anlatabilirmisiniz?
şunu yap bunu yap ,şöyle olsun
sanırım çok uzun da değil ,
olay derken aslında kod tan bahsediyorum ,
bizde başka derleyicilerde yapmaya çalışsak FFT yi
benzer birşeyler yapmaya çalıştım ama ilerleyemedik ,
FFT değilde DFT
https://www.picproje.org/index.php/topic,19492
fft_spektrum.hex dosyası mevcut olmadığı için çalışmıyor. var olan diğer hex ile de çalıştıramadım. C kullanmadığım için derleyici de mevcut değil. Derleyemiyorum. bu hexi gönderecek arkadaş olursa sevinirim.
Yani çalışmadan kastım, başlattığımız zaman hemen spektrumlar veya LCD üzerinde bir yazı , hata filan görünecek diye düşünüyorum.
Alıntı yapılan: "mihri".. boş vaktini nasıl değerlendirir?
Zaman zaman (1-2 yıl gibi) ara verip, şu günlerde foruma zengin içerik, ve bilgi olarak katkıda bulunan arkadaşlar var. Galiba bu arkadaşlarda da durum aynı. Soracaktım dilim varmadı. Belki de bu zamanlar kendimizi geliştirmek, çevremizdekilerin de bizden istifade edebilmesi için uygun zamanlardır.
Böyle bir projeyi paylaştığınız için teşekkür ederiz.
bende indirdim proteus 7.5 kullanıyorum ama bende calıstıramadım birileri anlatabilirmi acaba ;)
Arkadaşlar c kodları sadece fft için kütüphane niteliğinde onu grafik lcd ye yazdırmak için proje oluşturup yeni kodlar yazmak gerekli mihri arkadaşımız bizimle kütüphane dosyalarını paylaşmı proje olarak istemek bence gereksiz bu kütüphane dosyalarını kullanacak projeler oluşturmak size kalmış
@mihri kütüphane dosyaları için teşekkürler.
Arkadaşlar kusura bakmayın yanlış hex dosyasını eklemişin projeyi yeniden upload ettim.
@FxDev
Aslında ben 256 adet örnek alıyorum fakat fazladan işlem yapıp glcd ye sığdırmak yerine sadece ilk 128 örneği glcdde gösteriyorum. ADC den ölçülen değerleri glcdnin sütun genişliğine oranlayıp çizgi çizdiriyorum. Glcdnin sürücüsünde kordinatları sol üst köşe (0,0) olacak şekilde ayarlandığı için senin deyiminle 0 noktalarını belirleyip altını dolduruyomuşum gibi görünüyor. Aslında glcd üzerine çizdirilen her şekil yukarıdan aşağıya doğru işleniyor.
FFT kütüphanesinin nasıl kullanıldığına gelince, konu hakkında araştırma yapıp yüzeysel bilgi edinen herkes rahatlıkla kullanabilir. Birazda balık tutmayı öğrenmek gerekiyor değil mi? ;)
mihri hocam dediklerinize bakarsak bu sadece bir anolog örnekleme ve görüntüleme işlemi olmuyor mu?
FFT biraz daha karmaşık değil mi? Bi ara bakmıştım ama iyi bir matematik gerektiriyor sanırım FFT.
Şimdi siz iki farklı frekansın toplamını görüntülemişsiniz, peki bu iki frekansı ayrıp,yani iki farklı harmoniği ayrı ayrı görüntüleyebilir misiniz. Yani girişteki iki ayrı sinyalin aynısını nasıl elde edebiliriz?
Alıntı yapılan: "FxDev"Tahmin ettiğim gibi 256 örnek hariç, bir diğer noktada 18F'in ADC hızında o da bu uygulamada gayet önemli bir faktör...
Evet aynen öyle. Fourier analizinin doğru sonuç vermesi için örnekleme frekansı analog işaretin frekansının 2 katından fazla olmalı. 100Ksps hızındaki bir adc ile en fazla 50KHz frekansındaki işaretin fourier katsayılarını elde edebiliriz. Benim yaptığım uygulamanın örnekleme hızı 100Hz'in altında. İstenilirse arttırılabilir tabi.
@alone_lover
FFT konusunu biraz daha araştırmakta fayda var. Fourier analizi ile ölçüm yaptığınız frekans aralığında fourier katsayılarını elde edersiniz. 2. şekilde görüldüğü gibi 2 farklı çubuk iki ayrı sinyali işaret eder. Boylarıda bu frekansların katsayılarıdır. Eğer karıştırdığımız işaretleri ayrı ayrı elde etmek istiyorsak buda ayrı bir işlem gerektirir ki buna gerek yok. Zaten elde edeceğiniz işaret fourier dönüşümü ile elde edilen frekans ve genliklerdeki sinüs işaretleri olacaktır. Teoremin temelinide bu son cümle oluşturuyor zaten.
Alıntı yapılan: "FxDev"Tahmin ettiğim gibi 256 örnek hariç, bir diğer noktada 18F'in ADC hızında o da bu uygulamada gayet önemli bir faktör...
hocam zaten bu işlerde picin adc si yetersiz kalır tahminimce. devrede girişlere baktıysan mihri hocam da 2-3 Hz gibi düşük değerlerde örnek vermiş...
Alıntı yapılan: "alone_lover"Alıntı yapılan: "FxDev"Tahmin ettiğim gibi 256 örnek hariç, bir diğer noktada 18F'in ADC hızında o da bu uygulamada gayet önemli bir faktör...
hocam zaten bu işlerde picin adc si yetersiz kalır tahminimce. devrede girişlere baktıysan mihri hocam da 2-3 Hz gibi düşük değerlerde örnek vermiş...
Aslında PIC'leri o kadarda kötülememek gerek. 18f452 ile 40KHz'e kadar işaretlerin FFT analizi yapılabilir, ama gerçek zamnlı olmaz. Gerçek zamanlı FFT yapmak istenirse analizi yapılan işaretin azami frekansi birkaç KHz'geçmez diye tahmin ediyorum. Ben sadece deneme amaçlı kod yazdığım için 5Hz - 10Hz bana yeterli geldi.
@mihri hocam,
Peki gerçek zamanlı olarak bir sesin spectrum analizörünü grafik lcd de göstermek için bir uygulama yapmak istersek nerden başlama gerekir.
Veya bahsettiğiniz gibi harmonikleri ayıklamak için?
(http://img134.imageshack.us/img134/8666/fftxc.png)
İlk grafik proteusun kendi Fourier modülü ile elde edilen grafik alttaki glcd ise pic ile yapılan FFT sonucu. Bu şekilde daha iyi anlaşılır zannediyorum.
@alone_lover
Eğer winamptaki gibi görsel birşey olsun istiyorsanız verdiğim kütüphane yeterli. Yok hayır harmonik filtre yapıcam diyorsanız öncelikle Fourier dönüşümünü iyice hazmetmek gerekli (açıkçası ben kendim için böyle birşey söyleyemiyorum). Daha sonra DSC-DSP piclerle yapamayacağın iş yok.
eger işaret işleme konusunda kendinizi geliştirirseniz ses ve görüntü üzerinde işlemler yapabilirsiniz.örneğin ses komutu ile bir sistemi çalıştırabilirsiniz.bir mikrafondan alınan veriyi örnekleyip bu örneklemeleri AFD ile frekans domeninine taşıyıp orjinal sinyal ile karşılatırabilir böylece sesli kontrol işlemi yapabilirsiniz. tabiki olay zor bir olay önceleri bu konuyu çok merak etmiştim.speech prosessing ve image prosessing.başlı başına bir uzmanlık alanı.malesef ülkemizde bu konuda pek araştırma yapan yok o yüzden türkçe kaynak sıkıntısı var.
Alıntı yapılan: "FxDev"Winamptaki bir şey için pic'in adc'sinin yeteceğini sanmam. Ama bilgi sürekli bir yerden gelirse, ki internetteki örneklerde genelde paralel port kullanılmış mümkün olabilir. Tabi GLCD'nin maksimum tazeleme hızı da önemli.

Yukarıdaki resim herşeyi anlatıyor. PIC ile gerçek zamanlı fft, üstelik dahili ADC ile. Dosyalar aşağıda.
http://s2.dosya.tc/FFTSPEKTRUMMIHRI.rar.html
Alıntı yapılan: "FxDev"Hocam hız iyi yalnız istenen tam şunun gibi bir şey GLCD'den...
http://www.berik.net/0801AudioSpectrum.html
http://www.youtube.com/watch?v=b09vELFmeGQ
http://www.youtube.com/watch?v=9Fray7gGw_w
Sevgili FxDev benim verdiğim uygulamanın senin verdiğin örnekten eksiği yok fazlası var. Projeyi proteusta simüle ettiğimiz için ekran tazeleme hızı çok yavaş görülebilir. Zaman sayacına bakarsan ne kadar yavaş ilerlediğini görürsün. Benim bilgisayarımda 1 Sn simülasyon için yaklaşık 1 Dk beklemem gerekiyor. Üstelik GLCD yerine Dot Matris led pano kullanmanın daha kolay olup işlemi hızlandıracağını tahmin edersin. Diğer örneklerde 64 noktalı FFT yapılmış. Benim verdiğim sürücü 256 noktalı FFT yapıyor.
Demek istediğim gerçek dünyada girişe audio sinyal uyguladığımızda performansı o zaman daha iyi anlayacaksınız. Kaldıki FFT'nin ne olduğunu anlayan kişi için yukarıdaki örnek yeterli olacaktır.
Saygılarımla.
audio sinyalini direk pice girmeden önce nasil filtreleme yapmaliyiz audio voltaji 5 voltu asmasmzmi yoksa direk pic e mi girmeliyiz ?
Bu devreyi küçük bir anfinin giriş katında kullanmak istersek ve sadece Giriş sinyali ekranını göstermek istersek (FFT Ekran olmadan) nasıl bir değişiklik yapmamız gerekir ? Pratik olarak giriş sinyalinin üst eşiği nedir ? Başarılar..
18f4620'nin ADC özellikleri;
Analog Features
* 10-bit ADC, 13 channels, 100K samples per second
* Programmable Low Voltage Detection Module
* Programmable Brown-out Reset module
* Two Analog comparators with input multiplexing
1 saniye içinde 100.000 ölçüm yapılabiliyor. Audio işaretin örnekleme frekansı ise 44100Hz, yani 18F'in ADC hızı gerekenin 2 katından fazla. Atmel ile yapılan FFT'lerde harici ADC kullanımının nedeni dahili ADC hızlarının düşük olması.
Devrede ADC referans gerilimlerini besleme olarak ayarladım yani 0-5V arası. Giriş gerilim değeri bu aralığın dışına çıkmamalı ve sinüzoidal işaretin negatif alternansını ölçmek için giriş gerilimini 2.5V ile toplamalısınız. ADC girişinde 2.5V olduğunda içerde yazılım bunu 0V olarak algılıyor. Giriş 5V olduğunda pzitif max alternans, 0V olduğunda ise negatif min alternans oluyor. Girişte basit bir opamp devresi ile bu işlem halledillebilir. Kesim frekansı 22Khz olan bir alçak geçiren filtre kullanılabilir. Örnek devre aşağıdadır. Grafikten anlaşılacağı gibi ofset gerilimi 2.5V olarak ayarlandı.
(http://img44.imageshack.us/img44/7264/mihriaudio.png)
Osiloskop tarzı bir çalışma yapmak için çok daha basit bir yazılım kullanılabilir. Mesela 10KHz örnekleme frekansı ard arda 128 adet örnek alırsınız. Bu örnekleri 128 byte uzunluğunda bir katara sırayla kaydedersiniz. 128. örnek alındıktan sonra 128X64 GLCD ile 1. sütuna 1. değeri 2. sütuna 2. değeri .... 128. Sütuna 128. değeri 64 piksellik sütun boyuna oranlayarak yerleştirmeniz yeterli. Böyle bir uygulama için yukarıda anlattığım algoritma ve devre kullanılmak zorunda.
Gerçek müzik dosyası ile simülasyondan bir örnek.
(http://img44.imageshack.us/img44/9295/mihrifft.png)
Ben de proteus olmadigi için devreyi deneyemedim. Programin tamami olmadigi için de bilemiyorum.
Sorum su :
Veri kaçirma oluyormu ?
Alt sorular :
ADC devamli kullaniliyormu ? 128 (veya 256) örneklemeden sonra durup hesaplama fonksyonunu mu çagiriyorsunuz, bu sirada ADC devam ediyor mu ? GLCD'ye yazarken de ADC islemi devam ediyor mu ?
ADC kesme rutini ile ana program arasinda circular buffer kullaniyormusunuz ?
@mihri hocam,
süpersin :)
anlamak istediğim herşeyi uygulamalı olarak göstermişsin. Teşekkür ederim... Ama demiştin ya bize yine balığı yemek düştü biraz :)
Alıntı yapılan: "mihri"Endüstride genellikle 7 harmonik başa beladır.
ben 3ncü harmonik diye biliyorum, yanlış olmasın
Merhaba,
u1 ve u2 tablonun hazırlanması konusunda biraz yardımcı olabilir misiniz?
Tebrikler güzel çalışma olmuş.
FxDev'e ek olarak
Verdiğin projenin Algoritma kaynak kod ve şemaları bu linkte.
http://mehilainen.homeip.net/analyzer/analyzer.html
indirip inceleyebilirsiniz pic32 kullanıcıları.
Minä rakastan sinua Suomi :)
Andrei kardeşimin böyle bir sitesi olduğunu ve elektronikle ilgilendiğini picprojeden öğreneceksin deselerdi çok gülerdim heralde :)
Finlerin bu paylaşma huyunu seviyorum.
Hocam kod linklerinin tümü silinmiş. Tekrar eklemeniz mümkünmüdür acaba? Değişik uygulama şekilleri hakkında fikir sahibi olmak istedim.
Teşekkürler.
Merhaba,
İlk mesajdaki dosya linki ölmüş.Acaba bir arkdaş yenileyebilirmi? Teşekkürler.
hocam link ölmüş yenilemenizi rica ederim. saygılar
http://www.dosya.tc/server37/pZyczW/Radix2.rar.html (http://www.dosya.tc/server37/pZyczW/Radix2.rar.html)
FFT kodlarını yükledim. Rica etsem bir arkadaş forumun 4share hesabına yükleyebilir mi silinmesi.?
mihri hocam teşekkür ederim.
@meftun a bildirecem durumu
bu tip kodları picprojenin github hesabına ekliyor.
bir yedek te benden olsun,
https://drive.google.com/file/d/0BwinMhPf13P3ckd2Mlh2VGwzZTg/view?usp=sharing
Buyrun: https://github.com/Picproje/FFT-Fast-Fourier-Transform-
Teşekkürler @mihri
ADC gelen sinyali nasıl koda aktarıcaz acaba yardımcı olurmusunuz