Keresés: 
 Bejelentkezés
Nick:
 
Jelszó:
 
 
 
   
» Elfelejtettem a jelszavamat :'(
» Regisztráció
 Fórum témák
» Több téma
 Frissek
RSS hírforrások
  Hírek.rss
  Fórum.rss
  2012. Feb, 05. Vas
7:12:12
  Jelenleg 204 fő olvassa az oldalt
Fórum » Pontra menő témák » DSPIC lassan szoroz »
DSPIC lassan szoroz  
Témaindító: dawe, idő: Feb 17, 2010
Témakörök
Mikroprocesszorok » Microchip processzorok
Lapozás Méret: 1 / 1
(#640088) dawe Válasz • Feb 17, 2010
Sziasztok!

Csináltam egy digitális visszhangosító cuccot elektromos gitárhoz dsPIC30F3014-gyel, de egy kis problémába ütköztem. Az lenne a feladat, hogy pl. 20kHz-el mintát veszek a gitárjelből, ezt RAM-ban tárolom, aztán pedig hozzáadom a mostani érékhez egy régebbi érték n-szeresét (n: 0...1) és kirakom a kimenetre. C-ben írtam az egészet MPLAB C30 fordítóval.
Ezzel nincs is baj amíg a régi jelet egy egésszel (pl 2-vel) osztom és azt adom hozzá a mostanihoz, így működik is. Ha azonban egy float-tal akarok szorozni (pl 0.8), akkor meghal az egész mert nincs ideje kiszámolni. Kicsit utánajártam ennek a szorzás dolognak és kiderült, hogy az MPLAB szimulátor szerint 1998, igazi mérés alapján pedig kb 500 db utasítás alatt fejeződik be egy ilyen szorzás. Ezt pedig elég soknak tartom. A fordítóban az optimalizálás a leggyorsabbra van állítva, de így is nagyon lassú.

Van valakinek ötlete, hogy miért ilyen lassú a szorzás?

Köszi:
Dávid

(#640098) potyo válasza dawe hozzászólására (#640088) Válasz • Feb 17, 2010
Nem önmagában a szorzás a lassú, hanem a float típusú számok kezelése. Ugye először a minta egész szám, ebből kell float-ot csinálni, majd két float típust összeszorozni, és utána float-ot visszaalakítani egésszé, hogy a kimenetre kirakhasd. Nem tudnád az egészet egész számokra visszavezetni? A gitárjelből vett minta ugye eleve egész számú érték. Ha ezt 0..1 közötti valós szám helyett 0..255 közötti egész számmal szoroznád, az csak néhány utasítást jelent, és nem veszítenél el vele semmit, csak a szorzás eredményének a felső bájtját kellene használni a továbbiakban. Én ebbe az irányba mennék a helyedben.

(#640101) jym válasza dawe hozzászólására (#640088) Válasz • Feb 17, 2010
Üdv.

Nem értek a DSP részéhez, de a lebegőpontos műveletek nyilván alapból lassúak.

"A" 0.8-al való szorzása: ("A" * 8) / 10, csak vigyázz, hogy nehogy kifuss a tartományból a szorzás esetén.

Így csak egészpontos műveleted lesz.

Imi.

(#640107) dawe válasza potyo hozzászólására (#640098) Válasz • Feb 17, 2010
Jó ötlet, megpróbálom ezt megcsinálni. Igazából azért akartam float-tal szorozni, hogy menet közben egy potival be lehessen állítani hogy mennyi visszhang jöjjön vissza.
Azt gondoltam én is hogy float kezelés miatt van valami de szerintem akkor is sok az 500 utasítás egy 16bites dsPIC-től...

(#640114) potyo válasza dawe hozzászólására (#640107) Válasz • Feb 17, 2010
Potméter is egész számú értéket ad vissza az AD konverzió után, a feladat adja magát, hogy egész számokkal dolgozz.

Ki kellene elemezni, hogy pontosan mi okozza azt az 500 utasítást, de nekem nem tűnik soknak két konverzió és a float típusok szorzásánál.

(#640179) dawe válasza potyo hozzászólására (#640114) Válasz • Feb 17, 2010
Átalakítottam egész számokra. Kipróbáltam, a gitárjel kb 500 és -500 között mozog, így még 64-gyel tudok szorozni meg osztani hogy még beleférjen az int típusba. 64 állás meg bőven elég egy potihoz. Köszönöm a segítséget, nekem ez eszembe nem jutott volna!

(#640423) kaszarober4 válasza dawe hozzászólására (#640179) Válasz • Feb 18, 2010
Engem nagyon érdekelne ez a project!
Ha úgy döntesz, hogy publikálod, én nagyon kíváncsi lennék rá!
Esetleg a későbbiekben talán összekapcsolható lenne ezzel:
Midi lábkapcsoló

(#641389) dawe válasza kaszarober4 hozzászólására (#640423) Válasz • Feb 19, 2010
Elküldöm a kapcsrajzot, meg a progit ha tényleg érdekel. Csak még 1-2 dolog nem teljesen tökéletes. Szerintem hétvégén kész lesz

(#641395) dawe válasza dawe hozzászólására (#641389) Válasz • Feb 19, 2010
Mondjuk van egy olyan tippem, hogy az egészet meg lehetne csinálni egy jóval olcsóbb és egyszerűbb 8 bites AVR-rel (pl. ATmega8). Azért vettem dsPIC-et mert ebben van 12 bites A/D konverter, ami viszonylag jó minőséget produkál. Viszont a RAM és a DAC SPI porton megy, és még csak számolni se kell sokat, szóval szerintem menne AVR-rel is. Kell nagy órajel hogy elég gyors legyen az ADC, a DAC és a RAM-ok, aztán a többi már szinte mindegy. Mi a véleményetek?

(#641408) ha1drp válasza dawe hozzászólására (#641395) Válasz • Feb 19, 2010
Egész számok szorzása, osztása nem szabad, hogy probléma legyen egy DSPIC kontrollernek! Ráadásul erre találták ki. De azt kell, hogy mondjam, hogy ezt a feladatot, - ha kettő hatványaival osztanál (SHL, SHR)- a 16F sorozat is könnyen venné.
A RAM kezelés a DMA miatt, a codec, avagy a DAC kezeléséhez (sőt van olyan amibe be van építve) miatt meg végképp az egyik legjobb választás lenne a DSPic.

(#641721) dawe válasza ha1drp hozzászólására (#641408) Válasz • Feb 19, 2010
Ebben igazad van, de ahogy írtam, soros (SPI-os) RAM-ot és DAC-ot használok, szóval gyakorlatilag teljesen mindegy a kontroller típusa. Az a lényeg hogy gyors legyen az SPI.

(#649336) Xenen Mo válasza dawe hozzászólására (#640107) Válasz • Feb 28, 2010
dsPIC-ek AD-jával lehet közvetlenül fractalban mintavézelezni, és akkor így gyorsabban tudsz szorzásokat is végezni. Fractional-al szorzod meg. És ezt egy óra jel alatt eltudják végezni.

Következő 1 / 1
 HEStore.hu
 Hirdetés
TrainModules.hu