Il sito ARI Nazionale A.R.I.

Associazione Radioamatori Italiani

Sezione N° 4402 "Basso Ferrarese" LAGOSANTO (FE)

 

Home Su Sommario

Articolo2
Home Su

 

[In allestimento]

Home
La Sezione
Novità
Tecnica
Normativa

Introduzione alla tecnica DSP


L'elaborazione e la riconversione D/A


di Diego Armari, IW4DN

Proseguiamo   questa  breve  serie   di   appuntamenti
dedicati  all’elaborazione digitale dei segnali,  iniziata
con  l’uscita numero 8/95 di RadioRivista e proseguita con
un  secondo articolo dedicato alla conversione A/D,  dando
uno  sguardo al vero e proprio cuore dell’intero  sistema:
il  processore. Fino ad ora abbiamo infatti parlato  della
possibilità   di  trattare  matematicamente  un   segnale,
senza  trascurare di mettere in rilievo  le  tecniche  che
consentono  di  convertirlo da analogico a  digitale;  ora
vedremo   con   quali   strumenti   siano   possibili   le
elaborazioni  suddette  e,  per  concludere   la   sezione
dedicata  "all’hardware  ", daremo  un  cenno  anche  alla
problematica   della   riconversione   da   digitale    in
analogico,   indispensabile  per  ripresentare  all’uscita
della  catena di elaborazione un segnale utilizzabile  nei
modi consueti.
La prima domanda che sorge è la seguente: poiché si  è
già  accennato  al  fatto  che le operazioni  da  compiere
sulle   sequenze  di  bit  sono  per  la   maggior   parte
costituite  da  moltiplicazioni,  somme  o  rotazioni,   è
necessario  ricorrere  ad hardware  specifico  oppure  può
bastare   un  normale  microprocessore  coadiuvato   dalla
solita   schiera  di  chips  periferici?  La  risposta   è
semplice: ricorriamo a ciò che costa meno.... In linea  di
principio,   nulla   vieta   di   adoperare   un   normale
microprocessore  per  l’applicazione  degli  algoritmi  di
calcolo  DSP,  gli unici requisiti da soddisfare  sono  la
velocità  di esecuzione, che deve essere tale da garantire
di  trattare i campioni in ingresso "in tempo reale", e la
precisione, che nella fattispecie si può misurare  con  la
lunghezza  delle parole binarie capaci di essere elaborate
dal  processore.  In un prossimo articolo  vedremo  meglio
quali  siano le operazioni matematiche principali  che  si
debbono  compiere durante l’elaborazione dei segnali;  per
ora  accennerò al fatto che per la maggior parte  di  esse
(convoluzione,  trasformata  di  Fourier,  filtraggio)  lo
svolgimento veloce di moltiplicazioni è essenziale  e  che
la   precisione   oggi  ritenuta  sufficiente   è   quella
ottenibile  con  parole  binarie  lunghe  16  o  32   bit.
Sembrerebbe  quindi  che,  in  applicazioni   un   pochino
spinte,  un  processore Pentium o similare sia adeguato...
ma  purtroppo  è  anche esageratamente costoso,  in  virtù
della  sua  natura  di processore "general-purpose"  (cioè
passibile di impiego pressoché universale). Ecco  spiegato
il  motivo  della proliferazione di processori  progettati
espressamente  per il DSP con l’intento di ottimizzare  le
prestazioni  per  le operazioni indispensabili  (leggi  le
moltiplicazioni)  e  al  contempo  presentare   un   costo
unitario più contenuto dei processori general-purpose.
Nello  spirito  di questa serie di articoli,  entriamo
allora nel dettaglio ed analizziamo le caratteristiche  di
una  famiglia di processori DSP sul mercato fin  dal  1983
ed  oggi  largamente impiegata dai progettisti: si  tratta
dei    processori   TMS320xxx   prodotti    dalla    Texas
Instruments.
Tutti   gli   integrati   di  questa   famiglia   sono
realizzati  in tecnologia CMOS, e permettono frequenze  di
clock fino a 35 Mhz con un parallelismo interno di 16  bit
(che  salgono  a 32 per l’Aritmetic Logic Unit  ed  alcuni
registri  coinvolti nella moltiplicazione).  A  bordo  dei
processori sono previsti fino a 4K di ROM o EPROM  per  la
memorizzazione  del software di controllo ed  elaborazione
(che  può  essere protetta dagli accessi  in  lettura  per
tutelare il copyright del software memorizzato), e fino  a
256  words  (1 word = 16 bit) di RAM per la memorizzazione
dei  dati.  E’  inoltre possibile gestire interruzioni  (a
questo  scopo è presente uno stack hardware) e indirizzare
delle porte di I/O per dialogare con il mondo esterno,  ed
alcuni  membri della famiglia hanno già disponibili  anche
porte  seriali  e  timer (anche per il watchdog)  in  modo
tale  da  assomigliare in tutto e per tutto a dei completi
microcontroller.  Per ultimo, va detto  che  il  TMS320C17
include    anche   tutto   l’hardware   necessario    alla
compressione/decompressione  dei  dati  secondo  algoritmi
standard.
La  cosa  più  interessante è tuttavia  l’architettura
interna,  che  non  ricalca  la  solita  struttura   della
maggior  parte  dei  microcontrollori  utilizzati,   bensì
prevede  due  memorie (e due bus) separate per  codice  di
programma  e  dati (la cosiddetta architettura  "Harvard",
utilizzata  internamente anche dal Pentium per il  dialogo
con   le   sue   cache...);  questa   scelta,   unitamente
all’adozione  di  un  moltiplicatore  hardware,  ha   reso
possibile  effettuare una moltiplicazione tra due  dati  a
16  bit  (con risultato a 32 bit) in un solo ciclo di  bus
(è   cioè   stato  possibile  sovrapporre   le   fasi   di
caricamento  della nuova istruzione e di elaborazione  dei
dati  correnti), che nel caso del TMS320C16 risulta essere
di  soli 114 nanosecondi. Tutto questo, unitamente  ad  un
set di istruzioni pensato specificamente per algoritmi  di
DSP,  permette a tali circuiti integrati di eseguire  fino
a 8,77 milioni di istruzioni per secondo.
La  figura  1 mostra uno schema a blocchi  interno  di
uno  dei  più  semplici rappresentanti della famiglia:  il
TMS320C15; la commenteremo brevemente senza la pretesa  di
esaurire  l’argomento microprocessori,  argomento  che  se
dovesse  risultare di interesse per diversi lettori  potrà
essere trattato in una diversa serie di articoli.

 
 
