Esiste un termine tecnico per questo semplice metodo per appianare un segnale?


26

In primo luogo, sono nuovo di DSP e non ho una vera istruzione, ma sto sviluppando un programma di visualizzazione audio e sto rappresentando un array FFT come barre verticali come in una tipica visualizzazione di spettro di frequenza.

Il problema che ho avuto è stato che i valori del segnale audio sono cambiati troppo rapidamente per produrre un piacevole risultato visivo se ho semplicemente mappato direttamente i valori FFT:

inserisci qui la descrizione dell'immagine

Quindi applico una semplice funzione ai valori per "appianare" il risultato:

// pseudo-code
delta = fftValue - smoothedFftValue;
smoothedFftValue += delta * 0.2; 
// 0.2 is arbitrary - the lower the number, the more "smoothing"

In altre parole, sto prendendo il valore corrente e confrontandolo con l'ultimo, quindi aggiungendo una frazione di quel delta all'ultimo valore. Il risultato è simile al seguente:

inserisci qui la descrizione dell'immagine

Quindi la mia domanda è:

  1. È un modello o una funzione ben consolidata per la quale esiste già un termine? È così, qual è il termine? Uso "smoothing" sopra, ma sono consapevole che ciò significa qualcosa di molto specifico in DSP e potrebbe non essere corretto. Diverso da quello che sembrava forse correlato a un inviluppo di volume, ma anche non esattamente la stessa cosa.

  2. Esistono approcci migliori o ulteriori studi sulle soluzioni che dovrei esaminare?

Grazie per il tuo tempo e le tue scuse se questa è una domanda stupida (leggendo altre discussioni qui, sono consapevole che la mia conoscenza è molto inferiore alla media sembra).


1
Ora mi chiedo cosa ottieni se prendi la FFT levigata e la inverti-FFT.
user253751

Sarebbe più semplice fare la prima risposta in un ordine diverso? current_value = current_value * decay; if (new_value> current_value) {current_value = new_value; }
Richard Forster il

@immibis Questo dovrebbe essere un riverbero dalla mia comprensione. Correggimi se sbaglio.
Andreas,

Certo, e un compilatore ottimizzante produrrà la stessa implementazione. Il punto chiave era ottenere il risultato corretto quando (valore_attuale * decadimento) <nuovo_valore <valore_attuale.
Richard Forster,

2
Mi piace davvero questa domanda. È uno di quelli in cui qualcuno che prova alcune cose si scopre accidentalmente sul fondo di un enorme albero della conoscenza (filtri Infinite Impulse Response, in particolare). Nel frattempo, le persone che stanno già salendo sull'albero possono descrivere tutte le cose interessanti che hanno già scoperto tra i rami ...
DrMcCleod

Risposte:


37

Quello che hai implementato è un filtro passa-basso unipolare, a volte chiamato un integratore che perde . Il tuo segnale ha l'equazione della differenza:

y[n]=0.8y[n1]+0.2x[n]

dove è l'input (il valore del contenitore non livellato) e è il valore del contenitore livellato. Questo è un modo comune di implementare un filtro passa-basso semplice e di bassa complessità. Ne ho già parlato più volte nelle risposte precedenti; vedi [1] [2] [3] .y [ n ]x[n]y[n]


4
Grazie mille per questo Così utile. Googling da solo è come essere perso in mare quando si tratta di cose DSP. Solo avere un paio di termini da cercare mi dà qualcosa da capire.
Michael Bromley,

3
Mi chiedo. Penso che l'OP applichi questo filtro sulla serie di valori nei singoli bin nel dominio della frequenza. Un normale passa-basso viene applicato sulla serie di campioni nel dominio del tempo. L'effetto è lo stesso (non credo, perché le parti ad alta frequenza sono ancora nel segnale, ma ... la loro intensità cambia più lentamente?)? In caso contrario, potresti approfondire cosa fa effettivamente il filtro al segnale nel dominio del tempo?
Jonas Schäfer,

3
@JonasWielicki Penso che l'obiettivo sia appianare ogni singolo valore del cestino, in modo che non cambi molto rapidamente. anche il filtro passa-basso (come spiegato nella risposta) è applicabile a qualsiasi serie temporale indipendentemente dal suo dominio (tempo o frequenza o qualsiasi altra cosa).
Arpit Jain,

@arpitjain Lo capisco. Vorrei semplicemente sapere se c'è qualche comprensione (non necessariamente da parte tua, dell'OP o del risponditore) in che modo influisce sul dominio del tempo quando lo fai.
Jonas Schäfer,

@JonasWielicki L'operazione è una convoluzione nel dominio della frequenza, quindi si traduce in una moltiplicazione (delle corrispondenti (inverse) trasformazioni di Fourier) nel dominio del tempo.
MBaz,

17

Attenzione: includi un po 'di storia, vecchi documenti (li adoro) e schede perforate!

Hai usato, con la forma: volte scritto come: a=0.2

