Kezdőoldal » Tudományok » Természettudományok » Ez matematikailag hogyan/mivel...

Ez matematikailag hogyan/mivel lehetne megoldható? [függvény visszakeresése mintavételi pontokból]

Figyelt kérdés

Tegyük fel, van egy periodikus, vagy erősen periodikus-szerű [pl.: cos(2*x)*3*e^(-x^2/240) | x>=0] hullámforma, amiről adott (elfogadható) sűrűséggel van nekem egy digitális mintavételezésem. Pl. -127 és +127 közötti egészes felbontással - magyarán 256 féle diszkrét értéken vannak ábrázolva a mintavételezés pontjai.


Amit szeretnék elérni, hogy a mintavételezett pontokból számolva legyen egy közelítő függvényem, ami esetén elég magát a függvény algebrai hozzárendelési szabályát eltárolnom, és abból az egy egyváltozós képletből az idő (mint változó) függvényében minden egyes mintavételi pontot újra tudok számolni.

Valami ilyesmi formában:

> Adott: f-függvény, a hozzárendelési szabály algebrai formája;

> Időtartomány felbontása: {t[1], t[2], t[3], ..., t[n]};

> Mintavételi pontok száma: n;

> Mintavételi pontosság: t[i+1] - t[i] | 0<i<(n-1) | i C N;

> Mintavételi pontok előállítása/számítása (minden esetben): y[i] = f(t[i]); y[i] :: i-edik mintavételi pont; t[i] :: i-edik időtartomány (az értelmezési tartomány i-edik felbontása)


Remélem érthető, hogy mire gondoltam.

Természetesen kisebb hibaeltérések elfogadhatók, de a minél elfogadhatóbb közelítési_pontosság/formula_kompaktság arány elérése a cél. (magyarán a függvény felírása se legyen irdatlan hosszú (pl. egy fél A4-es oldalnál több))


A függvényben benne lehetnek a legismertebb műveletek (szorzás, hatványozás, stb.) elemi függvények (szöggfüggvények, exp-függvények, logaritmus, előjel, inverzek, ect.), v. összegsor, produktum, esetleg integrált v. derivált, ha nagyon szükséges, de legjobb lenne mindig olyan, aminek a számolása számítógéppel algoritmizálható.


Példaként feltöltöttem egy apró illusztrációt is, hogy kb. mire gondoltam: [link]

A képen a felső sávban van pl. az, ami a digitalizált hullámjel. Sűrű mintavételezésnél szabad szemmel látszik is, hogy hogyan lehetne görbével összekötni az egyes pontokat, ami egy folytonos függvényt adna. Ez a folytonos függvény a második sávban van szemléltetve. Amit én valahogy vissza szeretnék keresni - aránylag tűrhető pontossággal - az magát a grafikont előállító egyváltozós függvény. Így a továbbiakban kizárólag a függvénnyel újra tudom generálni a mintavételi pontokat.



2015. febr. 26. 11:25
 1/5 2xSü ***** válasza:

Huhh… Szerintem amire neked szükséged van az egy Fourier-transzformáció, pontosabban egy diszkrét Fourier-transzformáció.


De ne nagyon kérdezz tőlem matematikai mélységekben, nagyon régen tanultam ilyet, akkor sem voltam 100%-ig biztos a dolgomban, azóta viszont sokat felejtettem. :-)


De ez egy mód arra, hogy véges sok mintavételezési pont ismeretében generálj egy olyan függvényt, ami – a kívánt pontossággal – illeszkedik a mintavételi pontokra. Persze itt egy végtelen szummáról van szó, így ritkán lesz ebből egy A4-es papírra felírható hosszúságú képlet, de kellő elhanyagolással elérhető egy kívánt hosszúságú függvény.