Iniziamo   dunque  dal  blocco  in  alto  a   sinistra
denominato   "unità   di   controllo";   come   facilmente
intuibile,  ad  esso  sono demandate  le  funzionalità  di
coordinamento delle operazioni svolte da tutti  gli  altri
blocchi  interni, naturalmente al ritmo  di  un  opportuno
segnale  di  clock e sotto lo stimolo di  segnali  esterni
(quali   le   interruzioni   ed   i   vari   segnali    di
abilitazione).  Spicca  inoltre  la  ROM  (che  in  alcune
versioni  è scrivibile una sola volta, mentre in  altre  è
una  normale  EPROM)  di  programma,  indirizzata  da   un
registro   a   12  bit  con  funzionalità   di   puntatore
all’istruzione da svolgere (detto Program Counter,  o  PC)
e  collegata all’unità di controllo (che comanda tutti gli
altri  blocchi  a  seconda del significato dell’istruzione
letta)  nonché  al mondo esterno tramite il  Program  Bus,
che,  faccio notare, non è un bus ove circolano  indirizzi
di  celle  di  memoria,  bensì direttamente  il  contenuto
della  ROM di programma, e dunque le istruzioni. A  fianco
della  ROM troviamo lo stack hardware, indispensabile  per
la   memorizzazione  degli  indirizzi   di   ritorno   dai
sottoprogrammi   e   dalle  routine  di   servizio   delle
interruzioni.  Il  Data Bus collega  tra  di  loro  invece
tutti  i  dispositivi dedicati all’elaborazione dei  dati.
Si  notano subito, nella parte in basso, la ALU (Aritmetic
Logic  Unit) per l’esecuzione delle operazioni aritmetiche
e  logiche sui dati, il moltiplicatore hardware capace  di
moltiplicare in un solo ciclo macchina due dati a 16  bit,
e  ben  due  shifter in grado di effettuare  rotazioni  ed
estrazioni  di  bit dai dati stessi. Per la memorizzazione
dei   dati  e  dei  risultati  sono  disponibili   diversi
registri  a  16  bit  (AR0,  AR1,  T)  ed  a  32  bit  (P,
l’accumulatore ACC), nonché 256 celle a 16 bit di RAM.  Si
osservi la separazione tra i due bus e la presenza di  due
aree  di  memoria distinte: in ciò consiste l’architettura
Harvard,  ma va detto che per comodità esiste una  via  di
comunicazione  tra  di  essi:  questo  per  permettere  ai
coefficienti  da  utilizzare nei  calcoli  (e  che  quindi
andranno caricati nei registri della sezione in basso)  di
poter   risiedere  normalmente  nella  ROM  di  programma,
anziché  venire  introdotti dall’esterno  (magari  da  una
EPROM  separata) con dispendio di risorse. Infine, il  bus
dei  dati  (D0/D15)  ed  un bus degli  indirizzi  (A0/A11)
vengono  portati  all’esterno per poter  interfacciare  il
processore  DSP  con  dispositivi  periferici,   quali   i
convertitori   A/D  e  D/A,  porte  di   IN/OUT,   memoria
aggiuntiva per il programma di controllo (solo  in  alcuni
modelli)  oppure  addirittura con un altro microprocessore
o   microcontroller.  Per  lo  schema   a   blocchi   sono
disseminati  diversi multiplexer, il cui scopo  è  fungere
da  deviatori per permettere la circolazione  di  dati  ed
indirizzi per differenti percorsi, sotto il comando  della
particolare istruzione in esecuzione.
Analizzato in breve il cuore del sistema DSP, e  visto
che   è   in  grado  di  eseguire  tutte  le  elaborazioni
necessarie  sui dati analogici precedentemente  campionati
e  convertiti in digitale, resta da studiare  il  problema
della  riconversione in analogico dei  risultati  di  tale
processo.   Il  dispositivo  capace  di  compiere   questa
trasformazione  inversa è (guarda un po’) il  convertitore
digitale-analogico (D/A).
 
 
 
