Newsgroup: it.hobby.elettronica.digitale
Titolo: MCU per FFT a 16k campioni

Ciao a tutti.
Devo trovare un microcontrollore che risolva un problema apparentemente 
semplice: ho in ingresso un segnale risonante (quindi con un'unica 
frequenza significativa), con frequenza di risonanza compresa tra 500 e 
4000 Hz. Lo "scopo del gioco" è rilevare questa frequenza e inviarla in 
output.
Il segnale dura circa un secondo. L'idea è campionare il segnale a 16 
kHz (meglio andare oltre Nyquist), effettuare una FFT e valutare così la 
frequenza di risonanza.
L'architettura più semplice che mi viene in mente è un MCU con buone 
capacità elaborative (magari un DSP) e magari con a bordo un ADC ad 
almeno 10 bit a 16 kHz.
Porto il segnale all'ADC del micro, calcolo la FFT e trovo la 
frequenza... ma qui vengono i dubbi:
1) devo calcolare effettivamente la FFT su tutti i 16k campioni? Da 
reminiscenze universitarie mi ricordo che gli algoritmi FFT sono 
ricorsivi, quindi forse è possibile ridurre i termini della questione (e 
il numero di punti su cui effettuare la FFT);
2) di quanta memoria ho bisogno? Esistono microcontrollori con una 
quantità sufficiente per un'operazione del genere? Avevo visto i PIC32 
(che hanno 32k di RAM), ma mi pare che non ce la si faccia...
Grazie dell'aiuto.

Il giorno Wed, 06 Apr 2011 12:19:41 +0200, stinf
<stefano_inf...@MAPSONstrago.it> ha scritto:

Io per un problema simile anni fa ho usato una stada del tutto diversa.
Si trattava di acquisire delle vibrazioni da accelerometro, e mi sembra che
anche tu lavori con oggetti simili.
Dopo aver provato anch'io la strada del FIR, ma con un 8 bit di 10 anni fa c'era
poco da correre e i pochi ARM erano poco diffusi, alla fine ho usato un filtro
digitale come questo:
http://www.maxim-ic.com/datasheet/index.mvp/id/1899
In pratica facevo lo sweep di tutte le frequenze attraverso il PWM e con l'ADC
la misura dell'ampiezza alla frequenza corrispondente, basta un algorimo per il
valor massimo della scansione.
Poche risorse per un buon risultato.
--
ciao
  Stefano

valor massimo della scansione.
Naturalmente la cosa funziona bene quando c'č ad una frequenza specifica una
tensione piů alta delle altre da rilevare, e il passabasso a 82dB toglie le
vibrazioni a bassa frequenza che potrebbero facilmente falsare la misura.
--
ciao
  Stefano


Questo, purtroppo, potrebbe non essere il mio caso, poiché il segnale da 
analizzare è quello dato da una corda vibrante, dunque la tensione 
maggiore sarà presente all'inizio, per poi ridursi man mano che la corda 
si ferma.

si ferma.
In quel caso avrai una variazione dell'ampiezza, non della frequenza, almeno se
la corda segue la legge del moto armonico smorzato con sottosmorzamento.
http://it.wikipedia.org/wiki/Risonanza_armonica#Moto_armonico_forzato
Ragion per cui una volta individuata la giusta frequenza termina lo sweep, e se
anche riduce l'ampiezza questo non cambia la frequenza.
http://goo.gl/ID3oz
Non so che genere di trasduttore usi, ma se sono accelerometri i principali
problemi sono l'offset e i rumori a bassa frequenza, le frequenze più alte
richiedono più energia, vale sempre la 1/2 M V2.
L'offset lo puoi togliere facilmente con un condensatore in serie se non ti seve
la fase del segnale, mentre per i rumori a bassa frequenza un passabasso con
82dB è ottimo.
Io sono sempre per le soluzioni semplici se si può, però se vuoi divertirti con
FIR, FFT e DSP ti faccio i miei auguri   ;-)
--
ciao
  Stefano

 il numero di punti su cui effettuare la FFT);
Se hai N punti nel dominio del tempo ne avrai N anche in quello della
frequenza (in realtà N/2, per i segnali reali i risultati sono complessi e
coniugati). Quindi se campioni 16k campioni a 16 kHz, avrai una punto della
tua FFT ogni Hz.
-- 
emboliaschizoide.splinder.com

 si ferma.
se hai una corda vibrante, suppongo generi una frequenza sinusoidale.
In via ipotetica potresti squadrare l' onda e invece di acquisirla
in modo analogico sfrutti un micro con input capture digitale e ottieni
il periodo compreso tra i fronti.
A.


Vero. Questo è il metodo utilizzato finora. Il mio obiettivo è capire se 
esiste un metodo più semplice (= economico) per realizzare la stessa cosa.
In generale, da quello che sto vedendo e da quello che mi dite, mi pare 
che non esista... dovrò allora limitarmi ad una revisione ed 
aggiornamento di ciò che già abbiamo.


Ok, chiaro. Graze della risposta, anche se, come ho appena scritto, 
probabilmente cambierò direzione...


Anch'io sono dell'idea che semplice č bello. Perciň speravo di 
sostituire buona parte dell'elettronica con un semplice micro che 
facesse la FFT, ma a quanto pare non č stata una buona idea...
Grazie dell'aiuto.

facesse la FFT, ma a quanto pare non è stata una buona idea...
Non è detto in senso assoluto, magari trovi un DSP con degli esempi di FFT
facilmente implementabili e che ti permettono di raggiungere lo scopo abbastanza
semplicemente .
Quando io ho fatto quella scelta di hardware i DSP non erano certo al livello di
oggi sia per costo che per prestazioni.
Però se devi solo rivelare la sinusoide e il rapporto segnale/rumore te lo
consente ti basta il comparatore che stai usando adesso.
--
ciao
  Stefano

 semplicemente .
Aggiungo che se vuole seguire la strada della FFT puň facilmente testare 
il suo algoritmo usando un PC: acquisisci il segnale con la scheda audio 
e poi lo dai in pasto al programmino in C. Cosě puoi anche scoprire piů 
facilmente la potenza di calcolo richiesta e il consumo di risorse.
Ovviamente potresti usare Octave o Scilab, nel qual caso risolvi in una 
mezz'oretta di lavoro. Perň se non puoi usare il pc e devi traslare 
comunque su micro non č un'opzione valida :)
Marco


Uhmmm non vedo cosa ci sia di piu' economico di
uno squadratore e di un micro con input capture..
feature del genere le trovo in micro a bassissimo
costo e il firmware e' relativamente semplice.
Mi riesce difficile vedere una alternativa
economica via software con elaborazione di una
grandezza acquisita per via analogica per un
compito del genere :-)
Forse la domanda sarebbe: ho un circuito squadratore
complesso e vorrei ridurne i costi :-)
A.

 A.
Naaa, anche il circuito squadratore è semplicissimo :)
Il problema adesso si sta spostando nella parte di eccitazione della 
corda, che sembra non essere molto efficiente, e nella lettura del 
segnale, che è soggetto a parecchio rumore (certo, se un segnale 
dell'ordine delle decine di mV, single ended, lo fai viaggiare su un 
cavo di 20 metri...).