🎵 Script Python para redução de ruído em sinais de áudio utilizando o filtro IIR Chebyshev Tipo II como técnica principal.
Este projeto implementa um pipeline completo de processamento digital de sinais (DSP) para remover ruído de arquivo de áudio. A técnica principal é o filtro Chebyshev Tipo II (passa-baixas), que se destaca por apresentar:
- ✅ Resposta maximamente plana na banda de passagem (sem ripple)
- ✅ Atenuação controlada e equiripple na banda de rejeição
- ✅ Transição abrupta passband→stopband
- ✅ Zeros de transmissão para atenuação infinita em certas frequências
O script executa os seguintes estágios em sequência:
- Wiener Filter (domínio STFT) — Estimativa e subtração do ruído estacionário
- Chebyshev Tipo II (passa-baixas) — Atenuação de altas frequências
- Butterworth (passa-altos) — Remoção de componentes muito baixas (< 300 Hz)
- Noise Gate (domínio temporal) — Silenciamento de blocos abaixo do limiar de energia
numpy >= 1.21
scipy >= 1.7
matplotlib >= 3.4
pip install numpy scipy matplotlib- Coloque seu arquivo de áudio em
.wavna raiz do projeto (ou ajusteINPUT_WAVno script) - Execute:
python index.pyO script produz automaticamente:
- 📁
Arquivo3_filtrado_v2.wav— Áudio processado (16-bit PCM) - 📊
av3_analise.png— Gráfico de análise espectral (antes/depois) - 📈
av3_resposta_freq.png— Resposta em frequência do filtro
| Parâmetro | Padrão | Descrição |
|---|---|---|
INPUT_WAV |
Arquivo3.wav |
Arquivo de áudio de entrada |
OUTPUT_WAV |
Arquivo3_filtrado_v2.wav |
Nome do arquivo processado |
OUTPUT_GAIN_DB |
-0.5 |
Ganho aplicado após processamento (em dB) |
| Parâmetro | Padrão | Descrição |
|---|---|---|
N_FFT |
2048 |
Tamanho da janela de análise (amostras) |
HOP |
512 |
Deslocamento entre janelas |
WINDOW |
"hamming" |
Tipo de janela (reduz vazamento espectral) |
| Parâmetro | Padrão | Descrição |
|---|---|---|
WIENER_ALPHA |
5.4 |
Fator de superestimação do ruído |
WIENER_FLOOR |
0.027 |
Ganho mínimo (evita supressão total) |
NOISE_PERCENT |
0.37 |
Fração de frames para estimar ruído (37%) |
ENABLE_SPECTRAL_GATE |
True |
Ativa máscara espectral |
GATE_THRESHOLD |
0.055 |
Limiar da máscara espectral |
| Parâmetro | Padrão | Descrição |
|---|---|---|
ENABLE_CHEBY2 |
True |
Ativa o filtro Chebyshev |
CHEBY2_ORDER |
8 |
Ordem do filtro (transição mais abrupta) |
CHEBY2_RS_DB |
100 |
Atenuação mínima no stopband (dB) |
CHEBY2_CUTOFF_HZ |
7200 |
Frequência de corte (Hz) |
| Parâmetro | Padrão | Descrição |
|---|---|---|
ENABLE_HPF |
True |
Ativa o filtro passa-altos |
HPF_CUTOFF_HZ |
300 |
Frequência de corte inferior (Hz) |
| Parâmetro | Padrão | Descrição |
|---|---|---|
ENABLE_NOISE_GATE |
True |
Ativa silenciamento de blocos baixos |
NOISE_GATE_THRESHOLD |
0.008 |
Limiar de energia RMS |
A função de transferência ao quadrado é definida por:
Onde:
-
$T_n(x)$ é o polinômio de Chebyshev de ordem$n$ -
$\varepsilon$ é o parâmetro de ripple no stopband -
$\Omega_s$ é a frequência de início do stopband -
$\Omega_c$ é a frequência de corte
Vantagens sobre o Chebyshev Tipo I:
- Sem ripple na banda de passagem
- Resposta monotônica no passband
- Transição muito abrupta
Para cada bin tempo-frequência:
Onde
filtro-Chebyshev/
├── index.py # Script principal
├── README.md # Esta documentação
├── Audios/ # Pasta para áudios de entrada
├── Gráficos/ # Pasta para gráficos de saída
└── *.wav # Arquivos de áudio processados
- Aumente
WIENER_ALPHA(p.ex. 7.0) - Diminua
WIENER_FLOOR(p.ex. 0.01) - Aumente
CHEBY2_ORDER(p.ex. 10)
- Diminua
WIENER_ALPHA(p.ex. 3.0) - Aumente
WIENER_FLOOR(p.ex. 0.05) - Aumente
CHEBY2_CUTOFF_HZ(p.ex. 8000)
- Diminua
N_FFT(p.ex. 1024) - Aumente
HOP(p.ex. 1024)