La  figura  2  illustra lo schema di principio  di  un
convertitore  Digitale/Analogico  ad  8  bit;  chiaramente
discuteremo lo schema a titolo esemplificativo,  dato  che
abbiamo  appena  visto che la maggior parte dei  chip  DSP
lavora  su  dati  a 16 bit e richiede dunque  convertitori
(sia  A/D  che  D/A)  a 16 bit. Quella raffigurata  è  una
particolare  realizzazione (oggi diffusissima)  denominata
"a   rete   R-2R"  per  la  particolarità  di   richiedere
solamente resistori di due valori (di cui uno è il  doppio
dell’altro,   e   poco  importa  quale   sia   il   valore
effettivo).   Iniziamone   la   discussione   dal   blocco
denominato Latch di ingresso, la cui funzione è quella  di
rendere  facilmente interfacciabile con un microprocessore
l’intero convertitore: esso infatti serve a campionare  il
byte    da    convertire,    normalmente    emesso     dal
microprocessore stesso sul suo bus dei dati per  un  breve
periodo,   in   modo   tale   da  mantenerlo   stabilmente
memorizzato per l’utilizzo nel processo vero e proprio  di
trasformazione in tensione analogica. I bit  del  byte  di
ingresso   comandano   poi  una  batteria   di   deviatori
elettronici  (realizzati con dei transistori MOS)  il  cui
scopo  è collegare alla rete di resistori una sorgente  di
corrente  costante qualora il bit in questione  sia  ad  1
logico,  oppure dirottare tale corrente verso massa se  il
bit  ha  valore  logico  0. La rete  R-2R  fa  sì  che  la
corrente  iniettata si ripartisca in modo tale da giungere
sull’ingresso       dell’amplificatore        operazionale
(sull’estrema  destra  dello  schema)  con  una  intensità
inversamente    proporzionale   al    "peso"    del    bit
corrispondente. Tale corrente viene poi convertita in  una
tensione  ad essa proporzionale proprio dall’operazionale,
ed  in  questo modo l’espressione della tensione di uscita
Vout diviene:
       
                               Vout =
           K*(27*D7+26*D6+25*D5+24*D4+23*D3+22*D2+2*D1+D0)
       
