NI Ürünleri İle İlgili Tartışmalar

cancel
Showing results for 
Search instead for 
Did you mean: 

FFT

microişlemci ile rs232 üzerinden labview'e almış olduğum analog sinyalin FFT sini almak istiyorum.Fakat FFT konusunda hiçbir bilgim yok.Yapmak istediğim steteskop tan gelen sinyali microişlemci ile ADC işlemine tabi tutup bu verileri labview ile işlemek istiyorum.Bilgi alma veyahut gönderme kısımlarını hallettim.Sorunsuz şekilde bilgi alıp gönderebiliyorum.FFT için yardıma ihtiyacım var.

 

 

Ekte çalışmam bulunmaktadır.yapcağınız değişiklikleri 2009 SP1 e göre kayıt ederseniz sevinirim.

 

şimdiden cevaplarınız için teşekkürler.

0 Kudos
Message 1 of 22
(7,075 Views)

Hazırlamış olduğunuz kod porttan tek tek veri okuma ve "chart" üzerinde görüntüleme işlemi yapıyor. FFT ile frekans düzlemine geçebilmek için öncelikle incelenecek veri zaman kavramını içermelidir. Daha sonra sizin için anlamlı olan sinyale ait en yüksek frekansın en az iki katı örnekleme yapılarak verş toplanmalı ve FFT için en az bir tam peryot veri hazır olmalıdır. işlemin nasıl olacağı ile ilgili bilgiyi aşağıda veriyorum.

 

Chart-FFT.png

 

Burada da sizdeki gibi tek tek örnekler alınıyor. Bu örnekler bir dizide toplanıp en az bir peryotluk veri biriktiriliyor. Daha sonra bu veriye örnekleme aralığı ms olacak şekilde zaman bilgisi eklenip "waveform" oluşturuluyor. Express VIlar içerisinden Spectral VI alıp (FFT-Magnitude)  oluşturduğumuz "waveform"un FFT'sini alıyoruz.

Message 2 of 22
(7,061 Views)

göndermiş olduğunuz örnekleri inceledim.üstünde değişiklikler yaparak kendi projeme uygulamaya çalıştım.Fakat tam anlamıyla istediğim sonuca ulaşamadım.

 

Aslında projemin amacı midedeki sesleri dinlemekti.fakat hangi frekans aralıklarını dinleyeceğimi bilmediğim için bütün ortamdaki sesler  sinyale karışarak geliyor.

tam olarak istediğim frekansın aralığını bulmuş olsaydım.Yazılım olarak değilde donanımsal olarak filtre edip. sadece data okuyarak istediğim işlemleri çok rahatlıkla gerçekleştirebilirdim.fakat mide seslerinin çeşitliligiyle ilgili olarak frekansı bulmak biraz zor gibi.kişinin açlık anındaki frekans ile tokluk anındaki frekans farklı oluyor.

FFT ye bu yüzden başvurdum.frekans metre ile deneme yapmakta aklıma geldi fakat değişik aralıklar olacağı için çok fazla deneme yapmak gerekecek belkide çok fazla kişiyi kontrol etmek gerekecek diye vazgeçtim.Bunun başka bir yolu varmıdır.

 

Ayrıca FFT ile frekans aralığındaki sinyali okuyup işlemek için uğraşıyorum.

0 Kudos
Message 3 of 22
(7,038 Views)

Bu sesler kulağın işittiği aralıkta mıdır? Öyleyse 20Hz-20kHz aralığını esas alıp örneklemeyi 20kHz'e göre yapabilirsiniz. Nyquiste göre 40kHz (40ksample/sn) ile örnekleme yapmak gerekir. Ama genelde daha da yüksek mesela 50kHz-100kHz ile örnekleyebilirsiniz. Bir paket miktarını da işlemci yükü ve yineleme aralığını göz önünde bulundurarak 500ms'ler mertebesinde tutabilirsiniz.

 

Esas sorun ise verdiğiniz örnekte RS232 ile haberleşme yapmanız ve ses analizi için gereken dinamik veriyi seri haberleşme üzerinden bilgisayara aktaramayacağınız. Böyle bir işlem yapmak istiyorsanız öncelikle doğru mikrofon ve veri toplama ekipmanını edinmeniz gereklidir.

0 Kudos
Message 4 of 22
(7,034 Views)

Sesleri direk olarak duyamasakta steteskop ile dinleyebiliyoruz.buda kulak için geçerli frekansta olduğu anlamına geliyor sanırım.

Comport üzerinden veri gönderiyorum.iki veri aralığı 5 ms den aşagıya inemiyor.Dataları bu sebeple kaçırıyorum.tek tek veri aldığım içinde dizi oluşturup öyle çiziyorum.toplamda 100 örnek aldığımızı varsayarsak 5 ms x 100 = 500 ms bu benim toplam örnekleme zamanım oluyor sanırım.

mikrofon ile ilgili sıkıntımız yok.Hassas bir mikrofon edindim.RS232 üzerinden haberleşme ne açıdan sıkıntı oluşturur.

