ADC Filtreleme

Başlatan selimkoc, 03 Nisan 2020, 00:29:46

selimkoc

Arduino Uno board kullanarak farklı filtrelerle ADC okuma ve filtreleme yaptım. Blogumda yayınladım. Merak edenler için :

https://elektrokod.wordpress.com/2020/04/02/adc-filtreleme/

argelojik

Güzel bir paylaşım olmuş teşekkürler. Acaba ADC ölçümü tamamlandıktan sonra, ne kadar süre sonunda bu 2 filtre işlemi sürüyor? Bunu da söyleyebilir misiniz? Yani kaç MHZ işlemci ile bu filtre işlemi kaç saniye (ns,us,ms)sürüyor? Bir de bir Adc sample time süresi ne kadar acaba? Bu soruların cevaplarını yazarsanız belki daha faydalı bir paylaşım olabilir.

baran123

#2
Yaptığınız şey maalesef bir filtre değil.
Bunun sebebi kullandığınız "filtre modeli" içerisinde ana sinyalin formunu(eleman yerlerini) değiştiren bubble sort kullanmanız.
Daha önce bir arkadaş benzer bir filtre modelini analiz etmişti.
https://donanimveyazilim.wordpress.com/2012/09/13/adc-girisine-filtre-mi-desem/

Unutmayın anlık olarak gördüğünüz "smoothing" tarzı değerler doğru bir filtre modeli değildir. Anlık değerler üzerinden yola çıkmak sizi yanıltır. Sinyal formunu görmek gerekiyor.

z

Bu islem neden filitre islemi degil?

Ana sinyalin elamanlarinin yerleri degistirilmiyor ki.

Oversampling ardindan ortalama aliniyor. Ortalamaya en uc degerler dahil edilmiyor sadece.

Eger oversampling yapilmadan 1/1 ornek alinsaydi dediginiz dogru olurdu.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

baran123

#4
Paylaşımı yapan arkadaş video da sıralama yaptığını belirtmiş.



https://hizliresim.com/VErsDY

Edit : Resim paylaşamıyorum. Bir sorun var mı ? Gözüküyor mu ?

z

#5
(Resim gorunmuyor)

Orda en kucuk ve en buyuk degerleri ayiklayabilmek icin siralama yoluna gitmis.

Siralasa da sorun degil.

32 ornek alip bu 32 ornekten 1 ornek olusturmak demek aslinda istenen frekansin 32 kati frekansda ornekleme yapmak ardindan 1/32 downsample yapmak demektir.

Dolayisi ile shannon teoreminden bahsedilecekse ornekleme frekansi f degil f/32 olmalidir.
f/32 frekansi ile ornek alininca da verdiginiz linkteki yazidaki gibi f/2 frekansina yakin frekansa sahip sinyalleri filitrelenmesi uzerine aciklama yapmak ve bu duzenegin filitre olmadigini iddia etmek hata olur.

(Bence)



Bana e^st de diyebilirsiniz.   www.cncdesigner.com

baran123

Sevgili z arkadaşın web sayfasında paylaştığı açıklamayı referans alarak tartışalım.

"Medyan filtresinde belirli adet veri ile dizi oluşturulur. Bu dizi küçükten büyüğe veya tersi sıralanır. Başından ve sonundan değerler kırpılarak ortadaki değerlerin ortalaması alınır. Bu uygulamada 32 elemanlı dizi oluşturdum. Her dizi elemanını 32 defa okuyup aritmetik ortalamasını aldım. Diziyi Buble Sort tekniği ile küçükten büyüğe sıraladım. Bu dizinin ortasındaki 16 değerin aritmetik ortalamasını aldım."

"Diziyi Buble Sort tekniği ile küçükten büyüğe sıraladım. Bu dizinin ortasındaki 16 değerin aritmetik ortalamasını aldım."

Sıralanmış bir dizinin ortasındaki 16 değeri almak ? Gerçek işaretin değiştiğine hem fikiriz dimi ?

Açıklamada belirli bir F verilmediği için ben bu yapıyı genel bir filtre olarak yorumluyorum. Belirli bir F için konuşmayalım şimdilik.

Düzenleme : imla hatası

z

"Medyan filtresinde belirli adet veri ile dizi oluşturulur. Bu dizi küçükten büyüğe veya tersi sıralanır. Başından ve sonundan değerler kırpılarak ortadaki değerlerin ortalaması alınır. Bu uygulamada 32 elemanlı dizi oluşturdum. Her dizi elemanını 32 defa okuyup aritmetik ortalamasını aldım. Diziyi Buble Sort tekniği ile küçükten büyüğe sıraladım. Bu dizinin ortasındaki 16 değerin aritmetik ortalamasını aldım."

Burda demek istedigi su;

32 ornek alip bu ornek icindeki en kucuk 8 adet veriyi attim
Geri kalan 24 veride en buyuk 8 adet veriyi de attim.

Geriye 16 veri kaldi. Bunun ortalamasini aldim ve tek bir sample urettim diyor.

Yani adam ortalama almak icin gereginden fazla ornek almis. Kotumu etmis?

