formula di limitazione del picco / compressione audio necessaria


9

Sto cercando una formula per comprimere efficacemente una forma d'onda audio per limitare i picchi. Questa non è un'applicazione di "controllo automatico del volume" in cui si dovrebbe controllare il guadagno dell'amplificatore per mantenere un livello di volume, ma piuttosto voglio limitare ("soft" troncare) singoli picchi. (So ​​che questo introduce armoniche, ma sto cercando di analizzare i dati, non di ascoltarli.)

La mia formula (molto grezza) finora è:

factor = (10 * average / level) + exp(-sqrt(0.1 * level / average))

Laddove il livello è il livello sonoro istantaneo, la media è il livello sonoro medio storico e il fattore è un moltiplicatore utilizzato per produrre il livello "regolato" ( fattore volte livello ).

Inoltre, questo moltiplicatore viene applicato solo se viene calcolato con un valore inferiore a 1. In caso contrario, il livello viene lasciato non regolato.

L'intento è di limitare il livello corretto ad alcuni multipli (circa 15x con questa formula) della media storica. Questa formula è una specie di ciò di cui ho bisogno, ma mostra un "calo" man mano che i numeri diventano più grandi. Cioè, il livello regolato (cioè, fattore volte livello ) aumenta fino ad un punto con crescente livello non regolato, ma poi, piuttosto che andare asintotico, inizia effettivamente ottenere più piccoli. (In effetti, il primo fattore è stato aggiunto principalmente per evitare che la formula vada a zero con valori estremamente alti.)

(La ragione per voler limitare i valori in questo modo è principalmente che il rumore transitorio non sconvolge seriamente la media corrente del livello sonoro. Ma quando si analizza il "rumore transitorio" è abbastanza significativo, quindi posso semplicemente schiacciarlo .)

Quindi, qualcuno può suggerire qualcosa di meglio? (Sembra che il comportamento asintotico sia facile da produrre quando non lo vuoi, ma difficile quando lo fai.)


Risposte:


9

Due problemi qui: come ottenere una stima affidabile del livello e come comprimere i dati.

  • Usa statistiche affidabili sui dati originali (non limitati al picco) come mediana o quantile anziché una media corrente per rendere robusto il tuo rilevamento di "livello tipico" fino a valori anomali.
  • K×tanh(XK) funziona bene come una formula di compressione ed è effettivamente ciò che sta accadendo in alcuni circuiti audio (usando OTA). Per ottenere una compressione adattiva che preservi la dinamica del segnale originale e rimuova semplicemente i transitori, fai in modo che k segua il livello "medio" livellato.C

esempio

  • Blu: segnale originale
  • Verde: 2 x mediana del valore assoluto su una finestra scorrevole come rilevamento di "livello tipico"
  • Rosso: compressione tanh (formula data sopra con k uguale al livello tracciato in verde)

Grazie, sembra promettente. Lo collegherò e vedrò come va.
Daniel R Hicks,

1
L'ho provato e sembra funzionare bene (dopo aver chiarito un paio di controlli delle dita). Il mio unico problema è che non sembra esserci alcun modo per regolare la nitidezza del "ginocchio" senza abbassare il livello della clip o altro.
Daniel R Hicks,

Perché "mediana mobile" è meglio di "media mobile"? Ho letto in molti posti che è meno sensibile agli outlier. Ma non riesco a vederlo con dati reali . Qualche idea su questa domanda?
Basj,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.