Goto page Previous 1, 2
Name
Guest
Tue Jun 02, 2009 8:22 pm
ulyssess wrote:
Quote:
Teoretycznie możanby zwiększyc ilość pomiarów do np 100. W tym przypadku
lepiej by było jeszcze porównywac je i odrzucać szczególnie za duże/za małe
wartości. dopiero wtedy miałoby chyba to sens.
Mógłby przydać się filtr medianowy. Zasada jest trywialna: dla każdej
nowej próbki sortujesz bufor i wybierasz środkowy element = wynik
filtrowania.
ulyssess
Guest
Tue Jun 02, 2009 8:25 pm
Quote:
Ale tego chyba właśnie nie zajarzyłeś.
Mierz prąd co kilkanaście (czy ile tam trzeba) ms, każdy pomiar zapisuj w
pamięci.
Niech pamięć ma rozmiar 256 pomiarów. Po zapisaniu 255 komórki, zacznij
nadpisywać dane w komórce nr 0.
Średnią zaś licz co pomiar z zakresu od 1 do 256 komórek. Tu możesz
sterować sobie.
Załóżmy że mamy 250 pomiarów co 10ms. Czyli zapis do komórki 1 bedzie co 2,5
sekundy Jeżeli będziemy mieli skok prądu z 2 na 4 A to efekt przejścia z 2
na pełne 4 bedzie trwał 2,5 sekundy w skrajnym przypadku. To bardzo duże C
;)
Quote:
Dzięki temu średnią masz co kilkanaście ms liczoną z okresu od 1 do
256xkilkanaście ms (to może być nawet i 1 s).
Oczywiście pomiar pierwszych 256 próbek jest zafałszowany (bo były same
zera w pamięci).
Nie przesadzaj z długością, bo się bedzie muliło. Tak jak z za duzym C w
filtrze RC.
Lub R
--
Pozdrawiam Piotrek
www.tajemnicesw.cba.pl
ulyssess
Guest
Tue Jun 02, 2009 8:30 pm
Quote:
Mógłby przydać się filtr medianowy. Zasada jest trywialna: dla każdej
nowej próbki sortujesz bufor i wybierasz środkowy element = wynik
filtrowania.
Czyli po 10 pomiarach wyrzucam pierwszy, dodaje kolejny i znowu licze
średnią? Czy to bedzie lepsze niz srednia z kolejnych 10?
--
Pozdrawiam Piotrek
www.tajemnicesw.cba.pl
rpdrobny
Guest
Tue Jun 02, 2009 8:40 pm
Quote:
Załóżmy że mamy 250 pomiarów co 10ms. Czyli zapis do komórki 1 bedzie co
2,5 sekundy Jeżeli będziemy mieli skok prądu z 2 na 4 A to efekt przejścia
z 2 na pełne 4 bedzie trwał 2,5 sekundy w skrajnym przypadku. To bardzo
duże C
Niby racja
Zmieniasz prąd skokowo z 2 na 4 ampery, jak wrzucisz do Excela to masz
tablekę
po 10 ms 2,008 A
po 20 ms 2,015 A
po 100 ms 2,08 A
po 200 ms 2,15 A
po 500 ms 2,37 A
ale kto Tobie każe robić tak duży filtr. Tu właśnie jest pole do popisu i
optymalizacji okresu próbkowania i ilości próbek.
Zresztą masz do wyboru, albo duży kondensator albo trochę pamięci do
wykorzystania.
ulyssess
Guest
Tue Jun 02, 2009 8:48 pm
Quote:
ale kto Tobie każe robić tak duży filtr. Tu właśnie jest pole do popisu i
optymalizacji okresu próbkowania i ilości próbek.
Zresztą masz do wyboru, albo duży kondensator albo trochę pamięci do
wykorzystania.
Pewnie mając troche czasu pokombinuje z tym też. Ale filtr RC napewno
pozostanie może tylko z mniejszym C jeśli programowy sie sprawdzi.
--
Pozdrawiam Piotrek
www.tajemnicesw.cba.pl
John Smith
Guest
Tue Jun 02, 2009 10:17 pm
Quote:
A może też taki drobny uśredniający filterek programowy.
Nie zaszkodzi przecież.
Dla przykładu, zajmujesz kawałek pamięci, zapisujesz ją w kółeczko, a
pomiar polega na policzeniu średniej z tegoż obszaru.
Jak ilość próbek będzie wielokrotnością 2ki to i średnią łatwo się liczy.
No to zrobiłem też. Robie 10 pomiarów, dodaje do siebie i dziele przez 10.
Ale jeżeli każdy wynik jest inny ze zwględu na zakłucenia to niewiele to
daje.
To już lepiej brać 8 lub 16 próbek a dzielenie zastąpić przesunięciem wyniku
w prawo o 3 lub 4 bity.
K.
Zbych
Guest
Tue Jun 02, 2009 10:21 pm
ulyssess pisze:
Quote:
Mógłby przydać się filtr medianowy. Zasada jest trywialna: dla każdej
nowej próbki sortujesz bufor i wybierasz środkowy element = wynik
filtrowania.
Czyli po 10 pomiarach wyrzucam pierwszy, dodaje kolejny i znowu licze
średnią? Czy to bedzie lepsze niz srednia z kolejnych 10?
Nie średnią, a środkową i nie liczysz tylko szukasz.
--
przeciez moje rozumowanie bylo bez skazy,
no sam bym wskoczyl do tego wulkanu,
ale kto by tak pieknie gwizdal...
Zbych
Guest
Tue Jun 02, 2009 10:28 pm
rpdrobny pisze:
Quote:
Dzięki temu średnią masz co kilkanaście ms liczoną z okresu od 1 do
256xkilkanaście ms (to może być nawet i 1 s).
Zamiast marnować tyle pamięci można zrobić prosty filtr IIR. Efekt
będzie podobny.
--
przeciez moje rozumowanie bylo bez skazy,
no sam bym wskoczyl do tego wulkanu,
ale kto by tak pieknie gwizdal...
ulyssess
Guest
Wed Jun 03, 2009 4:11 am
Quote:
To już lepiej brać 8 lub 16 próbek a dzielenie zastąpić przesunięciem
wyniku
w prawo o 3 lub 4 bity.
K.
A jaka to różnica w działaniu filtra?
--
Pozdrawiam Piotrek
www.tajemnicesw.cba.pl
BartekK
Guest
Wed Jun 03, 2009 8:37 am
ulyssess pisze:
Quote:
To już lepiej brać 8 lub 16 próbek a dzielenie zastąpić przesunięciem
wyniku
w prawo o 3 lub 4 bity.
K.
A jaka to różnica w działaniu filtra?
Filtra - niewielka. Programu - ogromna. Przesunięcie w prawo to jedna
bitowa operacja asemblera, jeden cykl procesora. A dzielenie przez 10
jest operacją matematyczną wykonywaną programowo, zwłaszcza na avr który
nie ma sprzętowego dzielenia
--
| Bartlomiej Kuzniewski
| sibi@drut.org GG:23319 tel +48 696455098
http://drut.org/
|
http://www.allegro.pl/show_user_auctions.php?uid=338173
ulyssess
Guest
Wed Jun 03, 2009 2:14 pm
Quote:
Filtra - niewielka. Programu - ogromna. Przesunięcie w prawo to jedna
bitowa operacja asemblera, jeden cykl procesora. A dzielenie przez 10 jest
operacją matematyczną wykonywaną programowo, zwłaszcza na avr który nie ma
sprzętowego dzielenia
No fajnie tylko trzeba jeszcze pisać w asemblerze, czego nie robie, a avr z
dzieleniem programowym radzi sobie dość dobrze. Program gotowy na pomiar
napiecia i pradu z filtrem programowym(niewielkim) zajął mi 3k kodu. Zatem
miejsca mam jeszcze oporowo
--
Pozdrawiam Piotrek
www.tajemnicesw.cba.pl
BartekK
Guest
Wed Jun 03, 2009 3:10 pm
ulyssess pisze:
Quote:
Filtra - niewielka. Programu - ogromna. Przesunięcie w prawo to jedna
bitowa operacja asemblera, jeden cykl procesora. A dzielenie przez 10 jest
operacją matematyczną wykonywaną programowo, zwłaszcza na avr który nie ma
sprzętowego dzielenia
No fajnie tylko trzeba jeszcze pisać w asemblerze, czego nie robie, a avr z
dzieleniem programowym radzi sobie dość dobrze. Program gotowy na pomiar
napiecia i pradu z filtrem programowym(niewielkim) zajął mi 3k kodu. Zatem
miejsca mam jeszcze oporowo
Jest coś takiego jak kultura programowania, nawet jeśli ty nie widzisz
różnicy, to nie znaczy że w kodzie (po skompilowaniu) nie ma. Skoro
dzielenie przez potęgę dwójki kompilator może zamienić na jeden rozkaz
asemblera (kodu maszynowego) a do twojego dzielenia musi wrzucać
skomplikowaną procedurę, to różnica musi być. Choćby w prędkości
działania programu - nawet jak ci nie zależy na niej zbytnio, ani nie
wyciskasz ostatnich us z czasu procesora, to lepiej program pisać tak by
był maksymalnie wydajny i "płynny" (a nie stawał w bliżej nieokreślonych
miejscach na jakimś dzikim obliczeniu programowym na zmiennej
wielobajtowej na kilkanaście/dziesiąt ms), a potrzebne opóźnienia
"waity" były robione programowo w tych miejscach i w takiej wielkości
jaką zaprojektujesz, a nie "jak wyjdzie"
--
| Bartlomiej Kuzniewski
| sibi@drut.org GG:23319 tel +48 696455098
http://drut.org/
|
http://www.allegro.pl/show_user_auctions.php?uid=338173
SĹawomir Szczyrba
Guest
Wed Jun 03, 2009 6:14 pm
Może ulyssess trolluje, a może i nie... Ale pisze :
Quote:
No fajnie tylko trzeba jeszcze pisać w asemblerze, czego nie robie, a avr z
Uwierz w kompilator.
On naprawdę nie jest zupełnie głupi
(no i jest jeszcze operator >> ;)
Sławek
--
________
_/ __/ __/ 17. Fizyk do konca zycia nie ucieknie przed grupa obrotow.
\__ \__ \_______________________________________________________________
/___/___/ Sławomir Szczyrba steev/AT/hot\dot\pl
ulyssess
Guest
Wed Jun 03, 2009 6:34 pm
Quote:
No fajnie tylko trzeba jeszcze pisać w asemblerze, czego nie robie, a avr
z dzieleniem programowym radzi sobie dość dobrze. Program gotowy na
pomiar napiecia i pradu z filtrem programowym(niewielkim) zajął mi 3k
kodu. Zatem miejsca mam jeszcze oporowo
Jest coś takiego jak kultura programowania, nawet jeśli ty nie widzisz
różnicy, to nie znaczy że w kodzie (po skompilowaniu) nie ma. Skoro
dzielenie przez potęgę dwójki kompilator może zamienić na jeden rozkaz
asemblera (kodu maszynowego) a do twojego dzielenia musi wrzucać
skomplikowaną procedurę, to różnica musi być. Choćby w prędkości działania
programu - nawet jak ci nie zależy na niej zbytnio, ani nie wyciskasz
ostatnich us z czasu procesora, to lepiej program pisać tak by był
maksymalnie wydajny i "płynny" (a nie stawał w bliżej nieokreślonych
miejscach na jakimś dzikim obliczeniu programowym na zmiennej
wielobajtowej na kilkanaście/dziesiąt ms), a potrzebne opóźnienia "waity"
były robione programowo w tych miejscach i w takiej wielkości jaką
zaprojektujesz, a nie "jak wyjdzie"
Ja rozumie że jesli bym pisał oprogramowanie z bardzo długim kodem to może i
miałoby to znaczenie i pewnie wtedy bym sie nad tym pomęczył trochę. Przy
tym projekcie robię tak a nie inaczej z innych wzgledów, a po drugie nie dam
sie kolejny raz wciagnąć w dyskusje na temat wyzszości tego języka
programowania nad innym.
--
Pozdrawiam Piotrek
www.tajemnicesw.cba.pl
Goto page Previous 1, 2