RTV forum PL | NewsGroups PL

Jak wybrać między aproksymacją a interpolacją funkcji U(x) z pomiarami napięcia?

Aproksymacja czy Interpolacja

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Jak wybrać między aproksymacją a interpolacją funkcji U(x) z pomiarami napięcia?

Goto page 1, 2  Next

Valhalla
Guest

Mon Aug 24, 2009 4:25 pm   



Mam czujnik mierzący pewne parametry fizyczne. Wkładam go do cieczy, a on mi
wystawia napięcie do kilkudziesięciu do kilkuset mV w zależności od
zawartości roztworu.

Zależność napięcia U od stężenia x nie jest żadną znaną funkcją.
Jedyne co mam to tabelka U(x) dla 10-ciu wartości x i odpowiadającym im
napięciom U

100% - 70mV
90% - 150mV
....
0% - 655mV

Jak naszkicuje sobie wykres to jest to taki podwójny garb.

Chciałbym odczytywać wartości pośrednie ale nie wiem co mam zrobić i w jaki
sposób.

1. Czy wykonywać interpojację ?
2. Czy może aproksymować tę funkcję wielomianem i mając przybliżone F(x)
dopiero liczyć pośrednie wartości?

Gdzie mogę znaleźć kawałki kodu w C++ ?

Mario
Guest

Mon Aug 24, 2009 4:46 pm   



Valhalla pisze:
Quote:
Mam czujnik mierzący pewne parametry fizyczne. Wkładam go do cieczy, a on mi
wystawia napięcie do kilkudziesięciu do kilkuset mV w zależności od
zawartości roztworu.

Zależność napięcia U od stężenia x nie jest żadną znaną funkcją.
Jedyne co mam to tabelka U(x) dla 10-ciu wartości x i odpowiadającym im
napięciom U

100% - 70mV
90% - 150mV
...
0% - 655mV

Jak naszkicuje sobie wykres to jest to taki podwójny garb.

Chciałbym odczytywać wartości pośrednie ale nie wiem co mam zrobić i w jaki
sposób.

1. Czy wykonywać interpojację ?
2. Czy może aproksymować tę funkcję wielomianem i mając przybliżone F(x)
dopiero liczyć pośrednie wartości?

Gdzie mogę znaleźć kawałki kodu w C++ ?


Jeśli chcesz interpolować to i tak musisz wygładzić żeby usunąć błędy
pomiarowe. Możesz to robić odcinkami krzywą np 2 stopnia i po troszku
przesuwać odcinek na którym robisz aproksymację . Przy okazji generować
gęstszą siatkę danych. Możesz też użyć wielomianu na aproksymację
całości. Skoro są dwa garby to i jest przynajmniej jeden dołek. Czyli
musisz użyć co najmniej wielomianu 4 stopnia a najlepiej wyższego. Tylko
że 10 punktów pomiarowych to stanowczo za mało żeby to dokładnie
policzyć. Jeśli potrzebujesz. Nie napisałeś czy to ma być wyliczane w
mikrokontrolerze czy tylko chcesz sobie odczytać sam wartości pośrednie.
Jeśli dla siebie to wystarczy rysunek na papierze mm i krzywiki albo
arkusz i wykres z wygładzaniem linii. W przypadku procka to interpolacja
gdy nie masz mocy obliczeniowej a aproksymacja gdy nie masz dużo pamięci
na dokładną tabelę.

--
Pozdrawiam
MD

filug
Guest

Mon Aug 24, 2009 4:56 pm   



Dnia 24-08-2009 o 17:25:13 Valhalla <lol@lol.lol> napisał(a):

Quote:
[...]
Jak naszkicuje sobie wykres to jest to taki podwójny garb.

Chciabym odczytywa wartoci porednie ale nie wiem co mam zrobi i w
jaki
sposób.

1. Czy wykonywa interpojacj ?
2. Czy moe aproksymowa t funkcj wielomianem i majc przyblione F(x)
dopiero liczy porednie wartoci?

