micro e rms-to-dc

ciao!

ho un micro a cui servirebbe conoscere il valore RMS di un segnale 5Vpp-max in banda audio; il micro lavora a 3vcc e ha l'adc a bordo

voi come fareste? io pensavo ad un partitore+buffer tra la sorgente audio e l'ingresso a/d del micro e poi campionare per un po' di tempo e raggiunto un numero decente di campioni calcolare la radice della media dei quadrati

magari fare il conto nel main() mentre l'a/d lo gestisco ad interrupt per non interrompere l'acquisizione (mentre il micro deve fare i calcoli) è chiara l'intenzione di evitare un IC dedicato per la conversione rms2dc

grazie!

-ice-

Reply to
ice
Loading thread data ...

ma lavori con gli 8051 Silabs? solo una domanda visto il post di prima sui samples...

:)

coals

Reply to
coals

eh magari! se mi avessero dato i samples :) ad oggi della silabs uso il cp2102 che un bridge usb (pensa che dentro un chippetino nascosto da resina su un "vecchio" pulsossimetro ci deve essere lui perchè ci vogliono quei driver li per interfacciasrsi al pc)

-ice-

Reply to
ice

ice:

Mah, guarda, se ce l'hai così piccolo l'RMS non ti aiuta. Sarà il 70% del picco, non la soddisfi comunque.

Reply to
F. Bertolazzi

di cosa potrei tenere conto per valutare il livello del segnale audio? (vorrei implementare un controllo automatico di guadagno)

idee? grazie

-ice-

Reply to
ice

Se non devi fare altro quella è senz'altro la soluzione più pulita ed indolore, ammesso il compilatore/assemblatore sia capace di estrarre radici, ma penso non sia un problema.

Se questo è uno dei tanti compiti che deve fare il tuo uC comincerei ad approssimare un po'... Tipo: la banda che ti serve non è altissima (è un AGC...) quindi magari basta prendere dei campioni a caso (uno ogni 16, per esempio) oppure prendere un blocchettino (boh, 64, 128 campioni...) ogni secondo. O se conosci qualcosa della statistica del tuo segnale puoi sostituire l'RMS con una percentuale del valore di picco, o della media del valore assoluto. Ancora, forse più vicino al vero RMS, potresti suddividere la dinamica in un certo numero di ampiezze e contare quanti campioni rientrano in ogni gruppo di ampiezze, così almeno ti salvi un po' di quadrati (ammesso che questa suddivisione non costi di più).

P.

Reply to
Pasu

si, è uno dei compiti del uC più che altro mi interessava sapere se campionando a bassa frequenza (1Hz ad esempio, come suggerisci tu) si riesca ad ottenere qualcosa di accettabile

anche usando un IC dedicato non credo cambi molto... cioè si fanno meno calcoli ma la frequenza con cui posso campionare sarebbe cmq relativamente bassa... forse piazzando un condesatore C-average decisamente grosso all'esterno di un RMS-to-DC?

grazie

-ice-

Reply to
ice

Ok, ma non capisco allora se la sequenza campionata ti serve per qualcos'altro o solo per estrarne l'RMS.

Dipende dalla velocità di intervento dell'AGC. Eviterei comunque campionamenti regolari, per evitare risonanze/buchi nella risposta in frequenza. Per questo suggerivo di mediare un blocchettino ogni tanto, oppure estrarre campioni ad intervalli "casuali". Comunque se è un'applicazione audio, non resta che fare delle prove ad orecchio.

Non ne ho mai usato di quegli affari, ma suppongo che il condensatore ci sia per forza di cose (devi integrare...). La sua capacità determinerà la dimensione della finestra temporale che vai a considerare, quindi in definitiva, come dici tu, la velocità con cui varia l'uscita RMS. È lo stesso discorso di cui sopra, visto nel tempo continuo.

P.

Reply to
Pasu

ice wrote: Dimenticavo:

Dipende dall'applicazione. È un effetto per chitarra o qualcosa del genere? Ad esempio nei registratori a nastro portatili la costante di tempo del guadagno, ad orecchio, è di qualche secondo. Del resto si trattava di adeguare il livello alla particolare sorgente sonora (tipicamente voce, con pause di silenzio) e "una volta per tutte" durante quella registrazione.

In ogni caso suppongo che non sia comunque gradevole un guadagno che cambia "a gradini", quindi l'uscita (il valore del guadagno) andrà passabassata (diciamo almeno una decade prima della frequenza di aggiornamento) o comunque interpolata in qualche modo, e a questo punto

