Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Le basi per implementare un algoritmo su DSP

Tipologie, strumenti di sviluppo, hardware e progetti

Moderatore: Foto UtentePaolino

1
voti

[1] Le basi per implementare un algoritmo su DSP

Messaggioda Foto Utentegiulia87 » 14 ott 2013, 11:08

Ciao a tutti,
dopo un po di mesi torno a rivolgermi a questo forum, questa volta non per questioni riguardanti elettronica analogica ma riguardanti la programmazione con DSP. Sono proprio al livello zero (nel senso che ho programmato in passato microcontrollori ed ho delle nozioni generali di programmazione) e dato che proprio da questo forum ho preso degli spunti e delle dritte utilissimi per me in passato, pur essendo una principiante, bhè.. ci riprovo :D

la mia domanda è la seguente:

voglio implementare un algoritmo su un DSP.
So che l'algoritmo ha una certa complessità (quantitativamente indicata dal numero di addizioni + numero di moltiplicazioni richieste), chiamamola C.
So che il segnale digitale da processare con l'algoritmo che "entra" nel DSP è il risultato della conversione a 25 kHz (Fc) e 24 bit (R) di un segnale analogico.
SO che il DSP ha una certa frequenza di clock (F).

Come faccio (=esistono formule, calcoli, etc) a dire se il mio DSP "regge" la complessità computazionale richiesta dall'algoritmo? Quali parametri devo guardare sul datasheet?

Perdonate se la domanda è proprio al livello zero :oops:

Grazie mille!
O_/
Avatar utente
Foto Utentegiulia87
125 1 2 7
Stabilizzato
Stabilizzato
 
Messaggi: 393
Iscritto il: 14 apr 2011, 21:47

1
voti

[2] Re: le basi per implementare un algoritmo su DSP

Messaggioda Foto Utentegrandegiove » 22 ott 2013, 8:39

Ciao Foto Utentegiulia87 ,

proviamoci. Credo che innanzitutto sia necessario prendere in esame le caratteristiche del DSP.

Quindi direi:

f= frequenza massima di clock;

esempio dsPic30f3013: up to 40 MHz

numero di cicli di clock per ogni istruzione;

esempio dsPic30f3013: "All DSP instructions are single cycle"

ora dobbiamo capire quante istruzioni servono per portare a termine ogni singola operazione dell'algoritmo

esempio dsPic30f3013: essendo un tranquillo DSP a 16 bit, dando uno sguardo ai blocchi aritmetici del micro, facendo qualche prova con un compilatore, considerando che si tratta di sample a 24 bit e che si parla di moltiplicazioni e addizioni e non ci è dato a sapere in quale percentuale sian presenti l'una e l'altra... per stare larghi possiamo ipotizzare un 8 istruzioni per ogni operazione

Mi sembra di capire che il segnale analogico sia già stato convertito in un a 24 bit e quindi non consideriamo i tempi di conversione A/D ma solo quelli relativi all'algoritmo.

Quindi direi che il limite di complessità dell'algoritmo può essere espresso come:

frequenza di campionamento del segnale da elaborare * c (complessità algoritmo espressa in numero di operazioni) * numero di istruzioni per ogni operazione * numero di cicli di clock per ogni istruzione < frequenza di clock massima DSP


esempio dsPic30f3013: 25kHz * c * 8 * 1 < 40 MHz ovvero c < 200

Io ci ho provato ;-)

Hope it helps! O_/
Avatar utente
Foto Utentegrandegiove
1.151 1 4 8
Expert
Expert
 
Messaggi: 517
Iscritto il: 18 ott 2010, 9:59

1
voti

[3] Re: le basi per implementare un algoritmo su DSP

Messaggioda Foto Utentekarl246 » 22 ott 2013, 9:43

Foto Utentegrandegiove nonostante tu sia già stato più che chiaro, mi permetto di aggiungere una temporizzazione che aiuta sempre a comprendere meglio. :-)



Praticamente bisogna garantire che gli N cicli di clock che costituiscono un periodo del segnale di campionamento siano sufficienti ad eseguire l'intera operazione sul segnale in ingresso.

frequenza di campionamento del segnale da elaborare * c (complessità algoritmo espressa in numero di operazioni) * numero di istruzioni per ogni operazione * numero di cicli di clock per ogni istruzione < frequenza di clock massima DSP


c (complessità algoritmo espressa in numero di operazioni) * numero di istruzioni per ogni operazione * numero di cicli di clock per ogni istruzione = N, ovvero il numero di cicli di clock necessario ad eseguire l'algoritmo, quindi :

N \times Tclock < Tcamp

da cui

Fcamp \times N < Fclock

:ok:
Avatar utente
Foto Utentekarl246
985 2 6 10
Frequentatore
Frequentatore
 
Messaggi: 138
Iscritto il: 10 ago 2010, 0:12

0
voti

[4] Re: le basi per implementare un algoritmo su DSP

Messaggioda Foto Utentegrandegiove » 22 ott 2013, 10:00