dove  la  costante K dipende dai valori dei componenti
inseriti  nel  circuito  (R, I e  le  resistenze  presenti
nella  rete  di  retroazione  dell’operazionale)  e  D0-D7
possono valere 1 o 0 e rappresentano come detto i bit  del
dato    da    convertire.    Tale   formula    (ricavabile
semplicemente  applicando il principio di  sovrapposizione
degli  effetti  e  le semplificazioni serie/parallelo  del
caso  alla  rete  R-2R che è senza dubbio lineare)  mostra
come   la   tensione   in  uscita  sia  proporzionale   al
significato  numerico  della  configurazione  binaria   in
ingresso.
Nello  schema elettrico, si osserva come sia possibile
chiudere   la   catena   di  retroazione   servendosi   di
differenti  percorsi;  ad esempio  collegando  a  Vout  il
piedino indicato con SENSE oppure il piedino indicato  con
SELECT,  oppure ancora cortocircuitando i due pin SENSE  e
SELECT e collegando il nodo comune a Vout; in questo  modo
si  realizzano  differenti valori di K e  conseguentemente
il  valore  della tensione di uscita modifica  il  proprio
range  di  variabilità.  Tanto per  esemplificare,  faremo
riferimento   al   circuito  integrato  DAC   0890   della
National,   il  cui  schema  di  principio  è  esattamente
identico   a   quello  di  figura  2;  ebbene,   in   tale
convertitore la tensione di uscita può essere  scelta  nel
range  0-2,55  V  oppure  0-10,2 V  proprio  agendo  sulle
connessioni  tra  SENSE,  SELECT  e  Vout,  tutti  piedini
regolarmente   presenti  nel  chip.  Nel   caso   si   sia
selezionata la gamma 0-2,55 V le cose funzioneranno  così:
ad  un  valore di ingresso pari a 0 (tutti i bit  D0-D7  a
zero logico) corrisponderà una tensione Vout nulla, ad  un
valore  di ingresso pari a 255 (tutti i bit D0-D7  ad  uno
logico) corrisponderà una tensione di uscita di 2,55  Volt
mentre  per  tutti i valori intermedi otterremo  una  Vout
proporzionale (es: 125 == 1,25V).
Lo  schema  a  blocchi completo del  convertitore  DAC
0890  è  mostrato  in  figura 3, ove  si  nota  subito  la
presenza  di  due  sezioni identiche;  il  chip  incorpora
infatti  due  convertitori completi e tutta la  logica  di
selezione   necessaria   all’interfacciamento    con    un
microprocessore  (o  un chip DSP...); quest’ultimo  "vede"
il  doppio  convertitore come due celle di memoria  oppure
due  porte  I/O  a sola scrittura, dotate ciascuna  di  un
segnale  di  selezione  (CS1*  e  CS2*)  e  comandate   in
scrittura  dal classico segnale di Write (WR*). In  verità
il  DAC  0890 è ancora più flessibile: è possibile infatti
comandarlo  con un solo segnale (il Csx*)  ed  inoltre  il
piedino  SENSE  può  essere utilizzato per  compensare  le
cadute  di  tensione che si verificano quando la  tensione
di uscita viene portata ad un utilizzatore lontano.
 
 
 