0 Kudos
Message 5 of 22
(7,025 Views)

RS232 ile sesin tüm frekanslarını örnekleyebilmek için gerekli olan veri miktarını toplayamazsınız. Bir saniyede 50.000 örneği RS232 üzerinden nasıl aktarabileceksiniz?

0 Kudos
Message 6 of 22
(7,020 Views)

pic ile zaten en fazla 10Khz örnekleyebiliyoruz.ADC çevrim süresi 20usn.Bu sürenin daha altına inmek donanım olarak mümkün değil.RS232 ile neden yüksek hızlarda veri aktarımı yapılamaz ?

0 Kudos
Message 7 of 22
(7,016 Views)

RS232 ile yanlış hatırlamıyorsam 115.200 bauds/saniye hızının üzerine çıkamazsınız. Bu hız ile "single point (32bit=8baud)" boyutlu 115.200/8=14.400 "single point" veri aktarabilirsiniz.

 

Peki örnekleme hızınızın ne olduğunu atlayalım bu kadar verinin yeterli olup olmayacağını siz daha iyi bilirsiniz. Gelelim mevcut alt yapınızla bu işi nasıl yapabileceğinize. Yerinizde olsam veriyi PIC içinde biriktirir 500ms ya da 1000ms de aralıklarla bilgisayara aktarırım. En yüksek örnekleme hızında alabileceğiniz kadar veriyi toplayıp bu işlemi yaparsanız gelen verinin analizini normal veri toplama kartlarından almış olduğunuz veri gibi yapabilirsiniz. Veri toplama, biriktirme ve bilgisayara aktarma kısımlarını hallettikten sonra bilgisayar üzerinde FFT işleminin nasıl olacağı üzerinde tekrar durabiliriz.

0 Kudos
Message 8 of 22
(7,011 Views)

Zafer Bey'in de belirtmiş olduğu gibi, standart PC seri iletişim portları üzerinde ulaşılabilen maksimum veri iletişim hızı 115,200 bit/saniyedir (bkz. Seri Port karşılaştırması). Tabii bu hıza çıkabilmek için, karşı tarafın da (sizin durumunuzda PIC işlemci) bu hızda sürekli veri gönderebiliyor olması gerekmektedir.

 

Öte yandan, saniyede 115,200 bit'in karşılık geleceği ölçüm örnek sayısı, PIC tarafında örneklemenin (ADC) kaç bit çözünürlüklü olduğu ile doğrudan ilişkilidir. Tahminimce PIC üzerinde 14-16 bit'lik bir ADC bulunacağından ötürü, saniyede gönderilebilecek örnek sayısı (115200 bit/saniye) / (16 bit/örnek) = 7200 örnek/saniye'yi pek geçemeyecekmiş gibi duruyor. Tabii bu da en iyi durumda. Eğer bu örnekleme hızını yakalayabilirseniz, FFT sonrasında 3.6 kHz.'e kadar olan ses sinyal spektrumunu görebileceğinize inanıyorum.

 

Zafer Bey'in diğer değinmiş olduğu konu olan, örnekleri PIC üzerinde ara hafıza üzerinde tutarak göndermek, çoğu DAQ kartında da yapılan yöntemdir. En basit kartlarımızın bile üzerinde en az 512 byte'lık FIFO ara hafıza bulunmaktadır. Bu ara hafızanın gömülü uygulamada uyarlaması için tahminimce PIC'in on-board Timer'ını ve Interrupt'larını içerir karma bir algoritma geliştirmeniz gerekecektir. Bu konuda iyi bir başlangıç noktası, Arduino mikrokontrolörlerine yönelik olan NI LabVIEW Interface for Arduino Toolkit olabilir. Arduino'da çalışan gömülü "sketch" ler PIC'de koşacak uygulamaya feyz verebilir diye düşünüyorum.

 

Kolaylıklar dilerim.

 

Candan

(Bay) Candan CANER
National Instruments Türkiye
0 Kudos
Message 9 of 22
(7,008 Views)

Mesajlarınızı okuyarak birkaç deneme yaptım . ilk olarak 20 usn aralıklar ile 500 tane örnek aldım (microişlemci daha fazlası için ram ayırmıyor.) yani toplamda 10 000 usn (10 msn) de 500 tane veri almış oluyorum. toplamış olduğum verileri 9600 baud rate hızında labview e aktarıyorum.Fakat sinyalin kalitesimi demek gerekiyor yoksa örnekleme zamanım mı düşük demek gerekiyor bilmiyorum sesin tam anlamıyla dalga formuna erişemedim.doğal ses sinyalini tam olarak alamıyorum. nerede eksiklik var bir türlü çözmedim.

 

başka bir soru arduino ile bu işlem daha mı kolay ? (öncelik pic ile yapmakta tabiki çünkü arduino ile hiç  çalışmadım)

0 Kudos
Message 10 of 22
(6,992 Views)