Você está na página 1de 30

INSTITUTO FEDERAL DO CEARÁ - IFCE

ENGENHARIA DE TELECOMUNICAÇÕES

PROJETO DE FILTROS DIGITAIS


IMPLEMENTAÇÃO DE FILTROS FIR E IIR

IURI SANTANA DE ALENCAR


Conteúdo
1. Introdução ............................................................................................................................. 3
2. Fundamentos Teóricos .......................................................................................................... 4
2.1. Filtros ................................................................................................................................. 4
2.2. Filtros FIR ........................................................................................................................... 4
2.2.1. Método de Janelas ........................................................................................................ 6
2.3. Filtro IIR ............................................................................................................................. 8
2.4. Filtro Butterworth ........................................................................................................... 10
2.5. Filtro Chebyshev tipo I e II ............................................................................................... 10
2.6. Filtro Notch...................................................................................................................... 11
3. Metodologia e Resultados .................................................................................................. 11
3.1. Primeira parte (Filtro Notch) ........................................................................................... 11
3.2. Segunda Parte (Filtro IIR e FIR)........................................................................................ 16
3.3. IIR..................................................................................................................................... 16
3.4. FIR .................................................................................................................................... 19
4. Conclusão ............................................................................................................................ 22
5. Bibliografia .......................................................................................................................... 23
6. Códigos ................................................................................................................................ 24
6.1. Primeira parte (Notch) .................................................................................................... 24
6.2. Segunda parte (FIR e IIR) ................................................................................................. 26
6.3. IIR..................................................................................................................................... 26
6.4. FIR .................................................................................................................................... 28
1. Introdução

Nesse projeto será estudos práticos e teóricos para o desenvolvimento das etapas
presentes no projeto que estarão presentes filtros digitais do tipo FIR (Finite Impulse
Response) e IIR (Infinite Impulse Response). Esses filtros serão utilizados para retirar
os ruídos do sinais de áudios.
2. Fundamentos Teóricos

2.1. Filtros

Um filtro digital é feito com o objetivo de retirar interferências e ruídos que estão
presentes no sinal de entrada e esse processo é dividido em algumas etapas. No começo
de tudo, o sistema de comunicação parte da entrada de um sinal analógico, no domínio
do tempo contínuo, esse sinal é convertido em digital por um conversor analógico-
digital (A/D) que que gera uma sequêcia de números, que são gerados após a realzação
de cálculos, que são feitos multiplicando os valores de entrada por constantes e
somando os produtos restantes, também são utilizadas técnicas matemáticas como a
transformada de Fourier. Esta sequência numérica é transmitida pra um processador que
contém o filtro desejado, para que dessa forma os dados sejam filtrados. Após a
filtragem da informação, o sinal é passado novamente para um conversor digital-
analógico (D/A). A saída desse conversor é encaminhada para um filtro de reconstrução
que tem como propósito gerar um sinal senoidal, além de ter a função de filtro
passabaixa, reduzindo ruídos causados pelo conversor D/A. Após reconstruído, o sinal é
enviado ao destino.

Figura 1: Processo do Filtro Digital

2.2. Filtros FIR

O filtro FIR são filtros digitais do tipo não recursivo,ou seja, não possuem
realimentação, ou seja, os valores de saída passados não influenciam nos valores de
saída atuais. Os filtros FIR são caracterizados pela seguinte função de transferência:
Entre as propriedades do filtro está a que realiza uma resposta em frequência com fase
linear, dessa maneira, facilitando o processo de aproximação ao projetar um filtro FIR.
Também apresentam memória finita, oq faz com que se tenha duração limitada, são
também BIBO estável, ou seja, para todo sinal de amplitude limitada aplicado em sua
entrada, o mesmo ocorre com o sinal de saída que acaba sendo limitado, por fim, pode
implementada um resposta em módulo com resposta em fase linear, sem haja distorção
de fase. Os filtros FIR são utilizados principalmente no processamento de áudio,
imagem e na transmissão de dados. Os filtros FIR são colocados em prática de dois
modos: no domínio do tempo e no domínio da frequência. Na frequência, o filtro possui
poucos coeficientes utilizados e a filtragem acontece devido uma convolução do 3 Σ
sinal de entrada com estes coeficientes.