Ja bym sobie próbował znaleźć jakiś wielomian który opisłaby taki przebieg
jaki masz na wykresie (ale skoro na 10 wartościach masz dwa ekstema - to
chyba trochę trzeba by się napracować, zeby znaleźć coś sensownego). BTW
Matlab miał jakiegoś toolboxa do robienia takich rzeczy.

Ewentualnie - jeżeli otrzymana dokładność by Ci wystarczyła - aproksymował
bym funkcję opisującą odpowiedź przetwornika w odcinkach. Tzn. od jednego
punktu gdzie znasz wartość do drugiego punktu "sąsiedniego" wyznaczałbym
prostą (albo funkcję wyższego rzędu) i z równania prostej (albo funkcji
wyższego rzędu) wyznaczałbym wartość argumentu. Po przekroczeniu przez
odpowiedz przetwornika dziedziny funkcji aproksymującej użyłbym kolejnej
funkcji która opisuje kolejny "fragment".

Quote:
Gdzie mog znale kawaki kodu w C++ ?

Kawałki kodu na mnożenie stałych przez zmienną ... jedną zmienną?


--
filug
mailto: "dzi" - g, "e" - a, "j" - i, "k" - c

Valhalla
Guest

Mon Aug 24, 2009 4:58 pm   



"Mario" <mardyb@poczta.onet.pl> wrote in message
news:h6uclk$9g0$1@news.onet.pl...
Nie napisałeś czy to ma być wyliczane w
mikrokontrolerze czy tylko chcesz sobie odczytać sam wartości pośrednie.

Obliczenia w PC-cie.
Dane lecą z urządzenia po RS-ie. Producent nie dał nic innego jak tabelkę
11-tu wartości i maksymalny błąd pomiarowy +/- dla 10-40 stopni celsiusza.
Sondy są powtarzalne bardzo ale nijak nie opisane krzywą.

Mocy obliczeniowej dosyć.

Mario
Guest

Mon Aug 24, 2009 5:40 pm   



filug pisze:
Quote:
Dnia 24-08-2009 o 17:25:13 Valhalla <lol@lol.lol> napisał(a):

[...]
Jak naszkicuje sobie wykres to jest to taki podwójny garb.

Chciabym odczytywa wartoci porednie ale nie wiem co mam zrobi i w
jaki
sposób.

1. Czy wykonywa interpojacj ?
2. Czy moe aproksymowa t funkcj wielomianem i majc przyblione F(x)
dopiero liczy porednie wartoci?

Ja bym sobie próbował znaleźć jakiś wielomian który opisłaby taki
przebieg jaki masz na wykresie (ale skoro na 10 wartościach masz dwa
ekstema - to chyba trochę trzeba by się napracować, zeby znaleźć coś
sensownego).

Dwa garby. Między nimi musi być dolinka czyli trzy ekstrema. No i nie
wiadomo co ma być poza skrajnymi punktami. Do tego przydałyby się punkty
przegięcia ale to nie na takiej ilości punktów :)

BTW Matlab miał jakiegoś toolboxa do robienia takich rzeczy.

Pewnie octave ma też


Quote:
Ewentualnie - jeżeli otrzymana dokładność by Ci wystarczyła -
aproksymował bym funkcję opisującą odpowiedź przetwornika w odcinkach.
Tzn. od jednego punktu gdzie znasz wartość do drugiego punktu
"sąsiedniego" wyznaczałbym prostą (albo funkcję wyższego rzędu) i z
równania prostej (albo funkcji wyższego rzędu) wyznaczałbym wartość
argumentu. Po przekroczeniu przez odpowiedz przetwornika dziedziny
funkcji aproksymującej użyłbym kolejnej funkcji która opisuje kolejny
"fragment".

Gdzie mog znale kawaki kodu w C++ ?

Kawałki kodu na mnożenie stałych przez zmienną ... jedną zmienną?

Może sam chce pisać kod do robienia aproksymacji na wielomianach.
Stanowczo odradzałbym. Najlepiej poszukać gotowego solvera a w kod
wpisać tylko znalezioną funkcję.



--
Pozdrawiam
MD

