Você está na página 1de 11

UFRGS - PPGEE - 2012 LAB05a

Processamento Digital de Sinais (DSP) - laboratório 05a - Projeto de Filtros


Digitais
Material Desenvolvido pelo Prof. Charles A. Bouman e traduzido (com autorização) pelo
Prof. Valner Brusamarello
Departamento de Engenharia Elétrica, Universidade Federal do Rio Grande do Sul
brusamarello.valner@gmail.com

1 Introdução
Esta é a primeira parte de laboratório de projeto de Filtros digitais. A primeira semana
cobre alguns exemplos de filtros FIR e IIR e então introduz o conceito de projeto de filtros
FIR. A segunda parte cobre a metodologia de implementação dos filtros FIR e IIR.

2 Filtros Digitais
Em aplicações com processamento digital de sinais é geralmente necessário mudar as ampli-
tudes relativas das componentes de frequência ou remover frequências indesejadas do sinal.
Esse processo é chamado de filtragem. Filtros digitais são utilizados em uma variedade de
aplicações. No laboratório 4 nós vimos que filtros digitais podem ser utilizados em sistemas
que implementam interpolação e decimação em sinais discretos no tempo. Filtros digitais
também são utilizados em sistemas de audio que permitem ao usuário ajustar os graves,
médios e agudos. O projeto de filtros digitais requer o uso de técnicas nos domı́nios tempo
e frequência. Isso porque as especificações do filtro são feitas no domı́nio da frequência mas
os filtros são usualmente implementados no domı́nio do tempo por meio de equações de
diferenças. Tipicamente, a análise no domı́nio frequência é feita usando a transformada Z e
a DTFT (Discrete Time Fourier Transform). Em geral, um filtro linear, invariante no tempo
e causal com entrada x(n) e saı́da y(n) pode ser especificado por sua equação de diferenças:
N
X −1 M
X
Y (n) = bi x(n − i) − ak y(n − k) (2.1)
i=0 k=1

onde bi e ak são os coeficientes do filtro. Diz-se que esse filtro tem N zeros e M polos. Cada
novo valor do sinal de saı́da y(n) é determinado por valores passados da saı́da e por valores
presentes e passados da entrada. A resposta ao impulso, h(n), é a resposta do filtro a uma
entrada do tipo δ(n), e é portanto a solução da equação de diferenças recursiva.
N
X −1 M
X
h(n) = bi δ(n − i) − ak h(n − k) (2.2)
i=0 k=1

Existem duas classes gerais de filtros digitais: infinite impulse response (IIR) e finite
impulse response (FIR). O caso FIR ocorre quando ak = 0, para todos os k. Esse filtro não
UFRGS - PPGEE - 2012 LAB05a

tem pólos, apenas zeros e nesse caso a equação de diferenças torna-se:


N
X −1
h(n) = bi δ(n − i) (2.3)
i=0

Como essa equação não é recursiva, a resposta ao impulso tem duração finita N. Nos
casos onde ak 6= 0, a equação de diferenças representa geralmente umfiltro IIR. Nesse caso, a
equação de diferenças gera uma reposta ao impulso que não é zero quando n → 0. Entretanto,
veremos que para certos valores de ak 6= 0 e bi , é possı́vel gerar uma resposta de um filtro FIR.
A Transformada Z é a principal ferramenta utilizada para analisar a resposta em frequência
de filtros e suas equações de diferenças. A Transformada Z de um sinal discreto no tempo,
x(n) é dada por:
X∞
X(z) = x(n)z −n (2.4)
n=−∞

Onde z é uma variável complexa. A DTFT pode ser pensada como um caso especial da
Transformada Z, onde z é avaliado no cı́rculo unitário do plano complexo.
n=∞
X
jw
X(e ) = X(z) = x(n)e−jwn (2.5)
z=ejw
n=−∞

Da definição de transformada Z, uma mudança de variável m = n − K mostra que um


delay de K amostras no domı́nio tempo é equivalente a multiplicação por z − k no domı́nio
z.

X
x(n − K)←
z
→ x(n − K)z −n =
n=−∞
X∞
= x(m)z −(m+K) =
m=−∞ (2.6)

X
= z −K x(m)z −m =
m=−∞

= z −K X(z)