Avatar utente
Foto Utentegrandegiove
1.151 1 4 8
Expert
Expert
 
Messaggi: 517
Iscritto il: 18 ott 2010, 9:59

0
voti

[5] Re: le basi per implementare un algoritmo su DSP

Messaggioda Foto Utentegiulia87 » 22 ott 2013, 18:24

Foto Utentegrandegiove e Foto Utentekarl246,
grazie per la risposta!
quello che dite combacia con quello che avevo pensato... ma mi chiedo: chi programma DSP fa sempre questi calcoli prima o sono troppo non ideali?
In teoria, se ho un interrupt con frequenza pari alla frequenza di campionamento e durante questa interrupt il processore si occupa solo di questo processo (cioè del mio algoritmo) il calcolo mi sembra realistico..
Avatar utente
Foto Utentegiulia87
125 1 2 7
Stabilizzato
Stabilizzato
 
Messaggi: 393
Iscritto il: 14 apr 2011, 21:47

0
voti

[6] Re: le basi per implementare un algoritmo su DSP

Messaggioda Foto Utentegiulia87 » 22 ott 2013, 18:31

E avendo a disposizione questo DSP

http://www.ti.com/product/tms320c6454

da dove ricavo i parametri che mi servono per il calcolo? il datasheet non sembra chiarissimo..o meglio, per una neofita sembra un casino!

:mrgreen:
O_/
Avatar utente
Foto Utentegiulia87
125 1 2 7
Stabilizzato
Stabilizzato
 
Messaggi: 393
Iscritto il: 14 apr 2011, 21:47

0
voti

[7] Re: le basi per implementare un algoritmo su DSP

Messaggioda Foto Utentekarl246 » 22 ott 2013, 19:42

Foto Utentegiulia87
su questo link http://www.ti.com/general/docs/lit/getliterature.tsp?baseLiteratureNumber=spru732&fileType=pdf puoi trovare tutto quello che riguarda la CPU che hai a disposizione sul DSP che hai indicato.
Spulciando un po puoi trovare l'instruction set di cui dispone il processore, ed insieme trovi la spiegazione della funzionalità di ogni istruzione, ma anche il numero di cicli di clock di cui essa necessita.
Programmando in assembler è più facile stimare quanti cicli di clock ti servono per fare un'elaborazione (naturalmente ciò è vero fino ad una certa complessità del codice).
Quando invece si programma ad alto livello si perde un po' il contatto con la realtà hardware, al momento della compilazione non si sa come verrà sintetizzata ogni operazione, quindi non resta che fare una stima e 'mantenersi un po' larghi' al momento della scelta del DSP.
Dunque una stima del numero di cicli di clock per istruzione la puoi fare osservando il file che ti ho indicato (anche facendo una media brutale), poi serve un po' di buon senso....
Le considerazioni fatte da Foto Utentegrandegiove sono più che realistiche quindi puoi stare tranquilla.
Quello che ti dico è frutto di quello che ho imparato fino ad ora, è probabile che ci siano delle soluzioni migliori e che non conosco......
Ad ogni modo con queste considerazioni puoi già farti qualche idea :D
Avatar utente
Foto Utentekarl246
985 2 6 10
Frequentatore
Frequentatore
 
Messaggi: 138
Iscritto il: 10 ago 2010, 0:12

0
voti

[8] Re: Le basi per implementare un algoritmo su DSP

Messaggioda Foto Utentegiulia87 » 22 ott 2013, 22:15

Grazie mille!
O_/
Avatar utente
Foto Utentegiulia87
125 1 2 7
Stabilizzato
Stabilizzato
 
Messaggi: 393
Iscritto il: 14 apr 2011, 21:47

0
voti

[9] Re: le basi per implementare un algoritmo su DSP

Messaggioda Foto UtenteEcoTan » 6 mar 2014, 10:33

giulia87 ha scritto:In teoria, se ho un interrupt con frequenza pari alla frequenza di campionamento e durante questa interrupt il processore si occupa solo di questo processo (cioè del mio algoritmo) il calcolo mi sembra realistico..

Sarà banale ma lo dico lo stesso.
Se hai il prototipo, aggiungi due istruzioni alla ISR: una all'inizio per mettere alto un digital output e l'altra all'uscita per rimetterlo basso. Poi guarda il pin con l'oscilloscopio: gli impulsi devono mantenere la frequenza di campionamento senza saldarsi fra loro. Viva il realtime diretto!

Già che ci siamo, faccio un po' di autocritica: programmando in C, siamo sicuri che il mio metodo sia efficace? Non bisogna fargli un po' di tara per lasciare il tempo al salvataggio dei registri e quant'altro riguarda il funzionamento delle ISR?
Avatar utente
Foto UtenteEcoTan
7.720 4 12 13
Expert EY
Expert EY
 
Messaggi: 5420
Iscritto il: 29 gen 2014, 8:54


Torna a Realizzazioni, interfacciamento e nozioni generali.

Chi c’è in linea

Visitano il forum: Nessuno e 11 ospiti