O que são filtros high-pass e low-pass?

O software de edição e processamento de charts e áudio geralmente contém funções chamadas “High-Pass Filter” e “Low-Pass Filter”. Exatamente o que eles fazem e quais são os algoritmos para implementá-los?

Wikipédia:

  • Filtro de alta passagem
  • Filtro passa-baixa
  • Filtro passa-faixa

Esses termos “alto”, “baixo” e “banda” referem-se a freqüências . Em high-pass, você tenta remover baixas freqüências. Em low-pass, você tenta remover o máximo. Na passagem de banda, você permite apenas que uma faixa de frequência contínua permaneça.

A escolha da frequência de corte depende da sua aplicação. Codificar esses filtros pode ser feito simulando circuitos RC ou brincando com transformadas de Fourier de seus dados baseados em tempo. Veja os artigos da Wikipédia para exemplos de código.

Aqui está como você implementa um filtro passa-baixo usando convolução:

double[] signal = (some 1d signal); double[] filter = [0.25 0.25 0.25 0.25]; // box-car filter double[] result = new double[signal.Length + filter.Length + 1]; // Set result to zero: for (int i=0; i < result.Length; i++) result[i] = 0; // Do convolution: for (int i=0; i < signal.Length; i++) for (int j=0; j < filter.Length; j++) result[i+j] = result[i+j] + signal[i] * filter[j]; 

Observe que o exemplo é extremamente simplificado. Ele não faz verificações de intervalo e não manipula as bordas corretamente. O filtro usado (box-car) é um filtro lowpass particularmente ruim, porque causará muitos artefatos (zumbido). Leia sobre o design do filtro.

Você também pode implementar os filtros no domínio da frequência. Veja como você implementa um filtro passa-alta usando FFT:

 double[] signal = (some 1d signal); // Do FFT: double[] real; double[] imag; [real, imag] = fft(signal) // Set the first quarter of the real part to zero to attenuate the low frequencies for (int i=0; i < real.Length / 4; i++) real[i] = 0; // Do inverse FFT: double[] highfrequencysignal = inversefft(real, imag); 

Novamente, isso é simplificado, mas você entende a ideia. O código não parece tão complicado quanto a matemática.

Eles são geralmente circuitos elétricos que tendem a passar partes de sinais analógicos. A passagem alta tende a transmitir mais das partes de alta frequência e a passagem baixa tende a passar mais das partes de baixa frequência.

Eles podem ser simulados em software. Uma média de caminhada pode agir como um filtro de baixa passagem, por exemplo, e a diferença entre uma média de caminhada e sua input pode funcionar como um filtro de alta freqüência.

O filtro passa-alta permite que a alta frequência (informações detalhadas / locais) seja transmitida .
O filtro passa- baixa permite que a baixa frequência (informações gerais / aproximadas / globais) passe .

A filtragem descreve o ato de processar dados de uma maneira que aplica diferentes níveis de atenuação a diferentes freqüências nos dados.

Um filtro de alta freqüência aplicará um mínimo de atenção (ou seja, deixará os níveis inalterados) para altas freqüências, mas aplicará a atenuação máxima a baixas freqüências.

Um filtro de baixa passagem é o inverso – não aplicará atenuação a baixas frequências aplicando atenuação a altas frequências.

Há vários algoritmos de filtragem diferentes usados. Os dois mais simples são provavelmente o filtro de Resposta de Impulso Finito (também conhecido como filtro FIR) e o filtro Infinite Impulse Response (também conhecido como filtro IIR).

O filtro FIR funciona mantendo uma série de amostras e multiplicando cada uma dessas amostras por um coeficiente fixo (que é baseado na posição da série). Os resultados de cada uma dessas multiplicações são acumulados e são a saída para essa amostra. Isso é chamado de Multiply-Accumulate – e em hardware DSP dedicado existe uma instrução MAC específica para fazer exatamente isso.

Quando a próxima amostra é obtida, ela é incluída no início da série e a amostra mais antiga da série é removida, e o processo é repetido.

O comportamento do filtro é fixado pela seleção dos coeficientes do filtro.

Um dos filtros mais simples, geralmente fornecido pelo software de processamento de imagens, é o filtro de média. Isso pode ser implementado por um filtro FIR, definindo todos os coeficientes do filtro para o mesmo valor.

Aqui está um exemplo super simples de um filtro de baixa passagem em C ++ que processa o sinal uma amostra por vez:

 float lopass(float input, float cutoff) { lo_pass_output= outputs[0]+ (cutoff*(input-outputs[0])); outputs[0]= lo_pass_output; return(lo_pass_output); } 

Aqui é praticamente a mesma coisa, exceto que é alta passagem:

 float hipass(float input, float cutoff) { hi_pass_output=input-(outputs[0] + cutoff*(input-outputs[0])); outputs[0]=hi_pass_output; return(hi_pass_output); }