1Hz potrebbe essere un po' lentino.

Inoltre nei compressori di dinamica di solito l'attacco e il rilascio sono regolati separatamente. Quindi il tuo condensatore può caricarsi velocemente, ma scaricarsi lentamente, ad esempio.

P.

Reply to
Pasu

c'è una sorgente digitale da cui vengono prelevate delle traccie audio... credo compresse in qualche formato; ma io non devo occuparmi di questo; poi un dsp le decodifica e un dac le rende "ascoltabili"; dopo il dac e prima di andare sullo speaker c'è un pre a controllo digitale e poi lo stadio di potenza ovviamente; il micro gestisce il tutto e fin qui ok

il problema è che le tracce audio hanno "volume" (forse sarebbe più corretto dire "energia media") diverso, per cui l'utente finale si troverà a dover agire sul volume ogni volta che si cambia traccia; da qui l'introduzione di un agc per portarsi ad un livello predefinito

per il feedback pensavo appunto ad un rms-meter possibilmente implementato col micro

sono abbastanza certo che con un rms-to-dc e poi l'acquisizione tramite adc del micro è fattibile; ho letto una AN della analog in cui impiegano un loro rms-to-dc e un amplificatore a guadagno variabile (VGA) proprio in banda audio e i risultati sono ottimi! semplicemente volevo evitare un IC dedicato e far fare i calcoli al micro dato che c'è ad ha l'AD a bordo

grazie per l'intervento e se hai altri suggerimenti, ben volentieri

-ice-

Reply to
ice

per estrarre l'RMS (ed agire di conseguenza su un dsp esterno che controlla la decodifica audio)

esatto

-ice-

Reply to
ice

"ice" ha scritto nel messaggio news:V9ZWk.110351$ snipped-for-privacy@twister2.libero.it...

Se l'applicazione è solo questa fai un rilevatore di picco con una discreta costante di tempo, se il segnale è un normale livello di linea che può stare fra 400mv e un paio di volt (RMS) ci metti un op-amp con guadagno 2, in uscita un condensatore da 47 uF un diodo con l'anodo a massa e un diodo a raddrizzare, un altro condensatore da 10 o 20 uF e una resistenza da 100K per scaricare il condensatore, in parallelo al condensatore ci metti uno zener con valore fra i 4,7 e i 5,3 V per proteggere l'ingresso AD del micro, campioni più velocemente che puoi e regoli il volume con un certo tempo d'isteresi genrato dal micro, con un paio di tentativi sui tempi lo metti a posto:-)

ciao Rusty

[FIDOCAD] MC 75 75 0 0 580 MC 30 75 0 0 080 MC 55 55 1 0 080 MC 55 90 1 0 080 MC 95 100 1 0 114 MC 70 105 1 0 080 MC 70 115 0 0 180 MC 75 100 0 0 080 LI 75 85 70 85 LI 70 85 70 105 LI 70 105 70 100 LI 70 100 75 100 LI 95 100 105 100 LI 105 100 105 80 LI 105 80 100 80 LI 90 105 105 105 LI 105 105 105 100 LI 55 65 55 90 LI 40 75 45 75 LI 45 75 75 75 MC 110 80 3 0 180 MC 125 95 3 0 200 MC 130 80 0 0 200 MC 150 85 0 0 180 MC 170 85 1 0 080 MC 180 80 0 0 080 MC 195 100 3 0 230 LI 55 100 55 125 LI 55 125 240 125 LI 55 125 20 125 LI 105 80 110 80 LI 120 80 130 80 LI 145 80 180 80 LI 190 80 240 80 LI 195 80 195 85 LI 170 80 170 85 LI 150 80 150 85 LI 125 95 125 125 LI 150 95 150 125 LI 170 95 170 125 LI 195 100 195 125 SA 55 75 SA 70 100 SA 55 125 SA 70 125 SA 105 100 SA 125 125 SA 150 125 SA 170 125 SA 195 125 SA 195 80 SA 170 80 SA 150 80 SA 125 80 SA 105 80 LI 55 55 55 45 LI 55 45 70 45 MC 70 45 0 0 010 MC 240 125 0 0 020 MC 240 80 0 0 074 MC 10 75 0 0 073 MC 30 75 1 0 180 MC 10 125 0 0 073
Reply to
Rusty

Ne sono certo anch'io! Si tratta solo di sperimentare un po' con vari algoritmi di "estrazione dell'RMS" e tempi di attacco/rilascio, anche in base alla potenza di calcolo che hai a disposizione sul uC.

