Domanda

Ho una domanda sulla codifica di un algoritmo per un DSP TMS320C64xx di Texas Instruments in MATLAB:

Ho un'implementazione sciatta funzionante del mio filtro in MATLAB. Il mio obiettivo è utilizzare MATLAB Embedded Coder per convertire questo algoritmo in C che posso quindi importare in Code Composer Studio e caricare sul DSP.

Per fare ciò, so che ci sono alcune cose che devo fare per il mio codice MATLAB. Ad esempio, ho bisogno di pre-allocare lo spazio per le matrici in modo che sappia quale dimensione renderle (a meno che non voglia agitarmi con dati di dimensioni variabili). Tutto quel massaggiare il codice MATLAB in codice C'ish in modo che il codificatore MATLAB possa convertirlo lo capisco più o meno. Tuttavia, non ho idea di come assicurarmi che i miei tipi di dati (ad esempio i coefficienti del mio filtro) siano a virgola fissa anziché a virgola mobile, in modo che MATLAB Embedded Coder converta il mio codice in C che coinvolge solo tipi di dati a virgola fissa.

Quindi immagino che le mie domande generali siano:

1) Se C64xx è specificato come DSP a virgola fissa a 32 bit, significa che un compilatore genererà un errore se provo a utilizzare il tipo di dati float?

2) C'è un modo per garantire che MATLAB Embedded Coder non crei tipi di dati in virgola mobile?

3) Devo usare il MATLAB Fixed Point Toolbox?

Grazie a tutti, fatemi sapere se ci sono altre informazioni necessarie per rispondere alla mia domanda.

È stato utile?

Soluzione

  1. Puoi usare tipi di dati in virgola mobile ma, come sottolinea la risposta precedente, il DSP emulerà i float e l'esecuzione sarà molto più lenta. Questo tipo di esecuzione va bene per alcune operazioni numeriche in cui a) hai bisogno della precisione dei float b) e / o la conversione a punto fisso è tipicamente un dolore (es. radici quadrate) o non sempre fattibile, c) e / o queste operazioni non si verificano così spesso nel programma per assorbire la maggior parte dei cicli della CPU.

  2. Sì. C'è una casella di controllo nella finestra di dialogo delle impostazioni di configurazione di MATLAB Coder, nel riquadro Interfaccia, che dice "Supporta solo numeri puramente interi". Selezionando questo si assicurerà di non ottenere alcun tipo di dati in virgola mobile nel codice generato. Tuttavia, devi prima assicurarti di utilizzare solo tipi di dati interi / a virgola fissa nel codice. Questa opzione garantisce solo che non siano generati float: non genera automaticamente una versione del codice a virgola fissa o solo intera dal tuo codice MATLAB a virgola mobile.

  3. Per creare veramente un codice C a virgola fissa, devi prima convertire il tuo codice MATLAB a virgola mobile in uno a virgola fissa. Avresti bisogno del Fixed-Point Toolbox che ti permette di specificare le tue variabili come un oggetto FI e definire le regole delle operazioni a virgola fissa usando l'impostazione FIMATH. Dopo aver definito un tipo di dati a virgola fissa a 16/32 bit per tutte le variabili e le operazioni, è possibile simularlo, analizzare i risultati e iterarlo per modificare le impostazioni per ridurre al minimo gli overflow e gli errori di arrotondamento. Quindi puoi generare un codice C solo intero veramente intero che si comporterà esattamente come (o molto vicino) al tuo comportamento MATLAB a virgola fissa. Eventuali differenze che potresti riscontrare tra il codice MATLAB a virgola fissa e il codice C a virgola fissa saranno principalmente dovute a quelle introdotte dal compilatore di destinazione.

Il seguente link a un webinar registrato su questo argomento dovrebbe fornire una buona introduzione a questo processo di utilizzo degli strumenti a virgola fissa: http://www.mathworks.com/wbnr38838

HTH.

Altri suggerimenti

Posso solo rispondere alla tua prima domanda:

Il C64xx è un DSP a virgola fissa a 32 bit, ma il compilatore non si lamenterà se usi il virgola mobile.Il codice risultante verrà eseguito correttamente ma sarà (molto) più lento perché verranno emulate le operazioni in virgola mobile.

Il DSP C64xx può anche fare punto fisso a 16 bit e punto fisso misto a 32x16 bit.Più piccoli sono i tipi di dati che usi, più velocemente verrà eseguito il codice risultante.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top