Sonsuz ortalama alma?

Başlatan Maxim, 19 Ekim 2013, 12:31:24

Maxim

adc okuma yaparken ortalamasını alırız, 20 kere oku sonra onu 20 ye böl

işte aynı mantık ama sonsuz bir ortalama algoritması nasıl planlarız
realde sonsuz olmayacak elbette ama ben reset tuşuna basana kadar
belki 1 saatlik ortalama olur, belkide 3 günlük ortalama
fakat ben girişteki gerçek voltajı değil geçen süre zarfındaki tam ortalamayı görmek istiyorum

0-5 volt adc girişimizi sürekli ölçtüğümüzü düşünelim
giriş voltajımız 0 ile 5 volt arasında oynak
0.25 volt olabilir, 3.81 volta çıkabilir, 3.81 de 20 dakika kalabilir, 4.98 volta çıkabilir..
bütün hepsinin ortalaması lazım bana

selamlar

F®T

#1


 
ADCIN 0, AKIM
ORT=ORT+(AKIM+1)

A=A+1 

AKIM=ORT/A

LCDOUT $FE,$80," AKIM:" ,DEC AKIM

sürekli bir şekilde ortalama alır.ama bununda bir sonu olmalı yoksa ortada ne word kalır nede dword. :D




"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

Maxim

#2
sıkıntı o zaten :)
zamandan bağımsız ortalama değer lazım.

aslında basit bir matematiksel formülü olmalı

http://en.wikipedia.org/wiki/Mean
http://en.wikipedia.org/wiki/Mean_value_theorem

F®T

#3
gördüğün gibi çok basit zaten.her döngüde okur toplar ve okuma sayacındaki değere böler.daha nasıl olabilir?bende merak ediyorum.ayrıca dediğim gibi tek sorun uzun süre toplamadan dolayı değişken değerinin tanımlanmış değeri geçebileceği.onun için mutlak bir sınırlama getirilmeli.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

ete

Benzer bir konuda şöyle bir uygulama görmüştüm.
a) Toplam 10 birimlik bir dizi değişkeni tanımla Bu değişkenlere okunan ADC değerleri sırası ile yerleştirilecektir.
    DEG(9) değişkenine de değer yerleştirdikten sonra artık her okunan DEG(0) ra yerleştirilecektir.
b) Her ADC okumasını yaptıktan sonra  Dizi değerlerini bir üst sıraya kaydır. Böylece DEG(0) boşa çıksın oraya yeni okunanı yerleştir. Hepsinin toplamını alıp ortalamasını al. Bu ORT_YENI olsun. Bir önceki okuma sonunda hesaplanmış ORT_YENI değeri hesap sonası ORT_ESKI olarak atanacaktır. SOnra ORT_YENI+ORT_ESKI denilip ikiye bölünecek ve böylece ortalama almanın sürekli bir değerini elde etmiş olacaksın.
İşlem sırası şeklinde tarif edersek
1. ilk açılışta 10 adet ADC oku ve OKU(0-9) arasına yerleştir.
2. Bunları topla ve ORT_ESKI=TOPLAM/10 şeklinde hesapla.
3. ADC oku
4. OKU[9]=OKU[8] - OKU[8]=Oku[7] ....OKU[1]=OKU[0] şeklinde öncekileri bir yukarı kaydır.
5. OKU[0]=ADC
6. YENI_ORT=Hepsinin toplamı/10
7. ORT=(ESKI_ORT+YENI_ORT)/2
8. GOTO 3
şeklinde açıklanabilir.
Ete

   

F®T

hocam burda değişken değeri kendi değerini aşmazmı?çünkü resetlenecek zaman belli değil.bunun bir sınırı olmak zorunda değilmi?
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

Mucit23

Ete hoca kaydırma mantığını söylüyor sanırım.

birimlik dizi olacak. Dizinin küçük elemanına yeni adc değeri eklenir. Sonra dizi 1 birim yukarıya kaydırılır. Yani 0. birimdeki değer 1. birime gider. 8. birimdeki 9'a, daki ise çöpe gider.

Sonra dizinin ortalaması alınarak sürekli canlı bir değer elde edilir.  Bu girişteki gerçek voltajı verir

Ama anladığım kadarıyla Maxim onu istemiyor.

Şöyle birşey yapabilirsin. Ete hocanın anlattığı mantığı aynen uygula. Dizi sayısını arttırabilirsin. Bu algoritma ile elde ettiğin sonucu    düşük hafızalı bir sd karta kaydet. Her saniye bu işlemi yapsan elinde bir değer olacak ve bir günde 86400 değer eder. Her okuma sonunda bunları epproma yaz. Böylece bir günlük saniyelik olarak tüm değerler elinde olur. Ardından Ortalama Al tuşuna basılırsa eğer hafızadaki değerlerin ortalamasını kademe kademe alırsın. Hepsini tek seferde alamayabilirsin. Parça parça alırsın. Böyle bir mantık uygulanabilir.

Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

F®T

Mucit23 Hocam, Ete Hocamın dediğini anladım fakat dediğin gibi Maxım sabit bir süre sonra ortalamaya bakarım demiyor.istediğim zaman dediği için bu iş uzar gider.1 saatta olur 3 günde olur denince sorun oluyor.benim anlamadığım 1 saatte okunacak 100 değer ortalaması ile 5 gün sonra okunacak 1200 değer ortalaması arasında dünya kadar fark var .bunu düşünmek lazım.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

Mucit23

O Halde Ben olsaydım Ortalama al tuşuna her basılışta butona basılış zamanını not alırım. Butona ilk basıldığında işlemci çalışmaya başladığı zamanki  andan itibaren butona basılıncaya kadar sürede kaydedilen değerlerin ortalamasını alırım. En son butona basıldığında ne zaman basıldığını not almıştım. Birdaha basıldığında bu arada kaydedilen değerlerin ortalamasını alırım. Başka nasıl olur bilmiyorum...
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

Maxim

#9
Ete ustanın teorisi ilk bakışta bana mantıklı gelmişti
sonra düşündüm o şekilde gene sadece 10 tane değer aralığına sıkışmış olacağız

10 tane değeri aldık
her seferinde ilk değeri refresh ettik
geri kalanları bir sağa kaydırdık, ortalama almaya devam ettik
1 saat önce aldığımız değerlerin önemi kalmıyor o zaman
hatta 1 saniye önce aldığımız değerler bile anlamsız olmazmı?
diye düşünüyorum

picprojedekiler ne cevap verecek bakalım

F®T

Maxım senin işin çok zor görünüyor sana baya güçlü bir hafıza lazım.basit bir algoritma ile yaparsan haberimiz olsun. :D
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

pwm.c

#11
ADC sonuçlarının ortalama değerini aldıktan sonra bunu saklayıp yeniden ortalama sonucu alır ve eski sonuçla beraber tekrar ortalama alınabilinir. bu değeri yine saklayıp sonraki ile aynı işlemleri uygularsanız olur gibime geliyor.
sistematik olarak göstermek gerekirse:

A:
(10 adet ADC sonucu toplamı )/10=ESKI
B:
(10 adet ADC sonucu toplamı )/10=YENI
(ESKI+YENI)/2=ANAORTALAMA
ESKI=ANAORTALAMA
GOTO B


not: saçmalamışta olabilirim  ;D
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

Powered by EzPortal