As expressões matemáticas dos filtros FIR podem ser representadas abaixo:


1. Resposta ao impulso
h[n] = b0.δ[n] + b1.δ[n − 1] + ... + bN .δ[n − N]
2. Resposta em frequência
H(e jΩ) = b0 + b1.e−jΩ + ... + bN.e−jΩ.N
3. Função transferência
H(z) = b0 + b1.z−1 + ... + bN .z−N
4. Equação de diferença
y[n] = b0.x[n] + b1.x[n − 1] + ... + bN.x[n − N]
Além da representação matemática, é possível demonstrar o filtro FIR em um diagrama
de blocos, como mostrado na expressão abaixo:
Figura 2: Diagra de blocos

2.2.1. Método de Janelas

Nos pontos de descontinuidade da série de Fourier que não convergiam foi descoberto
que havia uma pertubação, para reduzir essa oscilação em um filtro FIR são utilizadas
funcões de ponderação com objetivo de modificar seus coeficientes. Essa técnica das
funções no domíno do tempo são conhecidas com funções de janelas.
Levando em conta que as funções de janelas e que o projeto de um filtro FIR tem como
objetivo determinar os coeficientes de maneira a reduzir uma função de custo, sendo
que a mais usada é a do erro quadrático.

É possível mostrar a equação resultante de um filtro projetado utilizando o método de


janelas que apresenta o h[n] que á a resposta ao impulso ideal, para intervalo positivo
sabemos que será igual a hd[n] e o w[n]. Os coeficientes são obtidos pela minimização
da energia do erro através da janela retangular:
h[n] = w[n].hd[n]
Existem vários tipos de janelas diferentes, as mais comuns são: Retangular, Triangular,
Hamming, Hanning e Blackman.
Usando como base o formato de janela w[n], temos como domínio da frequência:
H(ejΩ) = W(ejΩ).Hd(ejΩ)
A convolução de W(ejΩ) com Hd (ejΩ) resulta em uma aproximação oscilatória da
função resposta em frequência desejada por H(ejΩ) do filtro FIR. Tais oscilações podem
ser reduzidas modificando-se a janela a ser utilizada.

Para aproximar a resposta em frequência do filtro do valor real, é preciso que a janela
retangular tenha valor unitário. Isso é representado no gráfico abaixo:

Resposta em frequência da janela retangular


É possível observar que a largura do lóbulo principal afeta a largura da faixa de
transição e os lóbulos laterais geram ondulações na banda de passagem e na banda de
corte.
Respostas em frequência das funções das janelas

2.3. Filtro IIR


Diferente do filtro FIR, o filtro IIR, são recursivos e por isso possuem realimentação, ou
seja, os valores de saída passados influenciam nos valores de saída atuais. Os filtros IIR
são caracterizados pela seguinte função de transferência:

A recursividade tem carcterística que tornam a duração da resposta do filtro infinita,


diferente de zero e durando indefinitivamente, diferente do filtro FIR que o valor chega
a zero depois de um tempo. Tal comportamento faz com que o filtro IIR possa ser usado
como um oscilador ou gerador de sinais. Como são filtros de duração infinita é possível
criar relação deles com filtros analógicos, uma vez que, os componentes reativos em um
filtro analógico possuem memória. Desssa forma, é possível dizer que um filtro de
resposta ao impulso infinita pode ser demonstrado por uma equação diferencial discreta,
desde que os valores de entradas e saídas anteriores sejam considerados. Outra diferença
pode ser notada ao observar que não possuem fase linear, pois provocam distorção de
fase, diferentemente do FIR que é linear. Se comparado ao filtro FIR é necessario uma
ordem menor o que diminui o atraso em relação aos filtros de ondem maiores, a sua
estabilidade depende da posição dos polos e de um determinado grau de aproximação
do filtro.
Com o conhecimento de algumas das características do filtro IIR e algumas das suas
diferenças em relação ao filtro FIR, é possível apresentar a sua função de transferência,
a sua resposta em frequência e a equação de diferença:
1. Resposta em frequência

