Smoothing di ottava 1 / n


8

Data una risposta in frequenza ottenuta con FFT, vorrei applicare un livellamento di ottava 1 / n. Quale filtro dovrei usare e come? Forse qualcuno potrebbe indicare un buon riferimento (un documento o un libro sull'argomento).


Sei alla ricerca di un filtro pinking , che attenua la frequenzaf all'ampiezza 1/f? O vuoi davvero qualcosa che attenui la frequenzaf all'ampiezza 1/(lg2f)?
Wandering Logic,

1
Non voglio attenuare nessuna frequenza. Voglio che i dati vengano livellati, con una larghezza di banda variabile, ovvero 1 ottava, 1/3 di un'ottava, ecc.
Psirus,

1
Le risposte in frequenza dell'altoparlante sono in genere livellate, sia per rendere il grafico più semplice da interpretare ma ancora abbastanza preciso (1/20 di ottava), o molto elevato (1/3 di ottava), ad esempio nel marketing. Questo è ciò che ho letto numerose volte, cosa intendo esattamente che sto cercando di scoprire qui.
Psirus,

1
Quindi la tua domanda non riguarda la modifica di un segnale, di per sé, è come mostrare graficamente la risposta in frequenza di un dispositivo. È giusto?
Jim Clay,

1
Penso che questo articolo contenga informazioni preziose. Tuttavia, sfortunatamente, non è gratuito. L'approccio fondamentale è anche descritto in questo .
applesoup,

Risposte:


8

Tipicamente "smoothing" significa "sostituire il valore corrente con la media su quelli vicini". Il più comune è il livellamento energetico, in cui il livellamento risulta nella media energetica nell'intervallo di livellamento e le informazioni sulla fase vengono perse. Anche il livellamento complesso può essere fatto, ma è un affare complicato a causa dell'avvolgimento di fase.

Il livellamento energetico può essere espresso come

Y(K)=1NΣio=0N-1X(io)X*(io)WK(io)

dove WK(io)è una funzione finestra adatta. Nel caso, per esempio, del livellamento della terza ottava, questo potrebbe essere derivato come il quadrato di magnitudo della funzione di trasferimento di un filtro passa banda di terza ottava attorno alla frequenza k. Questo significa anche che per un FFT da 1024 punti devi progettare 1024 filtri passa-banda diversi, quindi è un bel po 'di lavoro.

Le cose possono essere semplificate se la forma esatta del filtro levigante è flessibile. La levigatura rettangolare può essere eseguita come

Y(K)=1B-un'+1Σio=un'BX(io)X*(io)

dove

un'=round(K*2-12n),B=round(K*212n)

sono semplicemente gli indici dei bordi della banda per nth levigatura dell'ottava.

Ci sono alcuni altri metodi che sono tra la finestra arbitraria e quella rettangolare in termini di complessità.


Sto cercando di implementarlo nel codice C, e temo di perdersi un po 'nella notazione. Sto facendo fatica a capire come, ad esempio, la somma di io che corro dalla a alla b funzioni? Qualsiasi assistenza è stata apprezzata.
Andrew Smith,

Due pollici, ma purtroppo solo un voto, su. Questa domanda aggiuntiva pone la domanda su come eseguire il livellamento complesso 1 / n, inclusa la complicata attività di avvolgimento delle fasi.
SpeedCoder5
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.