Sari la conținut
ELFORUM - Forumul electronistilor

compresie date


Vizitator cosmin800

Postări Recomandate

  • Răspunsuri 13
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • cirip

    3

  • bogdanm

    2

  • sofian

    1

  • Cristiano

    1

Top autori în acest subiect

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 spre comentariu

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 spre comentariu

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 spre comentariu
Vizitator 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 spre comentariu

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 spre comentariu

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 spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări