Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Scalare guadagni usando formato q1.15

Tipologie, strumenti di sviluppo, hardware e progetti

Moderatore: Foto UtentePaolino

0
voti

[1] Scalare guadagni usando formato q1.15

Messaggioda Foto Utentepeppe855 » 10 ago 2016, 19:38

Buona sera, sto' studiando da circa un mesetto il dspic30f o per lo meno le sue periferiche più importanti. Leggendo il manuale sul adc a 10bit mi sono reso conto che tale periferica permette di ottenere in uscite varie formattazioni per il risultato e tra queste c'è quella denominata q1.15 ora essendo io parecchio 'ignorante' dal punto di vista informatico ho approfondito la cosa ed ho scoperto che tale modalità di rappresentazione numerica è molto utilizzata nel mondo dsp, in quanto la maggior parte delle librerie messe a disposizione dalla casa madre richiedono in ingresso (e forniscono in uscita) valori compresi in decimale tra [-1 , 1) mentre in binario nella forma appunto 1.15 in cui il brimo bit è di segno e i restanti sono la parte frazionaria.
Bene fin qui nessun problema nel senso che ho compreso (o almeno credo) che qualsiasi numero decimale che sia inferiore all'unita puo' essere riportato nel formato q1.15 semplicemente moltiplicandolo per 2^15, queste operazioni di portarsi in q1.15 danno il beneficio di non portarti all' overflow (e di perdere poco in fatto di risoluzione), quindi in caso si debba eseguire un'operazione in cui i valori iniziali sono ad es:
a=0.3; b=0.1; io posso in fase di settaggio moltiplicare entrambi per 2^15 ottenendo:
int a=00100110 01100110; int b=00001100 11001100
ora da un libro di testo apprendo che se dopo tale operazione volessi fare il prodotto c=a*b; avrei un risultato a 32 bit in formato q2.30 che va quindi riportato in q1.15 facendo queste operazioni: shiftando di un bit a sinistra c<<1 (cosi ho il risultato in formato 1.31) e considerando come risultato i soli bit da 16 a 31 per poterli usare nelle operazioni seguenti con altri numeri a 16 bit.
Ora facendo queste operazioni in simulazione in MPLAB scopro che c= 00000000 00000000 11000010 10010000 e che quindi i bit da 16 a 31 sono tutti nulli.
Domande (finalmente):
1) Dov'è l'inghippo?
2) Ma questa notazione q1.15 prevede che i valori da portare appunto in q.15 siano gia' loro inferiori all'unita' (a=0.3 b=0.1 per citare l'esempio) , quindi se ad esempio ho da fare un calcolo in cui un parametro non è <1 come posso restare coerente con questa rappresentazione? (dovrei fare una pre-scalatura tipo decido a priori qual è il numero piu' grande con cui avro' a che fare e uso questo numero come base per portare tutti gli altri in per unit e poi portare tutti in q1.15 ?)
Spero che la domanda non sia troppo banale, come sempre grazie!
Avatar utente
Foto Utentepeppe855
20 2 7
Frequentatore
Frequentatore
 
Messaggi: 159
Iscritto il: 13 mar 2012, 19:40

0
voti

[2] Re: Scalare guadagni usando formato q1.15

Messaggioda Foto Utentepeppe855 » 11 ago 2016, 8:47

In pratica se dichiaro int a,b; long int c; ed eseguo come ho scritto sopra cioè a=0.3*32768; b=0.1*32768; c=a*b;
c<<1; il risultato è quello di sopra e mi risulta errato, se invece a e b non li dichiaro come variabili e faccio direttamente il calcolo c=(0.3*32768)*(0.1*32768);
c<<1;

allora i conti tornano, quale puo' essere il motivo?
Avatar utente
Foto Utentepeppe855
20 2 7
Frequentatore
Frequentatore
 
Messaggi: 159
Iscritto il: 13 mar 2012, 19:40


Torna a Realizzazioni, interfacciamento e nozioni generali.

Chi c’è in linea

Visitano il forum: Nessuno e 7 ospiti