Mario
Guest

Mon Aug 24, 2009 5:40 pm   



Valhalla pisze:
Quote:
"Mario" <mardyb@poczta.onet.pl> wrote in message
news:h6uclk$9g0$1@news.onet.pl...
Nie napisałeś czy to ma być wyliczane w
mikrokontrolerze czy tylko chcesz sobie odczytać sam wartości pośrednie.

Obliczenia w PC-cie.
Dane lecą z urządzenia po RS-ie. Producent nie dał nic innego jak tabelkę
11-tu wartości i maksymalny błąd pomiarowy +/- dla 10-40 stopni celsiusza.
Sondy są powtarzalne bardzo ale nijak nie opisane krzywą.

Mocy obliczeniowej dosyć.

Interpolacja nie bardzo wyjdzie w miejscach gdzie jest większa krzywizna
lub duża odległość między punktami. Musiałbyś najpierw zagęścić punkty
tak jak wspominałem ale to trochę roboty.
Najprościej dać wielomian począwszy od 4 stopnia i patrzeć jak leży na
punktach wzorcowych. Podnosisz stopień aż przestaje być widoczna poprawa
w układaniu się na punktach (możesz liczyć odchylenie standardowe w tych
punktach) lub zaczynają się dziwne osobliwości (dodatkowe ekstrema)
pomiędzy punktami lub na końcach zakresu. Pewnie zatrzymasz się koło 7
stopnia.

--
Pozdrawiam
MD

Mario
Guest

Mon Aug 24, 2009 5:51 pm   



Mario pisze:

Quote:
Pewnie zatrzymasz się koło 7
stopnia.

Miało być 6. 7 to już dość wysoki.


--
Pozdrawiam
MD

Zbych
Guest

Mon Aug 24, 2009 5:52 pm   



Mario pisze:

Quote:
BTW Matlab miał jakiegoś toolboxa do robienia takich rzeczy.

Na początek można zacząć od funkcji polyfit.


--
przeciez moje rozumowanie bylo bez skazy,
no sam bym wskoczyl do tego wulkanu,
ale kto by tak pieknie gwizdal...

filug
Guest

Mon Aug 24, 2009 5:56 pm   



Dnia 24-08-2009 o 18:40:12 Mario <mardyb@poczta.onet.pl> napisał(a):

Quote:
filug pisze:
[...]
(ale skoro na 10 wartościach masz dwa ekstema - to chyba trochę trzeba
by się napracować, zeby znaleźć coś sensownego).

Dwa garby. Między nimi musi być dolinka czyli trzy ekstrema. No i nie
wiadomo co ma być poza skrajnymi punktami.

Racja trzy ekstema Smile Mój błąd, a raczej przejęzyczenie :)

Quote:
BTW Matlab miał jakiegoś toolboxa do robienia takich rzeczy.

Pewnie octave ma też

Pewnie tak, ale ocatve niestety nie miałem w ręce więc nie będę zmyślać.

Quote:
Kawałki kodu na mnożenie stałych przez zmienną ... jedną zmienną?

Może sam chce pisać kod do robienia aproksymacji na wielomianach.
Stanowczo odradzałbym. Najlepiej poszukać gotowego solvera a w kod
wpisać tylko znalezioną funkcję.

Chyba nie skoro ma czujnik i potrzebuje czymś opisać jego odpowiedź.

--
filug
mailto: "dzi" - g, "e" - a, "j" - i, "k" - c

J.F.
Guest

Mon Aug 24, 2009 6:17 pm   



Użytkownik "Valhalla" <lol@lol.lol> napisał w wiadomości
news:h6ubb8$1oc$1@opal.futuro.pl...
Quote:
Zależność napięcia U od stężenia x nie jest żadną znaną funkcją.
Jedyne co mam to tabelka U(x) dla 10-ciu wartości x i
odpowiadającym im napięciom U

Czysto matematycznie: interpolacja jest funkcja dokladna we
wszystkich punktach zmierzonych.
Co dla N punktow wymaga wielomianu stopnia N-1, czy ogolnie funkcji
o N wspolczynnikach.
Jesli to bedzie interpolacja wielomianem, to cecha uboczna sa
zazwyczaj duze oscylacje na skrajnych obszarach.

Aproksymacja nie musi sie dokladnie zgadzac w punktach pomiarowych
i efektem jest wielomian stopnia znacznie nizszego.

W zyciowych przypadkach zawsze stosujemy aproksymacje - dzieki temu
bledy pomiarowe sie usredniaja a nie poteguja.
No chyba ze sie decydujemy na interpolacje w przedzialach
[funkcje sklejane].

Do aproksymacji trzeba zalozyc postac funkcji - na podstawie
teorii, literatury, intuicji wzrokowej, a moze wynikow dopasowania.
Jak juz wspominasz roztwor - to moze byc jakas funkcja wykladnicza
czy logarytmiczna - kiepsko aproksymowana wielomianami.

Quote:
Gdzie mogę znaleźć kawałki kodu w C++ ?

Ha, ha, a pare grubych ksiazek z teoria nie łaska najpierw
przeczytac ? :-P



J.

Mario
Guest

Mon Aug 24, 2009 7:21 pm   



filug pisze:
Quote:
Dnia 24-08-2009 o 18:40:12 Mario <mardyb@poczta.onet.pl> napisał(a):

filug pisze:
[...]
(ale skoro na 10 wartościach masz dwa ekstema - to chyba trochę
trzeba by się napracować, zeby znaleźć coś sensownego).

Dwa garby. Między nimi musi być dolinka czyli trzy ekstrema. No i nie
wiadomo co ma być poza skrajnymi punktami.

Racja trzy ekstema Smile Mój błąd, a raczej przejęzyczenie :)

BTW Matlab miał jakiegoś toolboxa do robienia takich rzeczy.

Pewnie octave ma też

Pewnie tak, ale ocatve niestety nie miałem w ręce więc nie będę zmyślać.

Kawałki kodu na mnożenie stałych przez zmienną ... jedną zmienną?

Może sam chce pisać kod do robienia aproksymacji na wielomianach.
Stanowczo odradzałbym. Najlepiej poszukać gotowego solvera a w kod
wpisać tylko znalezioną funkcję.

Chyba nie skoro ma czujnik i potrzebuje czymś opisać jego odpowiedź.

No ale nie ma funkcji kalibracyjnej. Wrzuca punkty do solvera i ma funkcję.


--
Pozdrawiam
MD

Krzysztof Tabaczyński
Guest

Mon Aug 24, 2009 9:02 pm   



Użytkownik "J.F." <jfox_xnospamx@poczta.onet.pl> napisał w wiadomości
news:h6uhvc$p9h$1@news.onet.pl...
Quote:
Użytkownik "Valhalla" <lol@lol.lol> napisał w wiadomości
news:h6ubb8$1oc$1@opal.futuro.pl...
Zależność napięcia U od stężenia x nie jest żadną znaną funkcją.
Jedyne co mam to tabelka U(x) dla 10-ciu wartości x i odpowiadającym im
napięciom U

Czysto matematycznie: interpolacja jest funkcja dokladna we wszystkich
punktach zmierzonych.
Co dla N punktow wymaga wielomianu stopnia N-1, czy ogolnie funkcji o N
wspolczynnikach.
Jesli to bedzie interpolacja wielomianem, to cecha uboczna sa zazwyczaj
duze oscylacje na skrajnych obszarach.

Aproksymacja nie musi sie dokladnie zgadzac w punktach pomiarowych i
efektem jest wielomian stopnia znacznie nizszego.

W zyciowych przypadkach zawsze stosujemy aproksymacje - dzieki temu bledy
pomiarowe sie usredniaja a nie poteguja.
No chyba ze sie decydujemy na interpolacje w przedzialach [funkcje
sklejane].

Do aproksymacji trzeba zalozyc postac funkcji - na podstawie teorii,
literatury, intuicji wzrokowej, a moze wynikow dopasowania.
Jak juz wspominasz roztwor - to moze byc jakas funkcja wykladnicza czy
logarytmiczna - kiepsko aproksymowana wielomianami.

