Jump to content
ELFORUM - Forumul electronistilor

compresie date


Guest cosmin800

Recommended Posts

  • Replies 13
  • Created
  • Last Reply

Top Posters In This Topic

  • cirip

    3

  • bogdanm

    2

  • sofian

    1

  • Cristiano

    1

Hm... Interesant subiect, dar nu cred ca l-au abordat prea multi. :)

 

Trage un ochi la linkul asta: http://www.piclist.com/techref/method/c ... bedded.htm

 

Sau la asta:

http://library.lanl.gov/numerical/bookcpdf/c20-4.pdf dar ai grija ca nu e ptr cei slabi de inger ;)

 

Pentru o chestie mai generala cauta pe net "Huffman compression".

 

Cod moca cred ca e mai greu de gasit, dar daca dibuiesti algoritmul, poate iti scrii singur codul.

 

Cirip

Link to comment

Vrei compresie sau decompresie? E important. Compresia ocupa in general mai multe resurse. De exemplu, Huffman-ul pomenit mai sus de Cirip nu-l vad realizat pe un PIC. Eu am implementat mai demult pe PC o treaba din asta si m-am speriat cand am vazut cam cat de mult poate sa ocupe. Pe de alta parte, pentru 450 bytes pot exista metode mai simple. Descrie ceva mai exact problema. Ce vrei sa comprimi si unde (pe PIC sau in alta parte)? Daca decomprimi pe PIC, unde vrei sa decomprimi (in ce memorie)? Samd :)EDIT: citind mai atent, se pare ca vrei sa comprimi pe PIC. Nasol :) Astept cu interes detalii despre ce vrei sa comprimi. Poate scapi cu un RLE ;)

Link to comment

Compresia de date e un aspect destul de dificil de abordat cu resursele limitate ale unui microcontroller (mai ales unul pe 8 biti) si conduce in majoritatea cazurilor la un impact serios asupra vitezei de lucru. Daca ne dai ceva mai multe detalii despre aplicatia ta, poate gasim si alte metode de eficientizare.

Link to comment
Guest cosmin800

pai e vorba de nistea peak points de la un decodor adc, care stocate in memorie pentru prelucrare ulterioara, prelucrarea nu se poate real time deoarece implca calcule destul de complicate in float, tin sa precizez ca picul este un 18f2520 la 32 de mhz ...altceva nu mai stiu ce sa spun.

 

rutine din calculator este ...

unde v este un array de 400 de bytes ...

void decode(int proc,int z_limit,char *out,size_t size)

{

int p=0,i=0;

float sum=0;

float med=0;

float cp75=0;

float exp=0;

 

memset(out,0,size);

for(i=0;i

//printf("sum =%.3f\n",sum);

med=sum/z_limit;

//printf("med= %.3f\n",med);

cp75=(float)proc/100*med;

//printf("cp75=%.3f\n",cp75);

exp=2/(float)z_limit+1;

//printf("Exponent=%.3f\n",exp);

for(i=z_limit;i

{

if((float)v>cp75)

{

strcat(out,"0");

med=(((float)v-med)*exp)+med;

cp75=(float)proc/100*med;

}

else

{

med=(((float)(v+v[i+1])-med)*exp)+med;

cp75=(float)proc/100*med;

strcat(out,"1");

i++;

};

}

}

Link to comment

Offf, iti scrisesem un pomelnic, dar mi-a crapat explorerul si s-a pierdut.Pe scurt: de ce lucrezi in float si nu lucrezi in intregi cu semn? Cred ca ar fi mai rapid.Cirip

Link to comment

pe int nu mi-au iesit calculele cum trebuie

Poti fi mai concret? Sau vrei sa ramai neconditionat pe float si calculele intregi nu prezinta nici un interes? Ce precizie iti trebuie (in procente)?Cirip
Link to comment

Cam nasol. Datele astea au vreun fel de distributie mai speciala in timp? De exemplu, se repeta in general unele din ele? Sunt intr-o anumita secventa care poate fi prezisa? Lucruri de felul asta. Chiar si cu un algoritm f. bun de compresie (si practic imposibil de implementat pe PIC) e putin probabil sa poti comprima prea tare 450 bytes de date complet aleatoare ... cantitatea de informatie e mult prea mica.

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now



×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.Terms of Use si Guidelines