Un'altra cosa, forse scontata, che mi viene in mente per ridurre la complessità è lavorare con dati ad 8bit, o magari anche 4bit, a seconda anche di quanti campioni vuoi mediare.

Beh, grazie al ca... Con l'IC dedicato sono capaci tutti! :-p

Sì sì, ho capito benissimo. Ed hai la mia approvazione ;-)

Fugurati

Se ci tieni aggiornati sugli sviluppi, non mancherò.

Ciao!

P.

Reply to
Pasu

ciao Rusty!

si, è "solo" questa nel senso che mi serve solo una maniera per correggere in automatico il guadagno (leggi volume) dispongo già dello stadio di pre a controllo digitale; il micro invece deve sostenere anche altri compiti

ho visto lo schema; come idea mi pare ottima solo che mi resta il problema del dover campionare molto velocemente; al momento non so dire quanto ma ipotizzavo un campionamento molto basso... tipo 1hz perchè questo del controllo automatico di guadagno è "accessorio" come compito... il micro deve fare altro in primo luogo

cioè in pratica i picchi del segnale audio immettono carica nel condensatore e il resistore da 100k invece sottra carica al condensatore; giusto?

quindi potrei aumentare il condensatore oppure il resistore in modo da avere una "finestra" temporale più ampia e permettermi un campionamento meno frequente? però così forse la risposta del sistema diverrebbe molto lenta... non so

grazie!

-ice-

Reply to
ice

diciamo che la potenza di calcolo c'è ma al momento non so quanto frequente possa essere il campionamento A/D quindi a me servirebbe campionare dalle parti di 1hz circa e riuscire ad ottenere una risposta decente in termini di intervento dell' AGC

si, non l'ho detto ma pensavo anche io di stare sugli 8-bit

lo dicevo perchè questi rms2dc sono in genere wide-band per cui non sapevo bene come si potessero comportare a frequenze lontane dalla RF

he he :)

volevo andare direttamente su scheda ma ci sono troppi punti ancora oscuri; appena ho tempo monto un micro su breadbord con un pot-digitale per il controllo volume e provo

vi faccio sapere se va!

grazie ancora

-ice-

Reply to
ice

ice ha scritto:

o...=20

gitale=20

corretto=20

over=20

per evitare l' effetto "compressore" dovresti usare grandi costanti di tempo di attacco e rilascio, ma poi cosa succede nel passaggio da una traccia molto alta ad una molto bassa, o viceversa ?

per fare un lavoretto pulito (ma non ancora audiofilo) dovresti fare un veloce preview di tutta la traccia per acquisire il livello max e poterla poi scalare tutta in blocco quando inizia la sua esecuzione.

ato=20

non capisco perche' RMS e non picco ? e' il picco che sfora, anche con valori bassi di RMS.

saluti

Reply to
lowcost

Hai assolutamente ragione, parlavo di compressore in termini più laschi.

Sarebbe bello... Oppure memorizzare una sorta di tag che indica già il livello da usare...

Sì, ma uno sporadico picco che satura non viene percepito dall'orecchio (neanche quello audiofilo). Se normalizzi sul picco ovviamente fai le cose "corrrette" ma se sei sfigato da avere un solo picco 10 volte l'ampiezza media del segnale sei costretto ad abbassare il livello in maniera esagerata. Quello che si fa normalmente è adattare l'ampiezza al valore medio (opportunamente calcolato, appunto) e permettere qualche sforatura. Se usi un limitatore il picco viene addolcito, riducendo così le armoniche dovute alla tosatura.

P.

Reply to
Pasu

Oppure, sulla stessa idea, campionare l'uscita sul condensatore, senza zener e resistenze (se alimenti a 5V l'opamp, accoppi in continua e usi schottky o germanio per raddrizzare non dovresti avere problemi). Così puoi anche scaricare il condensatore da fw (riconfigurando il pin dell'A/D come uscita, a livello basso).

Naturalmente dato che la tensione sul condensatore varia molto lentamente puoi permetterti di campionare molto tranquillamente.

P.

Reply to
Pasu

Pasu ha scritto:

e' possibile che qualche formato compresso contenga gia' questo dato ?

e' vero, e anch' io partirei esattamente dal caso piu' "sfigato".

saluti

Reply to
lowcost

Dubito che sia già presente il dato, ma molti formati danno la possibilità di inserire delle informazioni aggiuntive.

In che senso?

P.

Reply to
Pasu

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.