Pagina 1 di 1

Calcoli Fixed-Point

MessaggioInviato: 20 nov 2012, 19:06
da cencia
Ciao A tutti del Forum,
vorrei esporre alcune mie perplessità riguarda a una cosa che sto studiando riguardo i calcoli con i dsPIC in generale.

Mi si dice che per rapprensetare a=2,4*10^{-4} in base 12 è 1,024. Ora a è un coefficiente moltiplicatico di una variabile e con e in base 24: I_{32}=a_{12}*e_{24} dove I_{32} è una variabile long int.
Quindi definisco una Macro come
Codice: Seleziona tutto
#define Macro(e) ((e>>12))
e tutto mi torna perché shiftando e di 12 posizioni e destra lo divido per 2^{12}, e il risultato è il $a=2,4*10^{-4}$.

Tutto chiaro fino a qua? nel senso: ho capito tutto bene fino a qua?

Re: Calcoli Fixed-Point

MessaggioInviato: 20 nov 2012, 19:09
da IsidoroKZ
Forse l'espressione base 12, base 24 e base 32 non sono corrette. I numeri sono in base 2, e il valore di un numero in fixed point dipende da dove si assume sia messo il punto decimale.

Se linki il documento che stai leggendo indicando la pagina, si puo` essere piu` precisi.

Re: Calcoli Fixed-Point

MessaggioInviato: 21 nov 2012, 12:42
da cencia
Allego argomento di interesse nel pdf.

Non sto capendo alcuni passaggi. Ripeto quello descritto sopra penso di averlo capito; è la seconda parte che non ho capito, riguardo alla rappresentazione di Ki.

mi puoi illuminare e darmi la chiave di lettura corretta?

Re: Calcoli Fixed-Point

MessaggioInviato: 22 nov 2012, 10:53
da cencia
IsidoroKZ :

qualcosa non è comprensibile?

Re: Calcoli Fixed-Point

MessaggioInviato: 22 nov 2012, 11:49
da IsidoroKZ
Si`, non capisco la tua domanda :(. Il documento che hai postato, che in forma completa si trova qui, riguarda la normalizzazione delle grandezze perche' possano essere rappresentate correttamente in un microcontrollore.

Se ho ben capito quello che sta dicendo e` che ha una grandezza intera rappresentata su 12 bit. Per farci su i conti "con la virgola" la moltiplica per 2^12, in pratica usa 24 bit di variabile intera denormalizzata (oppure pensa che ci sia un fixed point a destra del dodicesimo bit). Ma sui dettagli sono perplesso.

Meglio sentire anche qualche controllista digitale come ad esempio Foto Utentedimaios

Re: Calcoli Fixed-Point

MessaggioInviato: 22 nov 2012, 12:58
da TardoFreak
cencia ha scritto:... calcoli con i dsPIC in generale...

I dsPIC non sono una caso generale ma è il nome della linea di DSP (Digital Signal Processor) prodotta dalla Microchip.

Ciò detto,
Il documento a cui fai riferimento illustra il trucchetto che si usa per fare moltiplicazioni veloci con i mcircontrollori. In pratica si tratta di trasformare i valori in virgola mobile in numeri interi per poi moltiplicarli fra di loro.

Per fare questo si usa la notazione Qm,n che è ben descritta QUI. A questo link, gentilmente fornito da Foto Utentedimaios, ci sono anche esempi di implementazione in C.

Re: Calcoli Fixed-Point

MessaggioInviato: 22 nov 2012, 14:53
da dimaios
Foto Utentecencia, tutto quello vuoi sapere riguardo l'aritmetica a precisione finita relativamente all'analisi numerica dei segnali e' descritta in modo eccellente in questo documento scritto dal Prof. Gian Antonio Mian ( ho avuto l'onore di averlo come docente nel corso di Analisi Numerica dei Segnali all' Universita' di Padova e come contro relatore per la tesi di laurea e devo dire che e' stato un professore eccellente ed un uomo di grande elevatura, peccato che sia mancato pochi anni fa ).

Esistono fondamentalmente cinque problemi da affrontare :

[1] Rappresentazione numerica all'interno del processore
[2] Effetto delle operazioni matematiche nella propagazione dell'errore di approssimazione
[3] Effetto della quantizzazione dei coefficienti
[4] Scalamento delle variabili di ingresso/intermedie/uscita per ottimizzare la precisione
[5] Scelta della struttura numerica ottimale per eseguire i calcoli. Infatti a seconda della sequenza con la quale vengono eseguite le operazioni, la propagazione dell'errore varia ed anche sensibilmente.

Il punto [1] dipende dall'applicazione dalla casa produttrice del processore e dalle ottimizzazioni introdotte per il calcolo. Infatti ogni rappresentazione ha pro e contro.


I punti [2], [3] e [4] sono fondamentali per capire come si propagano gli errori e se il sistema rimane stabile a partire da un analogo stabile in floating point.

Il punto [5] invece e' lo step finale che viene dettato da un compromesso tra la facilita' di implementazione e la complessita' di una struttura al fine di preservare la stabilita' numerica e la precisione del risultato.

Il punto [2] ed il punto [5] sono chiaramente legati tra loro, la differenza e' che per un filtro numerico le strutture sono sostanzialmente prefissate mentre per algoritmi generici bisogna verificare "manualmente" caso per caso la propagazione dell'errore.

Concludo dicendo che con l'avvento dei processori floating-point sempre meno vengono fatte le dovute verifiche ed il risultato a volte e' sconcertante. Purtroppo si assiste ad un eccesso di fiducia nei confronti delle rappresentazioni in virgola mobile che pero' spesso sono implementate a singola precisione anziche' a doppia. Se i poli del sistema sono troppo vicini al cerchio unitario anche passando da double a float si puo' incorrere nel fenomeno dell'instabilita' per cui ...... la teoria dei DSP fixed point rimane un solido riferimento anche al giorno d'oggi.

Re: Calcoli Fixed-Point

MessaggioInviato: 22 nov 2012, 21:03
da cencia
Grazie del ripasso della teoria, qualche volta non fa male direi. Purtroppo di Elaborazione Numerica non ho fatto un granchè e adesso mi trovo a domandare il più possibile su questi argomenti.
Ma non demordo e vorrei riproporvi la domanda:
nell'articolo di parla esplicitamente di base per rappresentare un numero reale. Ad esempio, indicando con i la corrente reale e con #I la corrente digitalizzata, si può asserire che per rappresentare correnti con 12 bit si può ricorrere alla formula #I_{12} = i*\frac{4096}{20} dove i=20 è il riferimento massimo della corrente.
qualcuno mi sa spiegare il paragrafo 1.6 Integrazione che ho allegato nel file pdf?
è un paragrafetto di neanche una pagina, ma non riesco a metterlo a fuoco definitivamente, o meglio riesco a capirlo per il 70%, ma vorrei delle dritte aggiuntive in più.
se volete lo possiamo vedere assieme postando riga per riga, tanto saranno 10 le righe di interesse.
O_/ 4
#-o