Podemos então reescrever a Equação de diferenças no domı́nio Z:


N
X −1 M
X
Y (z) = bi z −i X(z) − ak z −K Y (z)
i=0 k=1
 M
X  N
X −1
−k
Y (z) 1 + ak z = X(z) bi z −i (2.7)
k=1 i=0
PN −1 −i
Y (z) i=0 bi z
H(z) = =
X(z) 1+ M
P −k
k=1 ak z
UFRGS - PPGEE - 2012 LAB05a

Figure 2.1: Forma direta de implementação para um filtro de tempo discreto descrito por
uma equação de diferenças

Essa equação mostra que qualquer filtro pode ser representado por uma equação de
diferenças linear com coeficientes constantes. Essa equação, conforme mostrado é represen-
tada por uma razão de polinômios. Assim, podemos calcular a resposta em frequência do
filtro avaliando H(z) no cı́rculo unitário.
PN −1
jw i=0 bi e−jwi
H(e ) = P M
(2.8)
1+ k=1 ak e−jwk

Existem diferentes métodos para implementar uma equação recursiva. Dependendo da


aplicação, alguns métodos podem ser mais robustos ao erro de quantização, podem necessitar
de menos células de multiplicação ou adição ou ainda requerem menos memória. A Figura
2.1 mostra um diagrama conhecido como implementação na forma direta. O mesmo funciona
para qualquer fitro de tempo discreto por equação de diferenças. Note que as caixas contendo
o sı́mbolo z − 1 representam unidades de delay, enquanto um parâmetro escrito próximo ao
caminho do sinal representa multiplicação por esse parâmetro.
UFRGS - PPGEE - 2012 LAB05a

Figure 3.1: Localização de dois zeros para um filtro FIR de segunda ordem

3 Projeto de um Filtro FIR simples


Para ilustrar o uso de zeros em projeto de filtros, você projetará um simples filtro FIR de
segunda ordem com os dois zeros no cı́rculo unitário como mostrado na Figura 3.1. Para
que a resposta ao impulso do filtro tenha um valor real, os dois zeros devem ser complexos
conjugados:

z1 = ejθ z2 = e−jθ

onde θ é o ângulo de z1 em relação ao eixo real positivo. Veremos posteriormente que


θ ∈ [0, π] pode ser interpretado como a localização dos zeros na resposta em frequência. A
função de transferência para esse filtro é dada por:

Hf (z) = (1 − z1 z −1 )(1 − z2 z −1 )
= (1 − ejθ z −1 )(1 − e−jθ z −1 ) (3.1)
= 1 − 2cosθz −1 + z −2

Utilize essa função de transferência para determinar a equação de diferenças para esse
filtro. Então desenhe o correpondentes diagrama e clacule a resposta ao impulso do filtro
h(n).
Este é um filtro FIR porque ele possui uma reposta ao impulso h(n) com duração finita.
Qualquer filtro com apenas zeros e sem pólos além daqueles em 0 e ±∞ é um fltro FIR.
Zeros na função de transferência representam frequências que não passaram pelo filtro. Isso
pode ser útil para remover freqências indesejadas no sinal. O fato de que Hf (z) tem zeros em
e±jθ = 0 segnifica que o filtro não deixará passar componentes sinusoidais puras de frequência
w = θ.
Utilize o Matlab para calcular e plotar a magnitude da resposta em frequência do filtro
|Hf (ejw )| como uma função de w no intervalo −π < w < π, para os três valores de θ:
UFRGS - PPGEE - 2012 LAB05a

• θ = π/6

• θ = π/3

• θ = π/2

Coloque os três gráficos na mesma figura usando o comando subplot. Explique como os
valores de θ afetam a magnitude da resposta em frequência do filtro.
No próximo experimento nós vamos utilizar o filtro Hf (z) para remover uma indesejada
interferência sinusoidal de um sinal de voz. Para esse experimento faça o download do
sinal de áudio nspeech1.mat e o arquivo Matlab (m-file) DTFT.m. Carregue o ar-
quivo nspeech1.mat usando o comando load nspeech1. Assim o arquivo será carregado no
workspace. Execute o arquivo de voz com o comando sound e então plote 101 amostras do
sinal para os ı́ndices de tempo (100:200). Em seguida utilize o comando DTFT para exe-
cutar a Transformada de Fourier de Tempo Discreto do sinal de áudio. O comando DTFT
tem a seguinte sintaxe:

