[Tech] Domanda di C

Leonardo Boselli leo@dicea.unifi.it
Mer 26 Maggio 2004 18:20:43 CEST


On Wed, 26 May 2004, Valerio Montagnani wrote:
> Devo amplificare dei valori acquisiti da un microfono secondo la specifica Little Endian di intel.
> I dati Little Endian misciano i bit nel seguente modo: supponiamo di avere un dato unsigned char (8bit).
> Sia il valore da rappresentare il numero: 84
> in binario il numero 128 è 10000000; secondo LE (Little Endian) 
> 84 si rappresenta così: 0100 0101, cioè i bit meno significativi del
> numero da rappresentare, stanno nella parte alta del registro della
> memoria.

ALT: little endian e bigendian si riferiscono all'ordine dei byte su
indirizzi di memoria di 8 bit. se carichi un registro da dati allineati
che sia BE o LE non cambia nulla.
Inoltre 84 in binario è 01010100 
Quando stai in un registro hai tutto ordinato e non serve fare i calcoli
separati.
> Per amplificare il numero ho pensato di disassemblare il registro in due variabili: left = 0100 e right = 0101 e quindi shiftare i bit verso sinistra, per esempio di 4 posizioni (all'atto pratico questo significa moltiplicare per 16 il valore 0100 e 0101 separatamente).
> Il risultato ottenuto è effettivamente quello voluto: 01000000 01010000. Per rappresentare questi ultimi numeri ho usato due variabili di tipo int.
> Il problema arriva ora: come faccio a rappresentare il numero correttamente amplificato in una variabile sola di tipo int secondo le specifiche LE?
> In altre parole come creo la sequenza 16 (01000000) 80 (01010000) in un solo intero?
> Spero di essere stato chiaro, grazie, Vale
 per niente chiaro, ma essendo il risultato di un campionamento audio
potresti utilizzare il logaritmo del numero, e farlo stare in 16 bit , che
bastano e avanzano (già 12 sarebbero esagerati !) 




Maggiori informazioni sulla lista flug-tech