Hei
(Löytyykö VB6 interpolointi osaa)
Olen nyt vähän "häirikkö?", kun kyselen kaikkea mahdollista.
Kirjoitan softaa erääseen mittausjuttuun. luen filestä arvoja jotka softassani esitän grafiikkana, yritän tehdä itse graph´in ja käytän "Pset metodia" mutta data määrä on aika harva näytön kokoon nähden, mitenkähän voisin interpoloida lisää dataa jotta pisteet muodostaisivat yhtenäisen viivan.
vaakasuunnassa tulee 720 pistettä.
t. E
Piirrä graafi pistejoukon sijasta viivoina pisteestä toiseen.
ok kyllä se käy, mutta tämä mitattava signaali on analogista ja käyrä pitäisi "smoothen" eli pyöristellä, viivoilla tulee kantikasta.
t. E
erkki kirjoitti:
mitattava signaali on analogista ja käyrä pitäisi "shoothen" eli pyöristellä, viivoilla tulee kantikasta.
Koodivinkeistä löytyi Cubic Interpolation. Se on kylläkin tehty VB.NET:illä, mutta sitä tuskin on kovin vaikea portata VB6:lle. Sinuna en kylläkään tekisi mitään uutta ohjelmaa noin vanhalla ohjelmointikielellä.
Mutta kahden pisteen välissä paras interpolaatio on lineaarinen. Jos lisäät siihen jonkun sileän funktion, niin se ei anna kaikissa kohdissa parasta interpolaatiota. Kyllähän kantikaskin viiva voi olla yhtenäinen riippuen relatiivitopologiasta.
totta on että aika ajaa ohi VB6:sta. tiedoksi että VB6 on ainoa mitä osaan ja aika ei nyt riitä opiskelemaan uutta, teen näitä sovelluksia oman, toisen harrastuksen käyttöön ja ihmeen hyvin ne täyttävät sen paikan. Ne valmiit MSchart´it eivät oikein käy, koska vaaka-asteikolla pitää liikkua edestakaisin 2 kertaa (tässä tapauksessa kehää 720 astetta, 180 >, 180 <, 180 >, 180 <) tuo cubic näyttää oikealta mutta täytyy yrittää jumpata se VB6:lle.
t. E
Jaska kirjoitti:
Mutta kahden pisteen välissä paras interpolaatio on lineaarinen. Jos lisäät siihen jonkun sileän funktion, niin se ei anna kaikissa kohdissa parasta interpolaatiota.
Voiko näinkään sanoa? Interpolaation hyvyyden arvioinnissa oleellista olisi tietää, mitä niiden kahden pisteen välissä todella tapahtuu. Jos näytteistys on niin tiheä, että lineaariapproksimaatio voidaan kahden pisteen välillä tehdä, lineaarinen interpolointi lienee toki paras vaihtoehto, mutta aloittajan tapauksessahan näin ei ilmeisesti ollut. Lisäksi tietenkin vaikuttaa sekin, paljonko ja millaista virhettä ollaan valmiit sietämään.
Jos on etukäteen tiedossa, millaista funktiota mittausdata noudattelee, käyräsovite voisi olla myös varteenotettava vaihtoehto. Sovite ei kulje mittauspisteiden kautta, mutta tarjoaa graafisen sovituksen ja sitä kautta myös mahdollisuuden myös hieman arvioida mittauksen oikeellisuutta.
Hieman myös kiinnostaa, että mitä systeemissäsi mitataan ja mitä varten.
Jos tietäisi näytteenottotaajuuden ja näytetistettävän signaalin kaistanleveyden, niin pystyisi tekemään huomattavasti lineaarista interpolaatiota laadukkaamman interpolaation. Jos nyt mietitään vaikka CD-levyä (näytteenottotaajuus 44100Hz, kaistanleveys noin 22kHz), jossa olisi 11020 Hz taajuinen ääni, niin kyllähän tuosta tulee lineaarisesti interpoloiden erittäin huonosti todellista äänisignaalia mallintava.
Sovellus on bensiini ottomoottorin sylinterin paineen mittausta, eli pyörivän kampiakselin yhden asteen välein otetaan näyte sylinterinpaineesta (erikoissytytstulppa jossa paineanturi) kesto on 720 astetta eli täysi 4-tahti työkierto. arvot otetaan PC:lle File:ksi. Tämä file luetaan ohjelmallani. Graafinen esitys on siis P-V diagrammi (Carnot kiertoprosessi, paine vs kampikulma). edestakaisin kulkeva X akseli kuvio muodostaa "painearvosilmukan" jossa voidaan tarkkailla sylinterinpaineen kehitystä täyden työkierron aikana. Kyse on kilpamoottoreiden kehittämisestä (suomeksi, virittämistä). sovellus on muuten valmis mutta näytepisteeet ovat kovin harvassa. Näytteitä ei saa enempää koska käytettävissämme oleva hardware on hidas tähän tarkoitukseen. mittaustulostarkkuus on kylläkin riittävä ja tarkoituksen mukainen, mutta haluaisin "harrastuksen nimissä" kauniimman käyrän.
"Cubic Interpolation" sovellus, joka on koodivinkeissä on juurikin sellainen mikä sopisi, mutta se on kirjoitettu VB.net:illä enkä osaa kääntää sitä VB6:en
Eipä tuosta valmiista koodista tarvitse ottaa muuta kuin kaava, jos se ole ensimmäisen viestin perusteella ongelma. Sitten voit rakentaa ympärille kaiken muun tarvittavan.
Aihe on jo aika vanha, joten et voi enää vastata siihen.