top of page
Foto do escritorFabio Henriques

Construindo um Equalizador com Delays (Filtros FIR)

O Processamento Digital de Sinais (DSP) é a base de todo nosso trabalho com áudio digital. Por trás de cada processador, mesmo os que se comportam e se parecem fisicamente com equipamentos tradicionais analógicos, estão na verdade um monte de processos matemáticos. Com DSP a gente consegue os mais complicados processamentos: equalização, compressão, reverb, modulações, tudo o que a gente usa.


O mais surpreendente disso é que esses sistemas todos, que podem ser bem complicados em sua estrutura, se baseiam praticamente em apenas três tipos de estruturas: Somas, Multiplicações e Delays. Com estas três operações bem simples ( e alguns conceitos não tão simples), conseguimos praticamente tudo o que deixa nossas mixes eficientes e únicas.


Nesse post vamos nos concentrar em apenas um desses processadores, o equalizador. Será que é possível, usando apenas essas três coisas, fazer um equalizador?


Antes de mais nada, vamos lembrar algo bem importante. Se a gente tem um track com ruído rosa, a saída desse track aparece em um analisador com todas as frequências com a mesma amplitude. Então vamos criar um track usando o Signal Generator (ou qualquer outro que sua DAW tenha) com 30 segundos de Pink Noise e observar o que sai em um analisador de espectro (no caso, o Voxengo SPAN). E aí temos:


Para que tudo funcione, ajuste o parâmetro “Slope” do analisador para 3,00. Estaremos usando uma sample rate de 44.1kHz.


A nossa primeira experiência será tocar esse áudio somado com ele mesmo, atrasado de 1 sample. Podemos esquematizar isso usando um diagrama de blocos:

Para fazer isso a gente coloca o nosso sinal original (o ruído rosa) em um track, copia ele para outro track e atrasa em 1 sample, e aí manda os dois para o master.


O resultado fica:


Se você comparar com a imagem anterior, verá que acabamos de conseguir um LPF (low-pass filter) que atenua fortemente em 22kHz (frequência de Nyquist).


E se agora atrasamos 2 samples, em vez de 1 sample?


Agora temos um filtro com uma forte atenuação em 11kHz.


Para encurtar um pouco as coisas (você pode ir progredindo sample a sample e observar o que acontece), vamos aumentar o atraso para 6 samples:


E agora podemos ver as atenuações em 3.67kHz, em 11kHz (o triplo) e em 18.35(5 vezes).


Com 10 samples, temos:


Sim, os amigos mais atentos nesse ponto estão dizendo: “É um Comb Filter!!!” . E estarão certos. Mas a coisa é muito mais interessante que isso.


Somar um sinal com ele mesmo atrasado gera um comb filter (filtro pente), cujo nome vem de seu formato como os dentes de um pente. E o comb filter é um filtro, e consequentemente, acabamos de equalizar apenas com 1 delay.


Mas, ok, não é uma equalização das mais úteis, a não ser que a gente queira um efeito de flanger. Então, será que sofisticando nosso esquema, podemos fazer coisas mais complexas?

A primeira coisa que podemos pensar é em fazer outras cópias desse mesmo sinal , atrasar de um valor diferente, e somar com os outros. Sim, é isso mesmo o que vamos fazer. Algo como:

Vamos usar atrasos diferentes e – por que não? – volumes diferentes para cada canal, e ver o que acontece.


- Um Pouquinho de Teoria


Mas antes de prosseguir, precisamos de um pouco de base. Esse tipo de sistema em que a gente atrasa um sinal de n samples e soma com o original é chamado FIR (Finite Impulse Response) , por motivos que vamos ver em um próximo post. Nos FIR sempre temos uma combinação de vários (podem chegar a muitas centenas) de delays que se somam ao canal original. A resposta desse sistema é um equalizador com as características comandadas na verdade pelo ganho de cada delay.

Por exemplo, dizemos que temos um filtro FIR de Ordem 5 se temos 5 ramos com delay, mesmo que alguns deles tenham amplitude 0. Ou seja, a ordem é dada pelo maior atraso.


- Criando um FIR usando a DAW


Vamos agora criar um FIR de sexta ordem. Para isso usaremos o sinal original e faremos 6 cópias dele colocando a primeira cópia com 1 sample de atraso, a segunda com 2 e assim por diante. Podemos resumir isso assim: [1 0,5 1 0 -1 0,5 -1] . O primeiro 1 se refere ao sinal original sem alteração de amplitude.

Atraso

Amplitude

Polaridade

1 sample

0,5 (-6dB)

+

2 samples

1

+

3 samples

0 (-infinitos dB)

4 samples

1

-

5 samples

0,5 (-6dB)

+

6 samples

1

-

Isso quer dizer que o sinal original vai para a saída com seu ganho original, o sinal que tem atraso de 1 sample vai com metade da amplitude, o sinal com 2 samples de atraso vai com a amplitude original, o sinal de 3 samples fica com volume zero , o sinal de 4 samples fica com o volume original mas tem a polaridade invertida (por isso o valor é negativo) , o de 5 samples tem metade da amplitude e finalmente o de 6 samples tem a amplitude original e a polaridade invertida. O que será que vamos conseguir somando isso tudo?


Em tese, deveríamos conseguir essa curva (gerada pelo software de simulação MATLAB):


Como resultado deveremos ter atenuações fortes em frequências muito baixas e no topo (22kHz) e uma região de atenuação de uns -10dB em torno de 11kHz.


Vamos ver se isso acontece (lembrando que reduzir amplitude à metade equivale a atenuar -6dB, levar a amplitude a zero significa atenuar -∞ dB) – repare em cada track o quanto foi atenuado, e as inversões de polaridade:




Como se pode ver, é exatamente o que conseguimos, inclusive com os esperados -10 dB de atenuação em 11kHz ( o “achatamento” do desenho no eixo horizontal é porque no MATLAB foi usada uma escala linear de frequências).


E aí a gente pode extrapolar e “brincar” com esses valores só pra ver o que acontece, e é isso o que eu convido você a fazer. As possibilidades com filtros FIR de baixa ordem são bem limitadas, mas já dá pra ver que , sim, podemos equalizar usando apenas delays.


Infelizmente a relação entre os delays , os ganhos de cada um e a curva obtida no final não é simples, e existem softwares dedicados a esse tipo de cálculo, mas a coisa é bem interessante de experimentar.


Mas nem tudo são flores. Os filtros FIR provocam um atraso dado por sua ordem, por exemplo. No nosso caso, a saída só receberá a equalização correta depois de 6 samples. Mas eles têm uma característica interessante. É com eles que os equalizadores conseguem gerar os filtros Linear Phase, que não distorcem a fase. Só que, dependendo da curva que se deseja, isso dá um bom consumo de CPU e centenas (eventualmente milhares) de delays, o que aumenta consideravelmente o atraso.


Na prática, nos equalizadores “normais” (inclusive os que simulam circuitos analógicos – que NUNCA são linear phase), não se usa esses sistemas FIR. São usados os sistemas IIR (Infinite Impulse Response), muito mais poderosos e econômicos, e cuja principal característica é que possuem pelo menos um ramo que realimenta o sinal da saída para a entrada (veja a figura). Mas isso é assunto para outras aventuras.



A sessão de ProTools usada acima está em https://drive.google.com/drive/folders/1D5Sp1-PpYlMgzsWZbIKQpw3vjhx4z3r3?usp=sharing

185 visualizações0 comentário

Posts recentes

Ver tudo

コメント


bottom of page