Newsgroup: it.hobby.elettronica.digitale
Titolo: Delay con DSP

Ciao a tutti.
Volendo realizzare un ritardo digitale di n campioni alla frequenza fs 
di campionamento direi che la cosa più semplice è un filtro del tipo:
  z^(-M)
con M numero di campioni da ritardare. Ovvero l'uscita:
  y(n) = x(n - M)
In altre parole mi serve "semplicemente" una memoria lunga M nella quale 
inserire e prelevare i campioni a tempo debito.
Sicuramente esistono, ma non saprei sotto che nome cercare, delle RAM 
che abbiano due bus dati e indirizzi così da scrivere e leggere 
contemporaneamente (in celle diverse, ovvio!).
L'ideale sarebbe anche che supportassero la la scrittura/lettura 
sequenziale: una volta impostata la prima cella di read e la prima di 
write le successive letture/scritture avverebbero nelle rispettive celle 
successive.
Cosa posso cercare che fa al caso mio?
Qualcosa tipo 100 Khz di fs e 16 o 24 bit.
Grazie,
Marco / iw2nzm

 Qualcosa tipo 100 Khz di fs e 16 o 24 bit.
Per 100 miseri kHz, perché non usi semplicemente la memoria principale del
tuo sistema e ti implementi la FIFO via software come fanno tutti?
-- 
asd

 tuo sistema e ti implementi la FIFO via software come fanno tutti?
Fammi capire, sono alle prime armi con il DSP. Supponiamo di usare un 
dsPIC (ho già hardware e ambiente di sviluppo). Ovviamente dovrei usare 
un ADC esterno per avere i 16 o meglio i 24 bit previsti. La RAM 
integrata non ha 24 bit di larghezza e comunque sarebbe troppo poca. Mi 
servirebbero una 30ina di kB.
La tua idea è quindi quella di usare una RAM esterna e gestire 
manualmente la scrittura e la lettura nelle varie celle come richiesto?
Marco / iw2nzm

 manualmente la scrittura e la lettura nelle varie celle come richiesto?
Se il tuo dsPIC dispone di bus esterno, puoi usare della normale SRAM e di
fatto gestire la FIFO via software come un normale buffer circolare.
Altrimenti hai alcune possibilità:
-Pilotare la SRAM in "bit banging". In pratica simuleresti un bus esterno
pilotando opportunamente dei normali pin di I/O. In questo caso bisogna
fare bene i conti, a te serve un throughput di 24 bit a 200 kHz (una
lettura e una scrittura per ogni campione) e non è detto che il dsPIC ce la
possa fare. Non ne ho idea, non li ho mai usati.
-Usare una CPLD, a cui collegheresti la SRAM, il dsPIC e l'ADC: la CPLD si
occuperebbe di pilotare l'ADC, bufferizzare i risultati in SRAM e fornirli
opportunamente ritardati e in forma seriale al dsPIC. Se poi usassi una
FPGA, avresti la SRAM direttamente integrata e il design si
semplificherebbe ulteriormente. Ma probabilmente se ci mettessi la FPGA
dopo non ti servirebbe nemmeno più il dsPIC. ;)
-Trovare una SRAM seriale. Credo che esistano, ma non le ho mai usate e non
ti so dare indicazioni. Forse esistono anche delle FIFO seriali, stesso
discorso. Paradossalmente avrai meno problemi a trovare delle FRAM seriali,
ad esempio la Ramtron fa modelli SPI fino a 256 kbit. Così ci potresti
salvare dentro anche tutte le tue impostazioni non volatili. ;)
In qualunque caso non penso che valga la pena usare una dual-port RAM, dato
che i due processi (scrittura e lettura) possono essere sincronizzati senza
problemi.
-- 
asd

 problemi.
Chiaro. Grazie delle spiegazioni!
Marco / iw2nzm

 
per velocizzare un po' la faccenda la generazione degli indirizzi ( 2 
uno per la cella in lettura ed un altro per la cella in scrittura ) la 
puoi demandare a dei contatori esterni per 30 Ksample ti bastano 15 ( ok 
  16 cifra tonda ) bit in modo che il DSP debba avere solo il pin di 
'incrementa conteggio'