2. Função transferência

3. Equação de diferença

Para projetar um filtro IIR, utilizamos o método de Transformação Bilinear. Esse


método realiza a mudança de variável. Primeiro um modelo analógico com as
características do filtro IIR desejado é feito, depois com o objetivo de encontrar a sua
forma digital correspondente, realizaremos o mapeamento do plano de Laplace no plano
Z, ou seja, transformaremos a sua função de Transferência em Laplace para a função de
Transferência em Z. Abaixo é apresentado o processo:
H(s) → H(z)
Para:

Com isso é possível mostrar as especificações necessárias de um filtro de resposta ao


impulso infinito como está abaixo:
2.4. Filtro Butterworth
No filtro Butterworth, a resposta em frequência, não apresenta oscilações. Esse filtro é
projetado para ter uma resposta em frequência o mais plana possível na sua banda
passante, a qual não possui ripple. Esse tipo de filtro tem na sua banda rejeitada um
valor próximo ao zero. Sobre o aumento da sua ordem, o comportamento do filtro
Butterworth quase não sofre alteração, o que diferencia quando a ordem aumenta é a
inclinação mais acentuada na banda de rejeição.
A sua função de transferência:

2.5. Filtro Chebyshev tipo I e II


O filtro Chebyshev é diferente do Butterworth e o mesmo é dividido em dois tipos. Os
seus gráficos são parecidos, contudo, o Chebyshev Tipo I possui em sua banda de
passagem oscilações e apresenta um ϵ (ripple) controlável, já o Chebyshev Tipo II, é na
banda de rejeição e o δ (delta) é controlável. Os dois tipos tem uma caracteristica em
comum que diferem do Butterworth, quando projetado com a mesma ordem os filtros, a
sua banda de transição é menor que a do Butterworth, pois não possui essa descida lenta
como vimos anteriormente. As funções de transferência do Chebyshev I e II são
apresentadas abaixo:
1. Chebyshev Tipo I

onde |ϵ| < 1.


2. Chebyshev Tipo II

2.6. Filtro Notch


O filtro Notch é criado da derivação de filtros rejeita-faixa e possui uma característica
importante de atenuar, com precisão, apenas uma estreita faixa de frequência, tomando
em consideração a sua constante r. A sua função de transferência pode ser visualizada
abaixo.

A resposta em frequência do filtro Notch é apresentada em gráficos conforme explicado


anteriormente considerando o valor de r = 0.99 (fechado) e r = 0.7 (mais aberto).

3. Metodologia e Resultados
O projeto tem como objetivo eliminar as interferências no áudio original que está no
arquivo som3.wav (primeira parte) e no arquivo pig_ruido.wav (segunda parte). Para
filtrar esses áudios será utilizados o conhecimento adquirido sobre os filtros.

3.1. Primeira parte (Filtro Notch)


Nessa parte do projeto será utilizado o arquivo som3.wav, sabendo disso abro o octave
para realizar uma análise espectral do áudio e com isso poder descobrir onde está o
ruido e como ele é.
Resultado da análise espectral

O próximo passo é aplicar o filtro que nesse caso será o Notch, pois como o ruido está
na frequência de 5000 Hz é necessário um filtro que haja com precisão em uma
determinada faixa de frequência, pois como é um sinal estreito que estava dentro do
sinal da voz, assim escolhemos um parâmetro r = 0,99 que é o suficiente para extrair
apenas o sinal do ruído sem comprometer o sinal que desejamos.
Local onde o filtro irá atuar

Após isso implementei o filtro e retirei o ruido ficando da seguinte maneira.


Resultado após o uso do filtro Notch

Ao final da realização da filtragem, um arquivo de áudio foi gravado em


”som.FiltroNotch.wav”. Observando a imagem abaixo, podemos ver o sinal filtrado no
domínio do tempo.

Por fim, podemos analisar o gráfico com a resposta ao impulso do filtro projetado.
3.2. Segunda Parte (Filtro IIR e FIR)

