Em primeiro lugar, sou novo no DSP e não tenho nenhuma educação real, mas estou desenvolvendo um programa de visualização de áudio e estou representando uma matriz FFT como barras verticais como em uma visualização típica do espectro de frequências.
O problema que tive foi que os valores do sinal de áudio mudavam muito rapidamente para produzir uma saída visual agradável se eu apenas mapeasse os valores da FFT diretamente:
Portanto, aplico uma função simples aos valores para "suavizar" o resultado:
// pseudo-code
delta = fftValue - smoothedFftValue;
smoothedFftValue += delta * 0.2;
// 0.2 is arbitrary - the lower the number, the more "smoothing"
Em outras palavras, estou pegando o valor atual e comparando-o com o último e adicionando uma fração desse delta ao último valor. O resultado fica assim:
Então, minha pergunta é:
Esse é um padrão ou função bem estabelecido para o qual já existe um termo? É assim, qual é o termo? Eu uso o "suavização" acima, mas sei que isso significa algo muito específico no DSP e pode não estar correto. Fora isso, parecia estar relacionado a um envelope de volume, mas também não era exatamente a mesma coisa.
Existem abordagens melhores ou um estudo mais aprofundado sobre soluções para isso que eu deveria examinar?
Obrigado pelo seu tempo e desculpas se esta for uma pergunta estúpida (lendo outras discussões aqui, estou ciente de que meu conhecimento é muito inferior à média que parece).
fonte
Respostas:
O que você implementou é um filtro passa-baixo unipolar, às vezes chamado de integrador com vazamento . Seu sinal tem a equação da diferença:
onde é a entrada (o valor do compartimento não suavizado) e é o valor do compartimento suavizado. Essa é uma maneira comum de implementar um filtro lowpass simples e de baixa complexidade. Eu escrevi sobre eles várias vezes antes em respostas anteriores; veja [1] [2] [3] .y [ n ]x[n] y[n]
fonte
Aviso: inclua um pouco de história, papéis velhos (eu os amo) e cartões perfurados!
Você usou, com o formato: às vezes escrito como:a=0.2 y(n)=y(n–1)+a[x(n)–y(n–1)], y(n)=ax(n)+(1–a)y(n–1).
A primeira versão acima é menos natural, mas evita a multiplicação e é de alguma forma mais eficiente. Ambas as fórmulas produzem um filtro de resposta de impulso linear , causal e infinito . A história remonta a Poisson, Filtros Adaptativos Kolmogorov-Zurbenko , Brown (Previsão Estatística para Controle de Inventário. McGraw-Hill, 1959), Holt (1957) e Winters (1960). É implementado como um esquema de filtragem recursiva conhecido sob diferentes nomes na literatura:
O "exponencial" no nome está relacionado à resposta ao impulso com a progressão geométrica, que mostra uma deterioração exponencial: .h[n]=(1−a)u[n]an
Para uma nota histórica, Robert G. Brown e Arthur D. Little usaram esse método em 1956 em Suavização exponencial para prever a demanda , aparentemente para a indústria do tabaco. Um pouco mais de história e explicações podem ser encontradas no Holt-Winters Previsão for Dummies (ou desenvolvedores) - Parte I . Peter Zehna oferece uma revisão crítica em Algumas observações sobre suavização exponencial , 1966. Um capítulo de R. Brown na Encyclopedia of Operations Research and Management Science (Google books) remonta a história em 1944, e as páginas legíveis são reproduzidas aqui:
Muitos métodos estendem essa suavização, que não tem validade quando os dados têm uma tendência ou sazonalidade. Alguns deles são conhecidos como suavização exponencial dupla ou tripla e filtros Holt-Winters .
Você também pode verificar: Como esse "filtro simples" funciona?
fonte
A abordagem normal para medidores de áudio é um "detector de pico com perdas".
Isso reage imediatamente a qualquer novo ou pico ou transitório no sinal, mas permanece por um tempo, criando uma imagem muito menos agitada. A deterioração deve ser uma constante entre 0 e 1. Ele controla a rapidez com que as barras são executadas, sendo 0 instantâneo e 1 nunca.
fonte
new_value
se for maior do quecurrent_value * decay
Nos círculos de contratados do Departamento de Defesa dos EUA, esse filtro específico é freqüentemente chamado de "filtro alfa", porque pode ser caracterizado com um parâmetro que é tradicionalmente chamado de "alfa".
É diretamente análogo a um filtro passa-baixo RC analógico simpe.
Eles são extremamente simples, têm sérias limitações, mas têm a vantagem inegável sobre filtros mais complexos (e complicados!) Que, se você se afastar das áreas problemáticas, eles realizam o trabalho.
fonte
Como mencionado em outras respostas, este é um filtro recursivo de pólo único, um tipo de filtro de resposta ao impulso infinito (IIR).
Um excelente recurso para obter informações sobre esse e outros recursos do DSP é o Guia do cientista e do engenheiro para processamento de sinais digitais de Steven W. Smith :
fonte