[X,w]=DTFT(x,M)

onde x é um sinal que inicia no tempo n=0 e M especifica o número de pontos de saı́da
da DTFT. O comando [X,w]=DTFT(x,0) gera uma DTFT com a mesma duração que a
entrada; se isso não for suficiente, pode-se especificar M. As saı́das da função são um veor
X contendo as amostras da DTFT e um vetor w contendo as correspondentes frequências
dessas amostras.
Calcule a magnitude da DTFT de 1001 amostras do sinal de áudio para os ı́ndices de
tempo (100:1100). Plote a magnitude das amostras da DTFT versus frequência para |w| < π.
Note que há dois picos correspondentes a interferência sinusoidal. Use o comando max para
determinar a frequência exata dos picos. Esse será o valor de θ que nós utilizaremos para
filtrar com Hf (z). Dica: use o comando [Xmax,Imax]=max(abs(X)) para encontrar o valor
e o ı́ndice do elemento de valor máximo em X.
Escreva uma função Matlab FIRfilter(x) que implementa o filtro Hf (z) com o valor
medido de θ e entrega na saı́da o sinal filtrado ( Dica: use convolução. Aplique a nova
função FIRfilter no sinal nspeech1 para atenuar a interferência sinusoidal. Escute o sinal
filtrado e verifique os efeitos do filtro. Plote 101 amostras do sinal para os ı́ndices de tempo
(100:200), e plote a magnitude de 1001 amostras do sinal filtrado para os ı́ndices de tempo
(100:1100).
Comente como o conteúdo de frequência modificou-se após a filtragem. O filtro utilizado
é de que tipo? passa-baixas, passa-altas, passa-banda ou rejeita banda? Comente como o
filtro modificou a qualidade do sinal.

4 Projeto de um filtro IIR simples


Enquanto os zeros atenuam um sinal filtrado os polos amplificam componentes do sinal
que estão próximas do seu valor de frequência. Nesta secção ilustraremos como os polos
UFRGS - PPGEE - 2012 LAB05a

Figure 4.1: Localização dos dois polos em um filtro IIR simples

podem ser utilizados para separar um sinal de banda estreita de um sinal de ruı́do. Esses
filtros são utilizados para separar sinais modulados de ruı́do de fundo em aplicações como
demodulação de rádio frequência. Considere a seguinte função de transferência para um
filtro IIR de segunda ordem com polos conjugados complexos:
1−r
Hi (z) =
(1 − rejθ z −1 )(1
− re−jθ z −1 )
(4.1)
1−r
=
1 − 2rcos(θ)z −1 + r2 z −2

A Figura 4.1 mostra as localizações dos dois polos desse filtro. Os polos têm a seguinte forma:

p1 = rejθ p2 = re−jθ

Onde r é a distância da origem e θ é o ângulo de p1 em relação ao eixo real positivo. Da


teoria de Tranformadas Z sabemos que um filtro causal é estável se e somente se os seus polos
estiverem dentro do cı́rculo unitário. Isso implica que esse filtro é estável se e somente se
|r| < 1. Entretanto, veremos que posicionando os polos próximo do cı́rculo unitário a banda
do filtro pode ser extremamente estreita apóxima de θ. Este sistema com dois polos é um
exemplo de um filtro IIR porque a sua resposta ao impulso tem duração ininita. Qualquer
filtro com polos não triviais (sem polos em z = 0 ou z = ±∞) é um filtro IIR a menos que os
polos sejam cancelados por zeros. Calcule a magnitude da resposta em frequência |Hi (ejw )|
para |w| < π para θ = π/3 e para os seguintes valores de r:

• r = 0.99

• r = 0.9
UFRGS - PPGEE - 2012 LAB05a

• r = 0.7
Coloque os três gráficos na mesma figura utilizando o comando subplot e explique como
o valor de r afeta a magnitude
No experimento seguinte nós vamos utilizar o filtro Hi (z) para separar um sinal sinusoidal
modulado de um ruı́do de fundo. Para executar esse experimento, primeiro faça o download
do arquivo pcm.mat e carregue-o no Matlab com o comando load pcm. Execute o arquivo
com o comando sound. Plote 101 amostras do sinal para os ı́ndices (100:200) e então calcule
a magnitude da DTFT de 1001 amostras de pcm relativas aos ı́ndices (100:1100). Plote a
magnitude das amostras da DTFT versus a frequência radial para |w| < π. Os dois picos
no espectro correspondem a frequência central do sinal modulado. A banda com baixa
amplitude corresponde ao ruı́do de fundo. Nesse exercı́cio você deve utilizar o filtro IIR
descrito acima para amplificar o sinal de interesse.
O sinal pcm está modulado em 3146 Hz e amostrado a 8 kHz. Utilize esses valores
para calcular o valor de θ para o filtro Hi (z). Lembre-se do teorema da amostragem que a
frequência radial de 2π corresponde a frequência de amostragem. Escreva um função Matlab
IIRfilter(x) que implementa o filtro Hi (z). Nesse caso você precisará de um laço for para
implementar a equação de diferenças recursiva. Utilize o valor de θ calculado e r = 0.995.
Você pode assumir que y(n) é igual a zero para valores negativos de n. Aplique o novo
comando IIRfilter ao sinal pcm para separar o sinal desejado do ruı́do de fundo e escute o
sinal filtrado. Plote o sinal filtrado para os ı́ndices (100:200) e então calcule a DTFT de 1001
amostras do sinal filtrado para usando os ı́ndices de tempo (100:1100). Plote a magnitude
dessa DTFT. Para visualizar a DTFT próximo de w = θ plote também a porção dessa DTFT
para os valores de w na faixa [θ − 0.02, θ + 0.02]. Utilize o valor calculado de θ. Comente
como o sinal em relação a forma e áudio antes e depois da filtragem. Comente também o que
você esperaria em termos de modificações no sinal se r variar. Um valor de r = 0.9999999
seria efetivo para essa aplicação? Porque?

5 Projeto de filtro passa baixas


É bastante comum necessitarmos de uma boa aproximação de um filtro ideal passa-baixas,
passa-altas, ou passa-banda. A figura 5.1 ilustra as caracteı́sticas tı́picas de um filtro passa
baixas real. As frequências |w| < wp são denominadas de banda passante e as frequências
ws < |w| ≤ π são denominados de banda de rejeição. Para qualquer filtro real wp < ws . A
faixa de frequências wp ≤ w ≤ ws é conhecida como banda de transição. A magnitude da
resposta do filtro, H(ejw ) está confinada entre a banda passante e a banda de rejeição pelas
seguintes equações:
|H(ejw ) − 1| ≤ δp para |w| < wp
(5.1)
|H(ejw )| ≤ δs para ωs < |w| ≤ π
onde δp e δs são conhecidos como ripple da banda passante e de rejeição respectiva-
mente. A maioria das técnicas de projeto de filtros dependem das especificações de quatro
parâmetros: wp , ws , δp , e δs .
UFRGS - PPGEE - 2012 LAB05a

Figure 5.1: Especificações para a resposta em frequência de um filtro

Para ilustrar a seleção desses parâmetros considere o problema de filtrar o ruı́do de


fundo de um sinal de voz. A Figura 5.2 mostra a DTFT de uma janela de um sinal de voz
denominado nspeech2. Note que há duas componentes principais nesse sinal, uma de baixa
frequência e outra em altas frequências. As componentes de alta frequência são ruı́do, cuja
banda é limitada em |w| > 2.2. O sinal de voz é de baixa frequência e está limitado em
|w| < 1.8. Faça o download do arquivo nspeech2.mat e carregue-o no Matlab. Execute o
arquivo com o comando sound e verifique a qualidade do mesmo.
Nas próximas secções vamos calcular um filtro passa baixas para separar o sinal de voz
e o ruı́do de fundo usando diferentes métodos.

5.1 Projeto de filtros usando truncamento


Idealmente um filtro passa-baixas com frequência de corte wc deve ter seguinte resposta em
frequência: (
jw 1 |w| ≤ wc
Hideal (e ) = (5.2)
0 wc < w ≤ π
e uma resposta ao impulso correspondente:
 
wc wc n
hideal (n) = sinc para − ∞ < n < ∞ (5.3)
π π
Entretanto, nenhum filtro ideal pode ter essa resposta em freqência porque hideal (n) tem
duração infinita.
UFRGS - PPGEE - 2012 LAB05a

Figure 5.2: DTFT de um trecho de um sinal de voz com ruı́do de fundo

Figure 5.3: Resposta em frequência de um filtro passa baixas projetado com o método do
truncamento

Um método para criar uma aproximação realizável de um filtro ideal é truncar a sua
resposta ao impulso fora do intervalo n ∈ [−M, M ]. Assim temos:
  
 wc sinc wc n para n = −M, ..., 0, 1, ..., M
htrunc = π π
(5.4)
0 caso contrário

A Figura 5.3 mostra a resposta do filtro passa baixas com fequência de corte wc = 2.0,
com a resposta ao impulso truncada em n ∈ [−10, 10]. Note o comportamento oscilatório
dessa reposta próximo da frequência de corte e da grande quantidade de ripple na banda de
UFRGS - PPGEE - 2012 LAB05a

Figure 5.4: DTFT de uma janela retangular de tamanho 21

rejeição.
Devido a propriedade de modulação da DTFT, a resposta em frequência do filtro truncado
é resultado da convolução da magnitude da resposta do filtro ideal (função rect) com a janela
truncada. A DTFT da janela truncada mostrada na Figura 5.4 é similar a função sinc uma
vez que a mesma é a DTFT de uma janela retangular amostrada. Note que essa DTFT tem
bandas lateriais largas, o que leva a um grande ripple no filtro final.
Uma resposta ao impulso truncada é de duração finita, mas o filtro continua não causal.
Para tornar-se causal, o filtro FIR precisa ser deslocado para a direita em M unidades. Para
um filtro de tamanho N = 2M + 1 esse filtro truncado e deslocado é dado por:
  
 wc sinc wc (n − N −1 ) para n = 0, 1, ..., N − 1
htrunc = π π 2
(5.5)
0 caso contrário

Esse tempo de deslocamento de (N − 1)/2 unidades para a direita corresponde a multi-


plicar a resposta em frequência por e−jw(N −1)/2 . Ele não afeta a manitude da resposta em
frequência do filtro, mas adiciona um fator e−jw(N −1)/2 na fase. Esse filtro é chamado de fase
linear porque a sua fase é uma função linear de w.
É interessante perceber que o filtro da equação 5.5 é válida para N par ou ı́mpar. A escolha
de N ı́mpar ou par resultará em um filtro de fase linear, mas esses filtros terão caracterı́sticas
diferentes no domı́nio do tempo. Se N for ı́mpar então o valor de em n = (N − 1)/2 é
amostrado no pico da função sinc, mas se N é par então os dois valores em n = N/2 e
n = (N/2) − 1 estão equilibrados entre o pico.
Para verificar os efeitos do comprimento do filtro, bem como as caracterı́sticas do mesmo
escreva uma função Matlab LPFtrunc(N) que calcula a resposta ao impulso truncada e
deslocada para um filtro passa-baixas com uma frequência de corte de wc = 2.0. Para cada
um dos seguintes tamanhos de filtros plote a magnitude da DTFT do filtro em dB. Dica: a
UFRGS - PPGEE - 2012 LAB05a

magnitude da resposta em dB é dada por |HdB (ejw )| = 20log10 |H(ejw |. Note que o comando
log no Matlab calcula o lagaritmo natural,portanto utilize o comando log10. Para obtermos
uma representação precisa da DTFT tenha certeza de que você calculou no mı́nimo 512
pontos (amostras) usando o comando [X,w]=DTFT(filterresponse,512).

• N = 21

• N = 101

Agora faça o download do sinal de voz com ruı́do nspeech2.mat e carregue-o no Matlab.
Aplique os dois filtros (com N diferentes) a esse sinal. Como eles são filtros FIR, você
pode simplesmente convoluı́-los com o sinal de áudio. Escute cuidadosamente os sinais (com
filtragem e sem filtragem). Você percebe diferenças? Para escutar melhor os sinais você pode
multiplicar cada um deles por 2 ou 3 antes de escutá-los com o comando sound. Explique
como o comprimento dos filtros afeta o ripple na banda de rejeição.

Você também pode gostar