3.3. IIR
Nessa parte do projeto será utilizado o arquivo pig_ruido.wav, sabendo disso abro o
octave para realizar uma análise espectral do áudio e com isso poder descobrir onde está
o ruido e como ele é.

O próximo passo é a aplicar o filtro que nesse caso será o IIR(Chebyshev Tipo I), para
retirar “assobio” que está atrapalhando a música.
( A parte da banda passante e de rejeição não ficaram muito visiveis no print, mas
abrindo pelo octave da pra ver tranquilo.)

Após isso o filtro foi implementado e com isso o ruido foi retirado ficando da seguinte
maneira.
Ao final da realização da filtragem, um arquivo de áudio foi gravado em
”pig_ruido.FiltroIIR.wav”. Observando a imagem abaixo, podemos ver o sinal filtrado
no domínio do tempo.
Por fim, podemos analisar o gráfico com a resposta ao impulso do filtro projetado.

3.4. FIR
Por fim, o arquivo pig_ruido.wav será utilizadado novamente, sabendo disso abro o
octave para realizar uma análise espectral do áudio e com isso poder descobrir onde está
o ruido e como ele é.
O próximo passo é a aplicar o filtro que nesse caso será o FIR, para retirar “assobio”
que está atrapalhando a música.
Após isso o filtro foi implementado e com isso o ruido foi retirado ficando da seguinte
maneira.

Ao final da realização da filtragem, um arquivo de áudio foi gravado em


”pig_ruido.FiltroFIR.wav”. Observando a imagem abaixo, podemos ver o sinal filtrado
no domínio do tempo.
Por fim, podemos analisar o gráfico com a resposta ao impulso do filtro projetado.

4. Conclusão

Com o conhecimento que foi abordado na parte da fundamentação teórica, se tornou


viavél a utilização dos filtros IIR e FIR, pois dessa forma foi possível ter o
entendimento para aplicar e compreender tais filtros, visualizar os gráficos no domínio
do tempo e da frequência durante todo processo. Os filtros utilizados foram capazes de
filtrar os sinais de áudio disponibilizados com ruído e “assobio”, para se obter somente
a voz humana no áudio som3 e a voz humana e os instrumentos no pig_ruido,
eliminando totalmente as interferências presentes nos arquivos originais, tais resultados
foram observados após ouvir o áudio final e observar os espectros das componentes da
voz antes e depois de passar pelos filtros. Foi notado durante o trabalho, que os valores
da frequência de corte e da ordem do filtros precisaram ser testados inúmeras vezes até
encontrar um resultado satisfatório. Encerro dizendo que esse trabalho possibilitou
compreender como ocorre um processo de filtragem digital em um sinal de aúdio, uma
vez que todo o script foi desenvolvido no Octave, a função filtro_fir que foi feita em
sala de aula foi utilizada para que o projeto de implementação de filtros digitas FIR e
IIR fosse realizado.
5. Bibliografia
http://www.ece.ufrgs.br/~eng04006/aulas/aula24.pdf
http://www.ifba.edu.br/professores/fsimoes/FIR.pdf
HAYKIN,Simon. VEEN, Barry V. Sinais e Sistemas. Porto Alegre: Bookman, 2001.
HAMMING, R Digital Filters. 3rd. Ed. Mineola, NY: Dover Publications, 1997
6. Códigos

6.1. Primeira parte (Notch)

close all;
clear all;
clc;

%ANALISE ESPECTRAL
[x,fa] = audioread('som3.wav'); %Ler do audio
n = length(x);
X = fft(x);
N = length(X);
X = X/(N/2);

f = [0:N-1]*fa/(N-1);

figure ()
plot(f(1:N/2), abs(X(1:N/2)));
pkg load signal

%FILTRO NOTCH 5000 Hz


wc_notch = 5000*2*pi/fa; %Frequencia de corte
r = 0.99; %Parametro r
b_notch = [1 -2*cos(wc_notch) 1]; %Coeficientes de b
a_notch = [1 -2*r*cos(wc_notch) r^2]; %Coeficientes de a
[H_notch,W_notch] = freqz(b_notch, a_notch, N, fa);