Gdzie mogę znaleźć kawałki kodu w C++ ?

Ha, ha, a pare grubych ksiazek z teoria nie łaska najpierw przeczytac ?
Razz

Przecież to rozwiązania tego problemu wystarczy
znajomość wielomianu Newtona...

Pozdrowienia. Krzysztof z Tychów.

J.F.
Guest

Mon Aug 24, 2009 9:54 pm   



On Mon, 24 Aug 2009 22:02:38 +0200, Krzysztof Tabaczyński wrote:
Quote:
Użytkownik "J.F." <jfox_xnospamx@poczta.onet.pl> napisał w wiadomości
Gdzie mogę znaleźć kawałki kodu w C++ ?
Ha, ha, a pare grubych ksiazek z teoria nie łaska najpierw przeczytac ?
:-P

Przecież to rozwiązania tego problemu wystarczy
znajomość wielomianu Newtona...

Do _dobrego_ rozwiazania trzeba troche wiecej - np szczescia przy
zapuszczaniu programow bez pojecia co one robia :-)

J.

Valhalla
Guest

Mon Aug 24, 2009 10:40 pm   



"filug" <filug@dzimejl.kom> wrote in message
news:op.uy6bwrr3oh8uqq@localhost.localdomain...

Quote:
Ja bym sobie próbował znaleźć jakiś wielomian który opisłaby taki przebieg
jaki masz na wykresie (ale skoro na 10 wartościach masz dwa ekstema - to
chyba trochę trzeba by się napracować, zeby znaleźć coś sensownego). BTW
Matlab miał jakiegoś toolboxa do robienia takich rzeczy.

No właśnie. Jeśli ktoś jest w temacie to może wie czym zamienic 11 punktów
pomiarowych na aproksymowaną funkcję ? Smile To by było świetnym rozwiązaniem.
Mając fynkcję reszta to jedna linia kodu Smile

Waldemar Krzok
Guest

Tue Aug 25, 2009 11:19 am   



Valhalla schrieb:
Quote:
"filug" <filug@dzimejl.kom> wrote in message
news:op.uy6bwrr3oh8uqq@localhost.localdomain...

Ja bym sobie próbowa znale jaki wielomian który opisaby taki przebieg
jaki masz na wykresie (ale skoro na 10 wartociach masz dwa ekstema - to
chyba troch trzeba by si napracowa, zeby znale co sensownego). BTW
Matlab mia jakiego toolboxa do robienia takich rzeczy.

No wanie. Jeli kto jest w temacie to moe wie czym zamienic 11 punktów
pomiarowych na aproksymowan funkcj ? Smile To by byo wietnym rozwizaniem.
Majc fynkcj reszta to jedna linia kodu Smile

niestety nie zawsze. Na przykład jest sobie taka funkcja do oceny
zakłóceń wprowadzanych do sieci przez urządzenia energetyczne (flicker).
Jest to funkcja opisana w normach, bazująca na subjektywnych odczuciach
pewnej populacji. Niestety implementacja tej funkcji "z marszu" wymaga
przynajmniej 128 bitowej dokładności, a najlepiej jeszcze większej, bo
przy mniej dokładnych obliczeniach idzie się kurwić.
W twoim przypadku próbowałbym przybliżyć funkcję kawałkami
wielomianowymi 3 stopnia stosując sklejanie gładkie (spline). Jak masz
Matlab lub Octave, to możesz spróbować fitting, jak już ktoś tutaj
poradził, ale jak będziesz miał wzór funkcyjny, to radzę sprawdzić
czułość na dyskretne współczynniki, bo może się okazać, że zmiana
wartości któregoś współczynnika o 1LSB zmienia wartość funkcji kilkakrotnie.

Waldek

Goto page 1, 2  Next

elektroda NewsGroups Forum Index - Elektronika Polska - Jak wybrać między aproksymacją a interpolacją funkcji U(x) z pomiarami napięcia?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map