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
コメント