Tulajdonképpen az MP3 tömörítés is erre az elvre épít, ahogy ott is, itt is az van, hogy a képletet sok paraméter határozza meg, minél többet hanyagolsz el, annál pontatlanabbul illeszkedik a függvényed a mintavételi pontokra, viszont annál kevesebb adatot jelent ezen paraméterek leírása. Minél pontosabb az illeszkedés, annál több paramétert kell bevonni a képletbe.

2015. febr. 26. 11:52
Hasznos számodra ez a válasz?
 2/5 anonim ***** válasza:

Nagyon sok változós egyenletrendszert kéne megoldanod ahhoz, hogy erre az adatsorra egy függvényt illessz. Ha tényleg periodikus (vagy ha akár nem is az), akkor általánosan az


y=A1*sin(ot)+A2*sin(2ot)+A3*sin(3ot)+... végtelen függvénysorral próbálkoznék. A feladat az A1,A2... és az o (omega) meghatározása.


Ha nem követeled meg, hogy mind a 256 pont illeszkedjen, mert nem akarsz ilyen sok paramétert, akkor valami legkisebb négyzetek módszerét lehetne elővenni. A végeredmény és a számítás is mindenképpen nagyon bonyolult lenne, szóval nem sokat érnél vele. A gép sokkal lassabban számolná ki a függvényből az értékeket, mintha egy tömbből kikeresné a legközelebbit, és a különbséget lineárisan illesztené.


Ha mégis csökkenteni akarod ezt a kikeresési időt is, akkor meg az a legegyszerűbb, ha egyszerűen csökkented a mintapontok számát. Tehát ebből a 256 pontból kiválasztasz mondjuk 100-at vagy 50-et, vagy 20-at, azok közt pedig lineárisan közelítesz.


Persze lehet, hogy nem ez a célod, de nem írtad le, hogy pontosan mi.


Ha csak a kompaktság, azt nem nagyon tudod jobban csökkenteni a fenti módszernél. Ha nem magukat az adatokat tárolod, akkor a függvény paramétereit kell.

2015. febr. 26. 12:21
Hasznos számodra ez a válasz?
 3/5 A kérdező kommentje:

Magát az egész függvényt lehetne tárolni, mintavételi pontokat viszont kb. semmiképp.


Ez a szinuszokra való bontás lehet, hogy megfontolandó... Viszont akkor ez valójában hogyan is történne?

Mert ugye ami 100%, hogy mindig csak mintavételi pontjaim vannak, függvényformula az nincs, max. ha azt valahogy visszakeresem a mintavételi pontokból!!!


Amúgy konkrétan, amit szeretnék megcsinálni, az egy kezdetleges szoftveres csembaló szintetizátor; és itt a hangképzést úgy szeretném megoldani, hogy először egy hangmintát periodikus-szerű blokkokra bontsak (pl. húr érintése, megpengetés effektje, csengés, húr elengedése), azokra közelítő függvényt írjak fel, majd a programban csak ezeket a közelítő függvényeket tárolom, ezekkel számoltatom ki a hangmintát, és azt küldöm ki a hangkártyára.

Függvénnyel való felírási mód azért is lenne jó, mert akkor nem kell mindegyik félhanghoz egyesével hangmintákat tároljak, hanem az időváltozó szorzásával/osztásával tudom a hangmagasságot is imitálni.

2015. febr. 26. 12:38
 4/5 A kérdező kommentje:

Váááá!! Hát most látom, az Audacity tud olyat fájlbaexportálással, amire nekem itt szükségem van!! :D


Csúcs!

2015. febr. 26. 13:18
 5/5 anonim ***** válasza:
Ha az Audacity tudja, ami neked kell, az jó. De ha mégsem, akkor én továbbra is azt mondanám, hogy az ilyen függvényeket bizonyos pontokban rögzítsd, és a pontok közt lineárisan közelíts. Ettől még lehetnek az algoritmusban olyan paraméterek, amiket változtathatsz a hangfekvéstől függően.
2015. febr. 26. 23:05
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!