figure ()
plot(f(1:N/2), abs(X(1:N/2))); %Mostra o sinal
hold on
pkg load signal

plot(W_notch, abs(H_notch)); %Mostra onde havera o corte com o uso do


filtro
hold on
pkg load signal

k = filter(b_notch, a_notch, x); %Implementa o filtro notch


K = fft(k);
K = K/(N/2);

figure ()
plot(f(1:N/2), abs(K(1:N/2))); %Grafico depois que o ruido foi eliminado
hold on
pkg load signal

figure ()
plot(k);
hold on
pkg load signal

filename = 'som.FiltroNotch.wav';
audiowrite (filename,k,fa);

%RESPOSTA AO IMPULSO
d = zeros(1, 5000);
l = [1 d];
h = filter(b_notch, a_notch, l);
figure ()
plot(h);
pkg load signal

6.2. Segunda parte (FIR e IIR)

6.3. IIR

% ANALISE ESPECTIRAL
[x,fa] = audioread('pig_ruido.wav'); %faz a leitura do arquivo
n = length(x);
X = fft(x);
N = length(X);
X = X/(N/2);

f = [0:N-1]*fa/(N-1);

figure ()
plot(f(1:N/2), abs(X(1:N/2))); %grafico de filtragem
hold on
pkg load signal

% FILTRO IIR

wc_cheby = pi*2800/fa; %Frequencia de corte

[b_cheby,a_cheby] = cheby1(10, 0.1, wc_cheby); %Filtro Chebyshev tipo I


[H_cheby,W_cheby] = freqz(b_cheby,a_cheby, N, fa);

figure ()
plot(f(1:N/2), abs(X(1:N/2))); %grafico de filtragem
hold on
plot(W_cheby, abs(H_cheby));
pkg load signal

k = filter(b_cheby, a_cheby, x); %filtro Chebyshev tipo I


K =fft(k);
K = K/(N/2);

figure ()
plot(f(1:N/2), abs(K(1:N/2))) %Grafico com o ruido eliminado

figure ()
plot(k); %Grafico com audio filtrado

filename = 'pig_ruido.FiltroIIR.wav'; %Nome do arquivo .wav


audiowrite (filename,k,fa); %Salvar arquivo

%RESPOSTA AO IMPULSO

d = zeros(1, 2800);
l = [1 d];
h = filter(b_cheby, a_cheby, l);

figure ()
plot(h); %Grafico da resposta do impulso
6.4. FIR

close all;
clear all;
clc;

function s=filtro_fir(b,x)

N = length(b);
M = length(x);

y = zeros(1,M);
aux = zeros(N,1);

for i = 1:M
aux = shift(aux,1);
aux(1) = x(i);
s(i) = b*aux;
endfor
endfunction

[x,fa] = audioread('pig_ruido.wav'); %Faz a leitura do Audio

n = length(x);
X = fft(x);
N = length(X);
X = X/(N/2);
f = [0:N-1]*fa/(N-1);

figure ()
plot(f(1:N/2), abs(X(1:N/2))); %Mostra o sinal sem a parte simetrica
pkg load signal

%--------FILTRO FIR--------%

w_fir = 2*6000/fa; %Frequencia de corte


c = fir1(300, w_fir); %Filtro FIR
[H_fir, W_fir] = freqz(c, 1, N, fa);

figure ()
plot(W_fir, abs(H_fir));
pkg load signal

k = filtro_fir(c, x);
K = fft(k);
K = K/(N/2);

figure () %grafico com ruido eliminado


plot(f(1:N/2), abs(K(1:N/2)));
pkg load signal

figure ()
plot(k); %grafico com audio filtrado
pkg load signal

filename = 'pig_ruido.FiltroFIR.wav'; %Nome do arquivo .wav


audiowrite (filename,k,fa); %Salva Audio filtrado
%--------RESPOSTA AO IMPULSO--------%

d = zeros(1, 2800);
l = [1 d];
h = filter(c, 1, l);

figure ()
plot(h); %grafico da resposta ao impulso
pkg load signal

Você também pode gostar