y(n)=y(n1)+a[x(n)y(n1)],
y(n)=ax(n)+(1a)y(n1).

La prima versione precedente è meno naturale, ma ne evita una moltiplicazione ed è in qualche modo più efficiente. Entrambe le formule producono un filtro di risposta all'impulso lineare , causale e infinito . La storia risale a Poisson, Kolmogorov-Zurbenko Filtri adattivi , Brown (Previsione statistica per il controllo dell'inventario. McGraw-Hill, 1959), Holt (1957) e Winters (1960). È implementato come uno schema di filtro ricorsivo noto con nomi diversi in tutta la letteratura:

L '"esponenziale" nel nome è correlato alla risposta all'impulso con la progressione geometrica, che campiona un decadimento esponenziale: .h[n]=(1a)u[n]an

Per una nota storica, Robert G. Brown e Arthur D. Little usarono questo metodo nel 1956 nel livellamento esponenziale per prevedere la domanda , apparentemente per l'industria del tabacco. Un po 'più storia e le spiegazioni possono essere trovati in Holt-Winters Forecasting for Dummies (o sviluppatori) - Parte I . Peter Zehna offre una recensione critica in alcune osservazioni sul livellamento esponenziale , 1966. Un capitolo di R. Brown in Encyclopedia of Operations Research and Management Science (Google books) risale al 1944, le pagine leggibili sono riprodotte qui:

Livellamento esponenziale, p.  205, Encyclopedia of Operations Research and Management Science

Livellamento esponenziale, p.  206, Encyclopedia of Operations Research and Management Science

Molti metodi estendono questo livellamento, che manca di validità quando i dati hanno una tendenza o stagionalità. Alcuni di questi sono noti come raddrizzamento esponenziale doppio o triplo e filtri Holt-Winters .

Puoi anche controllare: come funziona questo "filtro semplice"?


1
Grazie, questo è eccellente. Come accennato, sono totalmente nuovo a questo, quindi alcune delle tue risposte richiederanno ulteriori ricerche per consentirmi di apprezzarle appieno, ma sicuramente risponderanno alla mia domanda e poi ad alcune. Se non fosse per l'altra risposta, in precedenza, questo è anche, naturalmente, meritevole di essere accolto come la risposta.
Michael Bromley,

1
Piccola correzione, Winters 1 (960) dovrebbe essere Winters (1960) Presumo
SGR

9

Esistono approcci migliori o ulteriori studi sulle soluzioni che dovrei esaminare?

L'approccio normale per i misuratori audio è un "rilevatore di picco con perdita".

if new_value > current_value
  current_value = new_value;
else
 current_value = current_value * decay;  

Ciò reagisce immediatamente a qualsiasi nuovo o picco o transitorio nel segnale, ma rimane per un po ', quindi crea un quadro molto meno frenetico. Il decadimento dovrebbe essere una costante tra 0 e 1. Controlla la velocità con cui le barre vengono eseguite con 0 che è istantaneo e 1 che non è mai.


Noto che questo ha somiglianze con un compito che ho fatto al college, un MIDI dal suono molto metallico (creato in un compito precedente) è stato migliorato convolvendo (e ridimensionando per abbinare picchi e durate) i segnali di nota (completamente rettangolari) con un triangolare segnale che è cresciuto molto bruscamente (anche se non istantaneamente), e poi è decaduto gradualmente, per produrre una nota acuta che si è estinta "naturalmente". Vasto miglioramento del suono della canzone (Fur Elise in questo caso).
KRyan,

Immagino che vorresti conservare new_valuese è maggiore dicurrent_value * decay
user276648

6

Intorno ai circoli degli appaltatori del DoD degli Stati Uniti, questo particolare filtro è spesso chiamato "filtro alfa", perché può essere caratterizzato con un parametro che è tradizionalmente chiamato "alfa".

È direttamente analogo a un filtro passa-basso analogico RC simpe.

Sono estremamente semplici, hanno seri limiti, ma hanno il vantaggio innegabile rispetto a filtri più complessi (e complicati!) Che, se ti allontani dalle loro aree problematiche, svolgono il lavoro.


3

Come menzionato in altre risposte, si tratta di un filtro ricorsivo a polo singolo, un tipo di filtro a risposta impulsiva infinita (IIR).

Una grande risorsa per informazioni su questa e altre funzionalità DSP è la Guida dello scienziato e dell'ingegnere all'elaborazione del segnale digitale di Steven W. Smith : risposta all'impulso infinita (IIR)

... ogni punto nel segnale di uscita viene trovato moltiplicando i valori del segnale di ingresso per i coefficienti "a", moltiplicando i valori precedentemente calcolati dal segnale di uscita per i coefficienti "b" e sommando i prodotti insieme. Avviso che non esiste un valore per b0, poiché corrisponde al campione da calcolare. L'equazione 19-1 è chiamata equazione di ricorsione e i filtri che la usano sono chiamati filtri ricorsivi. I valori "a" e "b" che definiscono il filtro sono chiamati coefficienti di ricorsione.

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.