Due  parole  infine sulla velocità di un  convertitore
D/A;  si  è  infatti più volte ribadito  che,  affinché  i
processi  di  conversione  A/D  e  D/A  diano  luogo  alla
ricostruzione  del  segnale  corretto,  è  necessario  non
scendere  al  di  sotto  di una ben precisa  frequenza  di
conversione.   Il   comando  dei   deviatori   elettronici
richiede  tempo,  ed  è  perciò la principale  limitazione
alla  velocità di funzionamento del sistema; non solo,  va
anche  detto che la commutazione non avviene con lo stesso
tempo  in  tutti i deviatori, con il risultato di  passare
attraverso  configurazioni binarie  "spurie"  che  vengono
ugualmente convertite dando luogo a rumore sull’uscita  (i
cosiddetti  "glitch"). Tutto ciò si traduce in  un  "tempo
di  assestamento"  dell’uscita, durante il  quale  occorre
attendere  che  la  tensione assuma  il  nuovo  valore  di
regime,  e quindi in una velocità massima di funzionamento
che  nel caso del DAC 0890 arriva a circa 300 Khz,  valore
più  che  buono  nel  caso di impiego nel  trattamento  di
segnali in banda fonica.
Anche  questa volta vi segnalo alcune risorse Internet
dedicate  all’argomento; anzitutto è d'obbligo  consultare
il  newsgroup  comp.dsp, poi se quello che  cercate  è  il
software,  allora  può  essere interessante  sfogliare  il
sito  all'indirizzo  ftp://ftp.ti.com/mirrors/tms320bbs  ;
è   il  sito  FTP  della  Texas  Instruments  dedicato  al
software  ed  alla documentazione sui chip della  famiglia
TMS320Cxx;  vi  si  può trovare dal data-sheet  ad  alcune
applicazioni          di         esempio.          All'URL
ftp://ece.rutgers.edu/pub/sjo/intro2dsp.html    si     può
consultare  la presentazione di un buon libro (ottimo  per
introdurre  ai concetti base) sulle tecniche  DSP;  vi  si
trovano inoltre numerosi links a sorgenti di funzioni  per
il  DSP  scritte  in C e come m-files per Matlab.  Segnalo
infine      una      completa      lista      di      FAQ:
http://www.bdti.com/faq/dsp_faq.htm ed una  nutrita  lista
di altre risorse: http://204.97.220.29/dsp.htm.
Relativamente  alla reperibilità dell’autore,  ricordo
l’indirizzo   packet:  IW4DN@IK4OMO   nonché   l’indirizzo
Internet   e-mail:  d.armari@acdx2.dsnet.it    ed   infine
segnalo la variazione dell’indirizzo delle pagine Web  ove
trovare  gli articoli di questa serie unitamente ad  altre
informazioni   utili;  il  nuovo  URL   è   il   seguente:
http://www.geocities.com/SiliconValley/2551/     con    la
raccomandazione  di  avere pazienza, dato  che  il  server
(che si trova negli USA) è molto affollato.
       
       
    Copyright 1996 by Diego Armari - IW4DN
    Il presente articolo può essere pubblicato o diffuso
    in qualunque forma purché non a fini di lucro e
    sempre citando l'autore nonchè
    previa autorizzazione scritta dell’autore.

 

Home ] Su ]

Inviare a iz4eke@email.it un messaggio di posta elettronica contenente domande o commenti su questo sito Web.
Ultimo aggiornamento: 06-01-07