FFT

Başlatan mihri, 03 Eylül 2009, 00:54:45

bymrz

@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?

mihri



İ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.
"Eppur si muove!"

serdararikan

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.

mihri

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
"Eppur si muove!"

mihri

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.
"Eppur si muove!"

cetinkaya

audio sinyalini direk pice girmeden önce nasil filtreleme yapmaliyiz audio voltaji 5 voltu asmasmzmi yoksa direk pic e mi girmeliyiz ?

solidus

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..
Kimine göre kralım kimine göre yalanım… Herkes rahatına baksın, ben adamına göre adamım..

mihri

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ı.



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.

"Eppur si muove!"

picusta

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 ?

bymrz

@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   :)

erolca

Alıntı yapılan: "mihri"Endüstride genellikle 7 harmonik başa beladır.
ben 3ncü harmonik diye biliyorum, yanlış olmasın
eroool

erolca

Merhaba,
u1 ve u2 tablonun hazırlanması konusunda biraz yardımcı olabilir misiniz?
eroool

mihri

Tebrikler güzel çalışma olmuş.
"Eppur si muove!"

ahmet2004

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ı.

SpeedyX

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.