Cok iyi etmis.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

baran123

Sıralanmış veri üzerinden işlem yapmayı doğru bulmuyorum. Çünkü baştan sondan örnek atıldığında bu işaretin hangi kısımları gitti kalan hangi kısmın ortalamasını aldık kestirilmiyor.
Genelleştirilmiş bir ifade için doğru bir model olmadığını düşünüyorum.
Bunun yerine belirli bir F için FIR filtre tasarlayıp kullanmak yada direk ortalama almak gece rahat uyumayı sağlar:) Neyse iyi çalışmalar.

Erol YILMAZ

Gerçek ADC örnekleri ortaya konulup analizi yapılmalı...

z

Yahu siralanmis veri yok. 32 kat fazla alinmis ornek var.

FIR filitreleme yapacaksan 1/32 frekanda 1 ornek alacaksin onunla islem yapacaksin.

Burda adam 32 ornek alip bunlardan bir ornek uretmis.

Oversanpling audio CDlerinde kullanilan bir teknikti. Bir bakmak lazim.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

selimkoc

Alıntı yapılan: argelojik - 03 Nisan 2020, 11:11:32Acaba ADC ölçümü tamamlandıktan sonra, ne kadar süre sonunda bu 2 filtre işlemi sürüyor? Bunu da söyleyebilir misiniz? Yani kaç MHZ işlemci ile bu filtre işlemi kaç saniye (ns,us,ms)sürüyor? Bir de bir Adc sample time süresi ne kadar acaba?

Kullandığım kart 16Mhz Arduino Uno (ATmega328P), okumalar arasında bekleme yok. Doğrudan analogRead() fonksiyonu ile okuttum. Ne kadar sürüyor? ölçmedim. Varsayılan değerleri kullandım.

selimkoc

#12
Alıntı yapılan: baran123 - 03 Nisan 2020, 11:25:04anlık olarak gördüğünüz "smoothing" tarzı değerler doğru bir filtre modeli değildir. Anlık değerler üzerinden yola çıkmak sizi yanıltır.

Anlık ortaya çıkan değerleri alttan ve üsten kırparak( medyan ort.) bunları elimine ettim zaten.

Şunu da belirteyim hızlı değişen bir sistemde bu filtreyi kullanmayız. Bu yavaş olan değişimler için uygun olur. Örnek: bu sistemi çizgi izleyen robotta kullanamayız.

selimkoc

Sistemde bazı değişiklikler yapıp sonucu gözlemledim. Optimum sonuç 16 adet analog verinin aritmetik ortalamasının alınıp 8 li bir dizi ile medyan filtresi uygulanması oldu. Sonuç hem hızlı hem de kararlı.

berat23

@baran123

median filter gayet bir filtredir. verileri sıralayıp birini seçerseniz de veri değişir, FIR filtreden geçirseniz de değişir. verinin değişip değişmemesinin filtre olup olmaması açısından anlamı nedir doğrusu hiç duymadım.

median filter, nonlinear bir işlemdir. gürültünün outlier tipinde, yani gürültünün anlık olarak olması gerekenden çok düşük ya da yüksek olduğu durumlarda kullanılmalıdır. ideal veriye böyle bir gürültü ekleyip muygun uzunlukta median filter'dan geçirirseniz filtrelenmiş verinin aslında nerdeyse gürültü eklenmemiş ideal veri olduğunu göreceksiniz.

FIR ise aslında filtrenin tepkisini değil, yapısını anlatır. FIR filtrede çıkış, mevcut an ve belirli bir süre öncesindeki girişlere bağlıdır. bu yolla farklı frekans tepkilerinde filtreler uygulayabilirsiniz. ki FIR filtre tasarım metodu da değildir, birçok FIr filtre tasarım metodu ve filtre tipi var. yani FIR dünyası sadece bir 'f' ile tanımlanamayacak kadar geniş. ayrıca low pas filter aslında dikkatli tasarlanması gereken bir filtredir. gürültüyü azaltır bu açık ama sinyalin frekans tepkisini düşürdüğü gibi ciddi gecikmeler yaratabilir.

ortalama alırsanız(moving average) low pass yani düşük geçiren bir FIR filtre yapmış olursunuz. filtre uzunluğu artarsa cut off frekansı da düşecektir.

ADCye gelecek olursak önce gürültü nedir, sinyalimiz nedir onu bilmek lazım. median filter, anlık büyük gürültüler gelen durumlarda çok işe yarar. mesela anlık glitch gibi bir gürültü varsa median süper süzerken diğer filtreler genelde sinyali yumuşatır. yumuşatma yani smoothing işlemi zaten bence 'sabundur', mümkünse yapılmamalıdır. ama gerçek dünyada herşey iyi gitmez ve sabun illa ki gerekir.

özetle filtre denen şey 'her zaman' sinyali bozar. önemli olan minimum, tolore edilebilir aralıkta bozup istenmeyeni de olabildiğince yok etmesidir. filtre tasarımı da magic değildir, neyin nerde kullanılacağı çok iyi analiz edilmelidir.