Mudanças entre as edições de "PSD29007-Engtelecom(2020-2) - Prof. Marcos Moecke"
(→ATUAL) |
|||
Linha 862: | Linha 862: | ||
:*Ver pag. 208 a 218 de <ref name="SHENOI2006"/> | :*Ver pag. 208 a 218 de <ref name="SHENOI2006"/> | ||
− | |||
;Aula 15 e 16 (4 e 9 fev): | ;Aula 15 e 16 (4 e 9 fev): | ||
Linha 1 001: | Linha 1 000: | ||
pretty(vpa(H(z),3)) | pretty(vpa(H(z),3)) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | {{collapse bottom}} | ||
+ | |||
+ | ===Unidade 3 - Filtros FIR=== | ||
+ | |||
+ | {{collapse_top | expand=true | Unidade 3 - Filtros FIR}} | ||
+ | |||
+ | ====ATUAL==== | ||
+ | ;Aula 17 (18 fev): | ||
+ | *Filtros digitais: Filtros FIR | ||
+ | *A função de transferência de transferência de um filtro digital FIR | ||
+ | :<math>\begin{align} | ||
+ | H(z) &= b_0 + b_1 z + b_2 z^2 + ... + b_N z^N \\ | ||
+ | &= \sum_{i=0}^{N} b_i \cdot z^i | ||
+ | \end{align}</math> | ||
+ | :<math>\begin{align} | ||
+ | H(z^{-1}) &= b_0 + b_1 z^{-1} + b_2 z^{-2} + ... + b_N z^{-N} \\ | ||
+ | &= \sum_{i=0}^{N} b_i \cdot z^{-i} | ||
+ | \end{align}</math> | ||
+ | |||
+ | |||
+ | |||
+ | *O filtro FIR causal de ordem n mostrado acima pode ser descrito também através da equação de diferenças: | ||
+ | :<math>\begin{align} | ||
+ | y[n] &= b_0 x[n] + b_1 x[n-1] + \cdots + b_N x[n-N] \\ | ||
+ | &= \sum_{i=0}^{N} b_i\cdot x[n-i], | ||
+ | \end{align}</math> | ||
+ | |||
+ | *Pode-se notar que a saída <math> y[n] </math> do filtro FIR é uma soma ponderada dos N valores mais recentes das entradas <math> x[n] </math> | ||
+ | |||
+ | *A realização desse filtro pode ser feita através de algoritmos de software ou circuitos digitais usando por exemplo a estrutura: | ||
+ | |||
+ | <center>[[Arquivo:FIR_Filter.svg| 600px]] </center> | ||
+ | |||
+ | A determinação da resposta ao impulso <math> h[n] </math> do filtro pode ser feita substituindo a entrada <math> x[n] </math> por <math>\delta[n] </math>. O resultado é <math> h[n] = b[n] </math>, e portanto a resposta ao impulso tem duração igual ao número de coeficientes N+1 (onde N é a ordem do filtro). Esse é o motivo pelo qual o filtro tem o nome de filtro de resposta ao impulso finita (FIR - Finite Impulse Response). O filtro também recebe nomes como filtro transversal, Filtro não recursivo, filtro de média móvel, e tapped delay filter (torneira com atrasos?). | ||
+ | |||
+ | A função de transferência também pode ser descrita como: | ||
+ | :<math>\begin{align} | ||
+ | H(z^{-1}) &= h_0 + h_1 z^{-1} + h_2 z^{-2} + ... + h_N z^{-N} | ||
+ | \end{align}</math> | ||
+ | |||
+ | Algumas vantagens que os filtros FIR tem sobre os IIR: | ||
+ | 1. É possível projetar FIR com '''fase linear''', ou seja '''atraso de grupo constante'''. Esses filtros são desejáveis na transmissão de sinais digitais. | ||
+ | ::O atraso de grupo é definido como as <math> \tau =-\frac{d\theta}{dw} </math>, onde <math> \theta </math> é a resposta de fase do filtro. | ||
+ | |||
+ | 2. As amostras da resposta ao impulso <math> h[n] </math> são os coeficientes do filtros <math> b[n] </math>, e portanto não precisam ser calculadas. | ||
+ | |||
+ | 3. Os FIR '''são sempre estáveis''' pois tem todos os polos na origem. Também é consequência de não ter realimentação. Por isso também não tem ciclo limite que surge nos filtros IIR como resultado da resposta ao impulso de duração infinita associada a representação dos coeficientes e dos sinais com palavras de comprimento finito de bits. | ||
+ | |||
+ | 4. O efeito da '''representação dos coeficientes''' e dos sinais com palavras de comprimento finito de bits, na resposta de frequência e resposta no domínio do tempo é menor que nos IIR. | ||
+ | |||
+ | |||
+ | Os filtro FIR podem ter fase linear ou não ter fase linear. | ||
+ | :*Filtros de fase linear: simétricos e antissimétricos (Tipo 1, 2, 3 e 4) | ||
+ | :*Filtros de fase não linear: são todos que não se enquadram em um dos 4 tipos acima. | ||
+ | |||
+ | Os filtros de fase linear possuem algumas propriedades (respostas em frequência possíveis, distribuição dos zeros em simetria quadrantal), conforme é mostrado a seguir. | ||
+ | |||
+ | * Inicialmente observe em exemplos as propriedades dos FIR tipo 1, 2, 3 e 4. Observe a resposta de frequência, fase, atraso de grupo, coeficientes e a simetria dos zeros em relação ao circulo unitário no diagrama de polos e zeros dos filtros abaixo. | ||
+ | |||
+ | <syntaxhighlight lang=matlab> | ||
+ | N = 10; | ||
+ | bi = 2*(rand(1,N)-0.5) | ||
+ | %% Tipo I - LP, HP, BS, BP | ||
+ | b = [bi (2*rand(1,1)-0.5) flip(bi)]; | ||
+ | fvtool(b,1); | ||
+ | %% Tipo II - LP, BP | ||
+ | % tem um zero em -1 | ||
+ | b = [bi flip(bi)]; | ||
+ | fvtool(b,1); | ||
+ | |||
+ | %% Tipo III - BP | ||
+ | % tem um zero em 1 e -1 | ||
+ | b = [bi 0 -flip(bi)]; | ||
+ | fvtool(b,1); | ||
+ | |||
+ | %% Tipo IV - BP, HP | ||
+ | % tem um zero em 1 | ||
+ | b = [bi -flip(bi)]; | ||
+ | fvtool(b,1); | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | <center> | ||
+ | [[Arquivo:FIR_tipo1.png | 800px]] | ||
+ | <br> | ||
+ | Figura 1 - Propriedades do filtro FIR de fase linear (Tipo 1) | ||
+ | </center> | ||
+ | *Ver também [https://www.mathworks.com/help/signal/ref/fvtool.html fvtool], [https://www.mathworks.com/help/signal/ug/Controlling-FVTool-from-the-command-line.html Controlling FVTool from the MATLAB Command Line] e [https://www.mathworks.com/help/signal/examples/filter-analysis-using-fvtool.html Filter Analysis using FVTool]. | ||
+ | |||
+ | <!-- | ||
+ | ;Aula 21 (28 mai): Filtros digitais: Filtros FIR | ||
+ | |||
+ | ====FIR tipo I==== | ||
+ | Considere o exemplo de um filtro simétrico de ordem par (N=6) | ||
+ | |||
+ | :<math>\begin{align} | ||
+ | H (z^{-1}) &= h_0 + h_1z^{-1} + h_2z^{-2} + h_3z^{-3} + h_4z^{-4}+ h_5z^{-5} + h_6z^{-6} | ||
+ | \end{align}</math> | ||
+ | |||
+ | Se ele apresenta simetria dos coeficientes <math>h_0 = h_6</math>, <math>h_1 = h_5</math> e <math>h_2 = h_4</math>, temos que: | ||
+ | |||
+ | :<math>\begin{align} | ||
+ | H (z^{-1}) &= h_0 + h_1z^{-1} + h_2z^{-2} + h_3z^{-3} + h_2z^{-4}+ h_1z^{-5} + h_0z^{-6} \\ | ||
+ | &= h_0(1+z^{-6}) + h_1(z^{-1}+z^{-5}) + h_2(z^{-2} + z^{-4}) + h_3z^{-3} \\ | ||
+ | &= (h_0(z^{+3}+z^{-3}) + h_1(z^{+2}+z^{-2}) + h_2(z^{+1} + z^{-1}) + h_3)z^{-3} | ||
+ | \end{align}</math> | ||
+ | |||
+ | Para obter a resposta em frequência <math> H (e^{-jw}) </math>, substituímos <math> z = e^{jw} </math>. | ||
+ | |||
+ | :<math>\begin{align} | ||
+ | H (e^{-jw}) &= (h_0(e^{+3jw}+e^{-3jw}) + h_1(e^{+2jw}+e^{-2jw}) + h_2(e^{+1jw} + e^{-1jw}) + h_3)e^{-3jw} | ||
+ | \end{align}</math> | ||
+ | |||
+ | Aplicando a identidade <math> 2 cos(nw) = e^{+jnw}+e^{-jnw} </math>, obtemos que: | ||
+ | |||
+ | :<math>\begin{align} | ||
+ | H (e^{-jw}) &= (h_0 2 cos(3w) + h_1 2 cos(2w) + h_2 2 cos(1w) + h_3)e^{-3jw}\\ | ||
+ | &= H_R(w) e^{j \theta (w)} | ||
+ | \end{align}</math> | ||
+ | |||
+ | Portanto a resposta em frequência tem um resposta de magnitude com uma parte real <math> H_R(w)</math>, e uma fase linear igual a <math> \theta (w) = -3w </math>, e portanto o atraso de grupo é <math> \tau = -\frac{d \theta}{d w} = 3 </math>, que é a metade da ordem N do filtro. | ||
+ | Pode-se generalizar este resultado para qualquer filtro simétrico de ordem par: | ||
+ | |||
+ | :<math>\begin{align} | ||
+ | H (e^{-jw}) &= \left [ 2 \sum_{n=1}^{N/2} h \left ( \frac{N}{2}-n \right ) cos(nw)+ h\left ( \frac{N}{2} \right ) \right ]e^{-j(N/2)w} | ||
+ | \end{align}</math> | ||
+ | Na qual se percebe que a fase linear é igual a <math> \theta (w) = -\frac{N}{2} w </math>, e portanto o atraso de grupo é <math> \tau = -\frac{d \theta}{d w} = \frac{N}{2} </math>, '''metade da ordem N do filtro'''. | ||
+ | |||
+ | ====FIR tipo II==== | ||
+ | Considere o exemplo de um filtro simétrico de ordem impar (N=5) | ||
+ | :<math>\begin{align} | ||
+ | H (z^{-1}) &= h_0 + h_1z^{-1} + h_2z^{-2} + h_3z^{-3} + h_4z^{-4}+ h_5z^{-5} | ||
+ | \end{align}</math> | ||
+ | |||
+ | Se ele apresenta simetria dos coeficientes <math>h_0 = h_5</math>, <math>h_1 = h_4</math> e <math>h_2 = h_3</math>, temos que: | ||
+ | |||
+ | :<math>\begin{align} | ||
+ | H (z^{-1}) &= h_0 + h_1z^{-1} + h_2z^{-2} + h_2z^{-3} + h_1z^{-4}+ h_0z^{-5} \\ | ||
+ | &= h_0(1+z^{-5}) + h_1(z^{-1}+z^{-4}) + h_2(z^{-2} + z^{-3}) \\ | ||
+ | &= (h_0(z^{+2.5}+z^{-2.5}) + h_1(z^{+1.5}+z^{-1.5}) + h_2(z^{+0.5} + z^{-0.5}))z^{-2.5} | ||
+ | \end{align}</math> | ||
+ | |||
+ | Para obter a resposta em frequência: | ||
+ | |||
+ | :<math>\begin{align} | ||
+ | H (e^{-jw}) &= (h_0(e^{+2.5jw}+e^{-2.5jw}) + h_1(e^{+1.5jw}+e^{-1.5jw}) + h_2(e^{+0.5jw} + e^{-0.5jw}))e^{-2.5jw} | ||
+ | \end{align}</math> | ||
+ | |||
+ | Aplicando a identidade <math> 2 cos(nw) = e^{+jnw}+e^{-jnw} </math>, obtemos que: | ||
+ | |||
+ | :<math>\begin{align} | ||
+ | H (e^{-jw}) &= (2 h_0 cos(2.5w) + 2 h_1 cos(1.5w) + 2 h_2 cos(0.5w))e^{-2.5jw}\\ | ||
+ | &= H_R(w) e^{j \theta (w)} | ||
+ | \end{align}</math> | ||
+ | |||
+ | Portanto a resposta em frequência tem um resposta de magnitude com uma parte real <math> H_R(w)</math>, e uma fase linear igual a <math> \theta (w) = -2.5w </math>, e portanto o atraso de grupo é <math> \tau = -\frac{d \theta}{d w} = 2.5 </math>, que é a metade da ordem N do filtro. | ||
+ | Pode-se generalizar este resultado para qualquer filtro simétrico de ordem impar: | ||
+ | |||
+ | :<math>\begin{align} | ||
+ | H (e^{-jw}) &= \left [ 2 \sum_{n=1}^{(N+1)/2} h \left ( \frac{N+1}{2}-n \right ) cos \left ( \left ( n- \frac{1}{2} \right ) w \right ) \right ]e^{-j(N/2)w} | ||
+ | \end{align}</math> | ||
+ | |||
+ | Na qual se percebe que a fase linear é igual a <math> \theta (w) = -\frac{N}{2} w </math>, e portanto o atraso de grupo é <math> \tau = -\frac{d \theta}{d w} = \frac{N}{2} </math>, '''metade da ordem N do filtro'''. | ||
+ | |||
+ | ====FIR tipo III==== | ||
+ | Considere o exemplo de um filtro antissimétrico de ordem par (N=6) | ||
+ | |||
+ | :<math>\begin{align} | ||
+ | H (z^{-1}) &= h_0 + h_1z^{-1} + h_2z^{-2} + h_3z^{-3} + h_4z^{-4}+ h_5z^{-5} + h_6z^{-6} | ||
+ | \end{align}</math> | ||
+ | |||
+ | Se ele apresenta simetria dos coeficientes <math>h_0 = -h_6</math>, <math>h_1 = -h_5</math>, <math>h_2 = -h_4</math> e <math>h_3 = 0</math>, temos que: | ||
+ | |||
+ | :<math>\begin{align} | ||
+ | H (z^{-1}) &= h_0 + h_1z^{-1} + h_2z^{-2} - h_2z^{-4} - h_1z^{-5} - h_0z^{-6} \\ | ||
+ | &= h_0(1-z^{-6}) + h_1(z^{-1}-z^{-5}) + h_2(z^{-2}-z^{-4}) \\ | ||
+ | &= (h_0(z^{+3}-z^{-3}) + h_1(z^{+2}-z^{-2}) + h_2(z^{+1}-z^{-1}))z^{-3} | ||
+ | \end{align}</math> | ||
+ | |||
+ | Para obter a resposta em frequência <math> H (e^{-jw}) </math>, substituímos <math> z = e^{jw} </math>. | ||
+ | |||
+ | :<math>\begin{align} | ||
+ | H (e^{-jw}) &= (h_0(e^{+3jw}-e^{-3jw}) + h_1(e^{+2jw}-e^{-2jw}) + h_2(e^{+1jw}-e^{-1jw}))e^{-3jw} | ||
+ | \end{align}</math> | ||
+ | |||
+ | Aplicando a identidade <math> 2j sin(nw) = e^{+jnw}-e^{-jnw} </math>, e que <math> j = e^{j\pi/2} </math> obtemos que: | ||
+ | |||
+ | :<math>\begin{align} | ||
+ | H (e^{-jw}) &= 2j (h_0 sin(3w) + h_1 sin(2w) + h_2 sin(1w))e^{-3jw}\\ | ||
+ | &= 2 (h_0 sin(3w) + h_1 sin(2w) + h_2 sin(1w))e^{-j3w} e^{j\pi/2}\\ | ||
+ | &= 2 (h_0 sin(3w) + h_1 sin(2w) + h_2 sin(1w))e^{-j(3w - \pi/2)} \\ | ||
+ | &= H_R(w) e^{j (\theta (w))} | ||
+ | \end{align}</math> | ||
+ | |||
+ | Portanto a resposta em frequência tem um resposta de magnitude com uma parte real <math> H_R(w)</math>, e uma fase linear igual a <math> \theta (w) = -(3w - \pi/2) </math>, e portanto o atraso de grupo é <math> \tau = -\frac{d \theta}{d w} = 3 </math>, que é a metade da ordem N do filtro. | ||
+ | Pode-se generalizar este resultado para qualquer filtro antissimétrico de ordem par: | ||
+ | |||
+ | :<math>\begin{align} | ||
+ | H (e^{-jw}) = \left [ 2 \sum_{n=1}^{N/2} h \left ( \frac{N}{2}-n \right ) sin(nw) \right ]e^{-j(Nw - \pi)/2} | ||
+ | \end{align}</math> | ||
+ | |||
+ | Na qual se percebe que a fase linear é igual a <math> \theta (w) = -\frac{N}{2} w + \pi /2 </math>, e portanto o atraso de grupo é <math> \tau = -\frac{d \theta}{d w} = \frac{N}{2} </math>, '''metade da ordem N do filtro'''. | ||
+ | |||
+ | ====FIR tipo IV==== | ||
+ | Considere o exemplo de um filtro antissimétrico de ordem impar (N=5) | ||
+ | :<math>\begin{align} | ||
+ | H (z^{-1}) &= h_0 + h_1z^{-1} + h_2z^{-2} + h_3z^{-3} + h_4z^{-4}+ h_5z^{-5} | ||
+ | \end{align}</math> | ||
+ | |||
+ | Se ele apresenta simetria dos coeficientes <math>h_0 = -h_5</math>, <math>h_1 = -h_4</math> e <math>h_2 = -h_3</math>, temos que: | ||
+ | |||
+ | :<math>\begin{align} | ||
+ | H (z^{-1}) &= h_0 + h_1z^{-1} + h_2z^{-2} - h_2z^{-3} - h_1z^{-4} - h_0z^{-5} \\ | ||
+ | &= h_0(1-z^{-5}) + h_1(z^{-1}-z^{-4}) + h_2(z^{-2}-z^{-3}) \\ | ||
+ | &= (h_0(z^{+2.5}-z^{-2.5}) + h_1(z^{+1.5}-z^{-1.5}) + h_2(z^{+0.5}-z^{-0.5}))z^{-2.5} | ||
+ | \end{align}</math> | ||
+ | |||
+ | Para obter a resposta em frequência: | ||
+ | |||
+ | :<math>\begin{align} | ||
+ | H (e^{-jw}) &= (h_0(e^{+2.5jw}-e^{-2.5jw}) + h_1(e^{+1.5jw}-e^{-1.5jw}) + h_2(e^{+0.5jw}-e^{-0.5jw}))e^{-2.5jw} | ||
+ | \end{align}</math> | ||
+ | |||
+ | E portanto | ||
+ | |||
+ | :<math>\begin{align} | ||
+ | H (e^{-jw}) &= 2 j (h_0 sin(2.5w) + h_1 sin(1.5w) + h_2 sin(0.5w))e^{-2.5jw}\\ | ||
+ | &= 2 (h_0 sin(2.5w) + h_1 sin(1.5w) + h_2 sin(0.5w))e^{-2.5jw} e^{j\pi / 2}\\ | ||
+ | &= 2 (h_0 sin(2.5w) + h_1 sin(1.5w) + h_2 sin(0.5w))e^{-j(2.5w - \pi / 2)}\\ | ||
+ | &= H_R(w) e^{j \theta (w) } | ||
+ | \end{align}</math> | ||
+ | |||
+ | Portanto a resposta em frequência tem um resposta de magnitude com uma parte real <math> H_R(w)</math>, e uma fase linear igual a <math> \theta (w) = -(2.5w - \pi / 2) </math>, e portanto o atraso de grupo é <math> \tau = -\frac{d \theta}{d w} = 2.5 </math>, que é a metade da ordem N do filtro. | ||
+ | Pode-se generalizar este resultado para qualquer filtro antissimétrico de ordem impar: | ||
+ | |||
+ | :<math>\begin{align} | ||
+ | H (e^{-jw}) &= \left [ 2 \sum_{n=1}^{(N+1)/2} h \left ( \frac{N+1}{2}-n \right ) sin \left ( \left ( n- \frac{1}{2} \right ) w \right ) \right ]e^{-j(Nw- \pi)/2)} | ||
+ | \end{align}</math> | ||
+ | |||
+ | Na qual se percebe que a fase linear é igual a <math> \theta (w) = -(Nw- \pi)/2 </math>, e portanto o atraso de grupo é <math> \tau = -\frac{d \theta}{d w} = \frac{N}{2} </math>, '''metade da ordem N do filtro'''. | ||
+ | |||
+ | ====Propriedades dos filtros FIR de fase linear==== | ||
+ | Como mostrado acima, os filtros que exibem simetria ou antissimetria em seus coeficientes (ou resposta ao impulso), apresentam fase linear (ou atraso de grupo constante). Também foi mostrado que o atraso de grupo é igual a N/2 onde N é a ordem do filtro. Foi demonstrado por Rabiner *** que apenas esses quatro tipos de filtro FIR possuem essa característica, portanto pode-se afirma que "Se e somente se o filtro FIR possui coeficientes simétrico ou antisimétricos ele possui fase linear". | ||
+ | |||
+ | Em relação a posição dos zeros, é possível verificar que cada zero sobre o circulo unitário produz uma resposta de magnitude nula na frequencia angular correspondente e um salto de fase de <math> \pi </math>. | ||
+ | |||
+ | <syntaxhighlight lang=matlab> | ||
+ | N = 5; | ||
+ | bi = 2*(rand(1,N)-0.5) | ||
+ | b = [bi (2*rand(1,1)-0.5) flip(bi)]; | ||
+ | [h,w] = freqz(b,1,'whole'); | ||
+ | figure(1); | ||
+ | subplot(421); | ||
+ | plot(w/pi,20*log10(abs(h))); grid on; | ||
+ | xlabel('\omega / \pi'); ylabel ('magnitude - dB'); | ||
+ | subplot(423); | ||
+ | plot(w/pi,angle(h)/pi); grid on; | ||
+ | xlabel('\omega / \pi'); ylabel ('fase - rad / \pi'); | ||
+ | subplot(425); | ||
+ | plot(w/pi,unwrap(angle(h))/pi); grid on; | ||
+ | xlabel('\omega / \pi'); ylabel ('fase - rad / \pi'); | ||
+ | subplot(427); grpdelay(b,1); | ||
+ | xlabel('\omega / \pi'); ylabel ('atraso de grupo - amostras'); | ||
+ | subplot(4,2,[2,4,6,8]); zplane(b,1); | ||
+ | xlabel('real'); ylabel ('imaginario'); | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ;Aula 22 (1 jun): | ||
+ | |||
+ | Também devido a existência (ou não) de zeros em <math> z = 1 \equiv w = 0 </math> e <math> z = -1 \equiv w / \pi = 1 </math>, que corresponde a frequência de Nyquist <math> f_N = f_a/2 </math>, mostramos que a resposta de magnitude nessas frequencias é nula (ou não). Assim os tipos 1, 2, 3 e 4 de filtros FIR resultam em: | ||
+ | *Tipo 1: permite projetar filtros LP, HP, BP e BS. | ||
+ | *Tipo 2: (tem um zero em -1) permite projetar filtros LP e BP. | ||
+ | *Tipo 3: (tem um zero em 1 e -1) permite projetar filtros BP. | ||
+ | *Tipo 4: (tem um zero em 1) permite projetar filtros HP e BP. | ||
+ | |||
+ | Essa característica é importante conhecer antecipadamente pois implicará no número de coeficientes e na escolha do tipo de (anti)simetria. Por exemplo para filtro BS apenas o Tipo 1 pode ser usado. | ||
+ | |||
+ | Outra propriedade a ser destacada é em relação aos zeros do filtro. Em primeiro vamos analisar a consequencia da simetria nos coeficientes <math> h(n) = h(N-n) </math>: | ||
+ | :<math>\begin{align} | ||
+ | H(z) &= \sum_{n=0}^{N} h(n) \cdot z^{-n} \\ | ||
+ | &= \sum_{n=0}^{N} h(N-n) \cdot z^{-n} | ||
+ | \end{align}</math> | ||
+ | fazendo na segunda equação N-n = m, temos que os limites n = 0 -> m = N, e n = N -> m = 0. | ||
+ | |||
+ | :<math>\begin{align} | ||
+ | H(z) &= \sum_{m=0}^{N} h(m) \cdot z^{-N+m} \\ | ||
+ | &= z^{-N} \sum_{m=0}^{N} h(m) \cdot z^m | ||
+ | \end{align}</math> | ||
+ | :<math>\begin{align} | ||
+ | H(z) = z^{-N} H(z^{-1}) | ||
+ | \end{align}</math> | ||
+ | |||
+ | Com a mesma análise para antissimetria nos coeficientes <math> h(n) = -h(N-n) </math>: | ||
+ | :<math>\begin{align} | ||
+ | H(z) = -z^{-N} H(z^{-1}) | ||
+ | \end{align}</math> | ||
+ | |||
+ | Nessas duas equações é possível perceber que se <math> z = z_{-1} </math> é um zero então <math> 1/z </math> também será um zero de <math> H(z) </math>. No caso de zeros reais, se temos um zero <math> z = a </math> então <math> z = 1/a </math> também é um zero, exceto se <math> a = 1 </math> ou <math> a = -1 </math>. Por outro lado, se todos os coeficientes b(n) do filtro são reais, então os zeros complexos, aparecem em pares complexos conjugados <math> z_2 = r_2 \cdot e^{j\phi} </math> e <math> z_2^* = r_2 \cdot e^{-j\phi} </math>, e seus reciprocos <math> z_2 = 1/r_2 \cdot e^{j\phi} </math> e <math> z_2^* = 1/r_2 \cdot e^{-j\phi} </math> também são zeros de <math> H(z) </math>. Esse tipo de disposição dos zeros denominamos de '''simetria quadrantal'''. | ||
+ | <center> | ||
+ | [[Arquivo:QuadrantalSymmetry.png | 600px]] <br> | ||
+ | Figura 2 - Simetria quadrantal de filtros FIR de fase linear | ||
+ | </center> | ||
+ | |||
+ | FONTE: | ||
+ | :*pag. 251 a 261 de <ref name="SHENOI2006"/> | ||
+ | --> | ||
+ | <!--*http://eeweb.poly.edu/iselesni/EL713/zoom/linphase.pdf--> | ||
+ | *[https://www.mathworks.com/help/signal/ref/firtype.html firtype] - Type of linear phase FIR filter - Mathwork | ||
+ | |||
+ | ====Projeto de filtros FIR pelo método da série de Fourier==== | ||
+ | Usando a representação dos filtros ideais LP, HP, BP, BS, com frequências de corte <math> w_{ci} </math> e ganho unitário na banda de passagem e ganho zero na banda de rejeição, e considerando que a magnitude das respostas em frequência é uma função periódica em <math> 2 \pi </math>, e conhecendo as equações de síntese e análise de um sinal (ou sistema) | ||
+ | :<math>\begin{align} | ||
+ | H(e^{jw}) &= \sum_{n= -\infty }^{\infty}c(n)e^{-jnw} | ||
+ | \end{align}</math> | ||
+ | onde | ||
+ | :<math>\begin{align} | ||
+ | c(n) &= \frac{1}{2\pi}\int_{-\pi}^{\pi}H(e^{jw})e^{jnw} \mathrm{d} w | ||
+ | \end{align}</math> | ||
+ | |||
+ | É possível coeficientes da série de Fourier de filtros ideais: LP, HP, BP, BS | ||
+ | <center> | ||
+ | [[Arquivo:MagnitudeResponseIdealFilter.png | 800px]] <br> | ||
+ | Figura 3 - Magnitude da resposta em frequência de filtros | ||
+ | </center> | ||
+ | |||
+ | ;Passa-baixas (''Low-pass''): | ||
+ | <center> | ||
+ | [[Arquivo:LPLinearPhaseFilter.png | 800px]] <br> | ||
+ | Figura 4 - Resposta em frequência de filtros LP de fase linear | ||
+ | </center> | ||
+ | |||
+ | :<math>\begin{align} | ||
+ | c_\text{LP}(n) &= \frac{1}{2\pi}\int_{-\pi}^{\pi}H_{LP}(e^{jw})e^{jnw} \mathrm{d} w \\ | ||
+ | &= \frac{1}{2\pi}\int_{-w_c}^{w_c}e^{jnw} \mathrm{d} w \\ | ||
+ | &= \frac{1}{2\pi} \left ( \frac{e^{jnw}}{jn} \right ) \Biggr|_{-w_c}^{w_c} \\ | ||
+ | &= \frac{e^{jnw_c}-e^{-jnw_c}}{2j\pi n} \\ | ||
+ | &= \frac{sin(nw_c)}{\pi n} | ||
+ | \end{align}</math> | ||
+ | :<math>\begin{align} | ||
+ | c_\text{LP}(n) &= \frac{w_c}{\pi}sinc(w_cn) | ||
+ | \end{align}</math> | ||
+ | |||
+ | :<math>\begin{align} | ||
+ | c_\text{LP}(n) &= \left \{ \begin{matrix} \frac{\omega_c}{\pi}; & \qquad n = 0 \\ \frac {\sin (\omega_c n)}{\pi n}; & \qquad \left | n \right | > 0 \end{matrix}\right. | ||
+ | \end{align}</math> | ||
+ | |||
+ | De modo semelhante é possível obter os coeficientes dos filtros HP, BP e BS. | ||
+ | ;Passa-altas (''High-pass''): | ||
+ | :<math>\begin{align} | ||
+ | c_\text{HP}(n) &= sinc(n)- \frac{w_c}{\pi}sinc(w_cn) | ||
+ | \end{align}</math> | ||
+ | |||
+ | :<math>\begin{align} | ||
+ | c_\text{HP}(n) &= \left \{ \begin{matrix} 1-\frac{\omega_c}{\pi}; \qquad n = 0 \\ -\frac {\sin (\omega_c n)}{\pi n}; \qquad \left | n \right | > 0 \end{matrix}\right. | ||
+ | \end{align}</math> | ||
+ | |||
+ | ;Passa-faixa (''Band-pass''): | ||
+ | :<math>\begin{align} | ||
+ | c_\text{BP}(n) &= \frac{1}{\pi}(w_{c2} sinc(w_{c2} n) - w_{c1} sinc(w_{c1} n)) | ||
+ | \end{align}</math> | ||
+ | |||
+ | :<math>\begin{align} | ||
+ | c_\text{BP}(n) = \left \{ \begin{matrix} \frac{\omega_{c2}-\omega_{c1}}{\pi}; \qquad n = 0 \\ \frac {\sin (\omega_{c2} n)- \sin (\omega_{c1} n)}{\pi n}; \qquad \left | n \right | > 0 \end{matrix}\right. | ||
+ | \end{align}</math> | ||
+ | |||
+ | ;Rejeita-banda (''Band-stop''): | ||
+ | :<math>\begin{align} | ||
+ | c_\text{BS}(n) &= sinc(n)- \frac{1}{\pi}(w_{c2} sinc(w_{c2} n) - w_{c1} sinc(w_{c1} n)) | ||
+ | \end{align}</math> | ||
+ | |||
+ | :<math>\begin{align} | ||
+ | c_\text{BS}(n) = \left \{ \begin{matrix} 1-\frac{\omega_{c2}-\omega_{c1}}{\pi}; \qquad n = 0 \\ -\frac {\sin (\omega_{c2} n)- \sin (\omega_{c1} n)}{\pi n}; \qquad \left | n \right | > 0 \end{matrix}\right. | ||
+ | \end{align}</math> | ||
+ | |||
+ | onde sabe-se que <math> sinc(n) = \delta(n) </math>, ou seja <math> sinc(n) = 1 </math> para <math> n = 0 </math> e <math> sinc(n) = 0 </math> para <math> n \neq 0 </math>. | ||
+ | |||
+ | :*Ver pag. 249 a 256 de <ref name="SHENOI2006"/> | ||
+ | |||
+ | |||
+ | ;Aula 23 (4 jun) | ||
+ | |||
+ | :*O uso da janela retangular no "janelamento" dos coeficientes da série de Fourier, resulta no fenômeno de Gibbs na magnitude da resposta em frequência, conforme mostrado a seguir. | ||
+ | |||
+ | :<math>\begin{align} | ||
+ | w(n) & = 1; \qquad -M \le n \le M \\ | ||
+ | & = 0; \qquad \left | n \right | \ge M | ||
+ | \end{align}</math> | ||
+ | |||
+ | Aplicando a equação de síntese da série obtemos: | ||
+ | :<math>\begin{align} | ||
+ | \Psi(e^{jw}) &= \sum_{n= -M }^{M}e^{-jnw} \\ | ||
+ | &= \frac{e^{-jMw}(e^{j(2M+1)w}-1)}{e^{jw}-1} \\ | ||
+ | &= \frac{e^{-jMw}(e^{j(2M+1)w/2}-e^{-j(2M+1)w/2})e^{j(2M+1)w/2}}{(e^{jw/2}-e^{-jw/2})e^{jw/2}} \\ | ||
+ | &= \frac{sin[(2M+1)w/2]}{sin(w/2)} | ||
+ | \end{align}</math> | ||
+ | |||
+ | Note que esta função <math> \Psi(e^{jw}) = \frac{sin[(2M+1)w/2]}{sin(w/2)} </math> tem um máximo <math> (2M+1) </math> em <math> w = 0 </math>, e cruza o zero em <math> (2M+1)w/2] = \pm \pi </math>, portanto a lagura do lóbulo central é de <math> 4\pi/(2M+1) </math>. Além disso percebe-se que se aumentamos o tamanho da janela retangular (2M+1), a largura do lóbulo central é reduzida proporcionalmente. | ||
+ | |||
+ | <center> | ||
+ | [[Arquivo:FuntionPsi.png | 800px]] <br> | ||
+ | Figura 5 - função <math> \Psi(e^{jw}) </math> | ||
+ | </center> | ||
+ | |||
+ | Ao fazer o "janelamento" dos coeficientes da série de Fourier da resposta em frequência do filtro ideal, estamos multiplicando a série de coeficientes pelo janela retangular <math> h(n) = w(n) \times C_{LP} </math>, conforme mostra a figura a seguir. | ||
+ | |||
+ | <center> | ||
+ | [[Arquivo:JanelaTemporalCLP.png | 800px]] <br> | ||
+ | Figura 6 - Janelamento temporal (rectwin) dos coeficientes | ||
+ | </center> | ||
+ | |||
+ | Essa multiplicação no domínio do tempo corresponde a uma convolução no domínio da frequência. | ||
+ | :<math>\begin{align} | ||
+ | H_M(e^{j\omega}) &= \frac{1}{2\pi}\int_{-\pi}^{\pi}H_{LP}(e^{j\theta})\Psi(e^{j(\omega-\theta})\mathrm{d}\theta \\ | ||
+ | &= \frac{1}{2\pi}\int_{-\pi}^{\pi}H_{LP}(\theta)\Psi(\omega-\theta)\mathrm{d}\theta | ||
+ | \end{align}</math> | ||
+ | A qual é mostrada graficamente na figura a seguir. | ||
+ | |||
+ | <center> | ||
+ | [[Arquivo:ConvoluçãoJanelaTemporalCLP.png | 800px]] <br> | ||
+ | Figura 7 - Convolução da resposta do filtro ideal H_{LP} com a função <math> \Psi(e^{jw}) </math> | ||
+ | </center> | ||
+ | |||
+ | <center> | ||
+ | [[Arquivo:HwJanelaTemporalCLP.png | 800px]] <br> | ||
+ | Figura 8 - Aproximação da resposta de magnitude com janela retangular | ||
+ | </center> | ||
+ | |||
+ | <math> </math> | ||
+ | |||
+ | :*Para reduzir o ripple devido ao corte dos coeficientes, são usadas as funções de janelamento temporal no projeto de filtros digitais. | ||
+ | |||
+ | :*Tipos de janelas temporais usadas no projeto de filtros digitais. | ||
+ | ::*Retangular | ||
+ | ::<math>w(n)=1; \qquad -M \le n \le M </math> | ||
+ | |||
+ | ::*Bartlett | ||
+ | ::<math>w(n)= 1 - \frac{\left | n \right |}{M+1}; \qquad -M \le n \le M </math> | ||
+ | |||
+ | ::*Hanning | ||
+ | ::<math>w(n) = 0.5 + 0.5 \cos \left( \frac{2\pi n}{2M+1} \right), -M \le n \le M</math> | ||
+ | |||
+ | ::*Hamming | ||
+ | ::<math>w(n) = 0.54 + 0.46 \cos\left(\frac{2\pi n}{2M+1}\right); \qquad -M \le n \le M</math> | ||
+ | |||
+ | ::*Blackman | ||
+ | ::<math>w(n) = 0.42 + 0.5 \cos\left(\frac{2\pi n}{2M+1}\right) + 0.08\cos\left(\frac{4\pi n}{2M+1}\right); \qquad -M \le n \le M</math> | ||
+ | |||
+ | |||
+ | ;Aula 24 (8 jun) | ||
+ | * em todas as janelas <math>w\left ( n \right ) = 0 </math> quando <math> \left | n \right | \ge M</math> | ||
+ | ::onde <math>M </math> é <math>N/2</math> para <math>N</math> par e <math>(N+1)/2</math> para <math>N</math> impar | ||
+ | *Uso de janelas fixas no Matlab : [http://www.mathworks.com/help/signal/ref/rectwin.html rect], [http://www.mathworks.com/help/signal/ref/triang.html triang], [http://www.mathworks.com/help/signal/ref/bartlett.html bartlett], [http://www.mathworks.com/help/signal/ref/hann.html hann], [http://www.mathworks.com/help/signal/ref/hamming.html hamming], [http://www.mathworks.com/help/signal/ref/blackman.html blackman], [http://www.mathworks.com/help/signal/ref/blackmanharris.html blackmanharris], [http://www.mathworks.com/help/signal/ref/nuttallwin.html nuttall]. | ||
+ | ::ver também [http://mathworld.wolfram.com/ApodizationFunction.html apodization function] | ||
+ | <syntaxhighlight lang=matlab> | ||
+ | L = 64; | ||
+ | wvtool(rectwin(L), triang(L), bartlett(L), hann(L), hamming(L), blackman(L), blackmanharris(L), nuttallwin(L)); | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Use o código abaixo e verifique o efeito das diferentes janelas temporais sobre a magnitude da resposta em frequência, sobre a resposta ao impulso, posição dos zeros no plano z, etc. | ||
+ | : No código o wc é a frequência de corte do filtro LP, N é a ordem do filtro, CLP é são os coeficientes da série de Fourier do filtro LP ideal multiplicados pela janela retangular, bRET, bHAM e bBLACK são os coeficientes dos filtros usando respectivamente as janelas retangular, Hamming e Blackman. | ||
+ | :Note que: | ||
+ | :1) O número de coeficientes sempre será igual a (N+1)=(2M+1). | ||
+ | :2) A função ylim([-0.1 0.1]) foi usada para destacar o ripple na banda passante. | ||
+ | :3) O ''ripple'' na banda de rejeição é sempre proporcional ao ''ripple'' na banda passante (visualizar com a escala linear de magnitude). | ||
+ | :4) A banda de transição aumenta a medida que o ''ripple'' diminui. | ||
+ | :5) O aumento da ordem do filtro reduz a banda de transição, mas "quase" não afeta a amplitude do ''ripple''. | ||
+ | |||
+ | <syntaxhighlight lang=matlab> | ||
+ | N = 32; | ||
+ | wc = 0.5; M = N/2; | ||
+ | CLP = wc*sinc(wc*(-M:M)); | ||
+ | bRET = CLP; | ||
+ | bHAM = CLP.*hamming(2*M+1)'; | ||
+ | bBLACK = CLP.*blackman(2*M+1)'; | ||
+ | fvtool(bRET,1,bHAM,1,bBLACK,1); | ||
+ | legend('rectwin', 'Hamming', 'Blackman'); | ||
+ | ylim([-0.1 0.1]) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | :*Estudar no Matlab as funções [http://www.mathworks.com/help/signal/ref/wvtool.html wvtool], [http://www.mathworks.com/help/signal/ref/window.html window] | ||
+ | :*Ver [https://www.mathworks.com/help/signal/ref/windowdesigner-app.html Window Designer], Design and analyze spectral windows. | ||
+ | :*Ver [https://www.mathworks.com/help/signal/ug/fir-filter-design.html FIR Filter Design] | ||
+ | :*Ver pag. 263 a 268 de <ref name="SHENOI2006"/> | ||
+ | |||
+ | |||
+ | *Projeto de filtro FIR utilizando janelas temporais fixas. | ||
+ | |||
+ | * Exemplos de projeto | ||
+ | :* Projetar um filtro LP usando uma janela temporal fixa (verificar a janela que atende a especificação) | ||
+ | wp = 0.2*pi; Ap = 1 dB; Gp = 0 dB | ||
+ | ws = 0.4*pi; As = 40 dB; | ||
+ | ::* Para o projeto do filtro, o primeiro passo é escolher uma janela que atenda a atenuação na banda de passagem e na banda de rejeição. Em seguida é necessário determinar a ordem do filtro que atende a especificação de largura de banda de transição. Por último será necessário ajustar o valor de wc para que o filtro esteja dentro das especificações. | ||
+ | ::* Ao final do projeto, deverá ser informado o tipo de janela escolhida, a ordem do filtro, se é do tipo 1, 2, 3 ou 4, e o valor de ''wc''. | ||
+ | |||
+ | |||
+ | ;Aula 25 e 26 (15 e 18 jun) | ||
+ | :* Projetar um filtro HP usando uma janela temporal fixa (hamming, bartlett-hanning, hanning). | ||
+ | ws = 0.4*pi; Ap = 0.2 dB; Gp = 0 dB | ||
+ | wp = 0.6*pi; As = 50 dB; | ||
+ | ::* Comparar os 3 tipos de janela, a ordem obtida, e o valor de ''wc'' em cada projeto. | ||
+ | |||
+ | :* Para o projeto dos filtros LP FIR de janela fixa, uma possível solução para reduzir o número de passos é: | ||
+ | ::* PASSO 1 - Escolher o tipo de janela de acordo com a atenuação do lóbulo lateral Asl e As. | ||
+ | ::* PASSO 2 - Estimar a ordem N1 do filtro considerando os parâmetros Dw = |ws -wp| | ||
+ | ::* PASSO 3 - Calcule os coeficientes ''clp'' do filtro LP considerando N1 e wc1 = |ws + wp|/2. Calcule os valores da janela ''win'' e obtenha a resposta ao impulso do filtro h = clp * win. | ||
+ | <!--''::* PASSO 4 - Ajuste o ganho do filtro para que a resposta na banda de passagem fique abaixo da especificação máxima.'' --> | ||
+ | ::* PASSO 4 - Verifique o valor medido de Dwm = wsm-wpm, e faça a correção da ordem do filtro em função do desvio constatado. N2 = N1*Dwm/Dw. | ||
+ | ::* PASSO 5 - Refaça os cálculos dos coeficientes Clp do filtro ideal, da janela e da resposta ao impulso para a nova ordem N2. | ||
+ | ::* Repita o PASSO 3 até 5, até obter um filtro com a menor ordem que atenda as especificações de Dw. | ||
+ | ::* PASSO 6 - Desloque a frequência de corte wc de modo a ter a banda de transições posicionada corretamente entre wp e ws. wc2 = wp + (wp-wAp). | ||
+ | |||
+ | <center> Tabela - Estimativa da atenuação do lóbulo lateral <math>A_{sl}</math> da janela, atenuação do primeiro lóbulo lateral do filtro <math>A_{s}</math>, e largura da banda de transição <math>\Delta \omega</math>, para um filtro LP FIR de janela fixa. | ||
+ | |||
+ | {| class="wikitable" border="1" cellpadding="3" cellspacing="0" style="text-align:center; font-size:100%" bgcolor="#efefef" | ||
+ | ! scope="col" width=25% align="center"| Janela | ||
+ | ! scope="col" width=10% align="center"| <math>A_{sl}</math> | ||
+ | ! scope="col" width=10% align="center"| <math>A_{s}</math> | ||
+ | ! scope="col" width=10% align="center"| <math>\Delta \omega</math> | ||
+ | {{tabFIRwindow | Retangular | 13.3| 20.33 | 0.92<math>\pi</math>/M }} | ||
+ | {{tabFIRwindow | Triangular | 26.6| 27.41 | }} | ||
+ | {{tabFIRwindow | Bartlett | 26.5| 27.48 | }} | ||
+ | {{tabFIRwindow | Hann | 31.5| 44.03 | 3.11<math>\pi</math>/M}} | ||
+ | {{tabFIRwindow | Bartlett-Hanning | 35.9| 40.77| }} | ||
+ | {{tabFIRwindow | Hamming | 42.5| 54.08 | 3.32<math>\pi</math>/M}} | ||
+ | {{tabFIRwindow | Bohman | 46.0| 51.84 | 7.01<math>\pi</math>/M}} | ||
+ | {{tabFIRwindow | Parzen | 53.1| 56.89 |}} | ||
+ | {{tabFIRwindow | Blackman | 58.1| 75.25 | 5.56<math>\pi</math>/M}} | ||
+ | {{tabFIRwindow | Flat Top | 88.0| 106.3| }} | ||
+ | {{tabFIRwindow | Blackman-Harris | 92.1| 108.8 |}} | ||
+ | {{tabFIRwindow | Nutfall | 93.8| 109.7|}} | ||
+ | |} | ||
+ | </center> | ||
+ | :*Dados acima obtidos para um filtro passa baixas de ordem N = 64 com <math>\omega_{c} = 0.5 \pi</math> | ||
+ | |||
+ | :*Ver artigos: | ||
+ | ::*[https://ieeexplore-ieee-org.ez130.periodicos.capes.gov.br/stamp/stamp.jsp?tp=&arnumber=21693 A new window and comparison to standard windows] Yeong Ho Ha ; Pearce, J.A. IEEE Transactions on Acoustics, Speech, and Signal Processing, Feb. 1989, Vol.37(2), pp.298-301. | ||
+ | ::*[https://ieeexplore.ieee.org.ez130.periodicos.capes.gov.br/stamp/stamp.jsp?arnumber=1163506 Some windows with very good sidelobe behavior] Nuttall, A. IEEE Transactions on Acoustics, Speech, and Signal Processing, February 1981, Vol.29(1), pp.84-91 | ||
+ | |||
+ | * Estudo Dirigido. Projetar os filtros LP, HP e BP de acordo com as especificações dadas na Atividade AE2, considerando uma frequência de amostragem fa > que 2 * fmax especificada. | ||
+ | |||
+ | <!-- | ||
+ | |||
+ | :* Projeto de filtro FIR. | ||
+ | ::*Projete os dois filtros projetados anteriormente como IIR, utilizando 3 janelas diferentes. Compare os filtros obtidos com os filtros IIR. | ||
+ | <syntaxhighlight lang=matlab> | ||
+ | N = <ordem> | ||
+ | h_fir = fir1(N,Wn,hamming(N+1)); | ||
+ | [Hw,w] =freqz(h_fir); | ||
+ | plot(w/pi,20*log10(abs(Hw))) | ||
+ | title(['hamming N = ' num2str(N)]) | ||
+ | %fvtool(h_fir,1) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | :*Ver pag. 256 a 265 de <ref name="SHENOI2006"/> | ||
+ | ;Aula 18 (03 out): | ||
+ | * Projetar os filtros LP, HP e BP de acordo com as especificações dadas. | ||
+ | --> | ||
+ | |||
+ | ;Aula 27 (22 jun): | ||
+ | *Filtros Digitais: Filtros FIR | ||
+ | *Projeto de filtro FIR utilizando janelas temporais ajustáveis | ||
+ | :*Uso de janelas ajustáveis no Matlab: [http://www.mathworks.com/help/signal/ref/kaiser.html kaiser], [http://www.mathworks.com/help/signal/ref/chebwin.html chebyshev], [http://www.mathworks.com/help/signal/ref/gausswin.html gauss], [http://www.mathworks.com/help/signal/ref/tukeywin.html tukey], [http://www.mathworks.com/help/signal/ref/taylorwin.html taylor]. | ||
+ | <syntaxhighlight lang=matlab> | ||
+ | L = 64; | ||
+ | r = 60; % Chebyshev e Tukey | ||
+ | alpha = 3; % Gauss | ||
+ | betha = 8; % Kaiser | ||
+ | nbar = 10; % Taylor | ||
+ | wvtool(kaiser(L,betha), chebwin(L,r), gausswin(L,alpha),tukeywin(L,r), taylorwin(L,nbar,-r)); | ||
+ | </syntaxhighlight> | ||
+ | Para a janela de Kaiser, a estimação do fator <math>\beta </math> e da ordem do filtro <math> N </math> são obtidos por: | ||
+ | |||
+ | <math>\beta = \left \{ \begin{matrix} 0.1102 (\alpha-8.7), & \alpha > 50, \\ 0.5842 (\alpha- 21)^{0.4} + 0.07886 (\alpha- 21) , & 50 \ge \alpha \ge 21, \\ 0, & \alpha < 21. \end{matrix}\right.</math> | ||
+ | |||
+ | <math> N = \frac {\alpha - 8} {2.285 \Delta \omega} + 1. </math> | ||
+ | |||
+ | onde <math> \alpha </math> é a atenuação do lóbulo lateral e <math> \Delta \omega </math> é a largura da banda de transição em rad/amostra. | ||
+ | |||
+ | A janela de Kaiser é definida por: | ||
+ | |||
+ | <math> w(n) = \frac{I_0 \left(\beta \sqrt{1-(\frac{n-\alpha}{\alpha})^2} \right)}{I_0(\beta)} </math> | ||
+ | |||
+ | onde :<math> I_0(x) = 1+ \sum_{k=1}^\infty {\left( \frac{(\frac{x}{2})^k}{k!}\right)}^2 </math> é a função de Bessel de ordem zero [http://mathworld.wolfram.com/ModifiedBesselFunctionoftheFirstKind.html] | ||
+ | |||
+ | Utilizando o Matlab é possível estimar esses valores utilizando a função kaiserord. Exemplo da obtenção de um filtro passa baixa com <math> f_{pass} = 1000 Hz </math>, <math> f_{stop} = 1500 Hz </math>, <math> f_{amostragem} = 8000 Hz </math> atenuação de 40 dB na "stopband" | ||
+ | |||
+ | <syntaxhighlight lang=matlab> | ||
+ | %% Calculo do filtro de kaiser, sem ajustes | ||
+ | % Especificaçao | ||
+ | fsamp = 8000; | ||
+ | fcuts = [1000 1500]; | ||
+ | Ap = 1; | ||
+ | As = 40; | ||
+ | ftype = 'low'; | ||
+ | |||
+ | fN = fsamp/2; | ||
+ | wp = fcuts(1)/fN; | ||
+ | ws = fcuts(2)/fN; | ||
+ | Dw = abs(ws-wp); | ||
+ | |||
+ | % Calculo da janela de Kaiser | ||
+ | beta = 0.5842*(As-21)^0.4+0.07886*(As-21); | ||
+ | n = ceil((As-8)/(2.285*Dw*pi)+1); | ||
+ | Wn = (wp+ws)/2; | ||
+ | wkaiser = kaiser(n+1,beta); | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Forma alternativa de projeto usando a função [https://www.mathworks.com/help/signal/ref/kaiserord.html kaiserord] | ||
+ | |||
+ | <syntaxhighlight lang=matlab> | ||
+ | fsamp = 8000; | ||
+ | fcuts = [1000 1500]; | ||
+ | Ap = 1; | ||
+ | As = 40; | ||
+ | mags = [1 0]; | ||
+ | devs = [1-10^(-Ap/20) 10^(-As/20)]; | ||
+ | [n,Wn,beta,ftype] = kaiserord(fcuts,mags,devs,fsamp); | ||
+ | wkaiser = kaiser(n+1,beta); | ||
+ | h_fir = fir1(n,Wn,ftype,wkaiser,'noscale'); | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | A partir das especificações do filtro é possível obter um projeto usando a função [https://www.mathworks.com/help/signal/ref/fir1.html fir1]. Essa função basicamente aplica o método da janela ao filtro ideal especificado pela(s) frequência(s) de corte <math> W_n </math>. | ||
+ | |||
+ | <syntaxhighlight lang=matlab> | ||
+ | h_fir = fir1(n,Wn,ftype,kaiser(n+1,beta),'noscale'); | ||
+ | [Hw,w] =freqz(h_fir); | ||
+ | plot(w*fsamp/2/pi,20*log10(abs(Hw))) | ||
+ | title(['Kaiser filter N = ' num2str(n)]) | ||
+ | %fvtool(h_fir,1) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Como resultado do projeto a partir das equações de Kaiser é obtido o filtro abaixo: | ||
+ | <center> Figura 9 - Filtro LP com janela de Kaiser, sem ajustes. | ||
+ | [[Arquivo:LPkaiser1.png | 1200px]] | ||
+ | </center> | ||
+ | |||
+ | No entanto realizando ajustes tanto do ganho no topo <math> G_{topo} </math>, na largura da banda de transição <math> \Delta \omega </math>, e na ordem do filtro <math> n </math>, é possível reduzir essa ordem obtendo o filtro abaixo: | ||
+ | <center> Figura 10 - Filtro LP com janela de Kaiser, com ajustes. | ||
+ | [[Arquivo:LPkaiser2.png | 1200px]] | ||
+ | </center> | ||
+ | :*Ver as funções [http://www.mathworks.com/help/signal/ref/fir1.html fir1], [http://www.mathworks.com/help/signal/ref/kaiserord.html kaiserord] do Matlab. | ||
+ | :*Ver pag. 266 a 273 de <ref name="SHENOI2006"/> | ||
+ | :* Uso das funções [http://www.mathworks.com/help/signal/ref/window.html window] e [http://www.mathworks.com/help/signal/ref/fir1.html fir1] do Matlab para projeto de filtro FIR | ||
+ | |||
+ | ;Aula 28 (25 jun): | ||
+ | :*Uso de janelas ajustáveis no Matlab: [http://www.mathworks.com/help/signal/ref/kaiser.html kaiser], [http://www.mathworks.com/help/signal/ref/chebwin.html chebyshev], [http://www.mathworks.com/help/signal/ref/gausswin.html gauss], [http://www.mathworks.com/help/signal/ref/tukeywin.html tukey], [http://www.mathworks.com/help/signal/ref/taylorwin.html taylor]. | ||
+ | |||
+ | <syntaxhighlight lang=matlab> | ||
+ | L = 64; | ||
+ | r = 60; % Chebyshev e Tukey | ||
+ | alpha = 3; % Gauss | ||
+ | betha = 8; % Kaiser | ||
+ | nbar = 10; % Taylor | ||
+ | wvtool(kaiser(L,betha), chebwin(L,r), gausswin(L,alpha),tukeywin(L,r), taylorwin(L,nbar,-r)); | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | <center> Figura 11 - Filtro LP com janela de Chebyshev, Taylor e Gaussiana. | ||
+ | [[Arquivo:LPChebywin.png | 400px]] [[Arquivo:LPTaylor.png | 400px]] [[Arquivo:LPGauss.png | 400px]] | ||
+ | </center> | ||
+ | |||
+ | |||
+ | ;Aula 29 (29 jun): | ||
+ | :*Filtro de Parks-McClellan. Funções [http://www.mathworks.com/help/signal/ref/firpm.html firpm] e [http://www.mathworks.com/help/signal/ref/firpmord.html firpmord], [https://ieeexplore-ieee-org.ez130.periodicos.capes.gov.br/stamp/stamp.jsp?tp=&arnumber=1083419 Chebyshev Approximation for Nonrecursive | ||
+ | Digital Filters with Linear Phase]. | ||
+ | :*[http://mathworld.wolfram.com/RemezAlgorithm.html Remez exchange algorithm] - o básico em Wolfram Alpha | ||
+ | :*[http://eeweb.poly.edu/iselesni/EL713/remez/remez.pdf Remez exchange algorithm] - o detalhe com implementação em Matlab. Como resolver as anomalias na banda de transição. | ||
+ | :*[http://www.ee.ic.ac.uk/hp/staff/dmb/courses/DSPDF/00700_OptimalFIR.pdf] | ||
+ | |||
+ | *Exemplo do projeto de um filtro passa-baixas, com minima ordem (Filtro de Parks-McClellan) com frequência de passagem de 1000 Hz e frequência de rejeição de 1500 Hz, dada uma frequência de amostragem de 8000 Hz. Considere que a atenuação na banda de rejeição é de no mínimo 40 dB e o ripple máximo na banda passante é de 1 dB. | ||
+ | |||
+ | <syntaxhighlight lang=matlab> | ||
+ | fa = 8000; | ||
+ | |||
+ | Ap = 1; | ||
+ | Ar = 40; | ||
+ | |||
+ | fp = 1000; | ||
+ | fr = 1500; | ||
+ | |||
+ | f = [fp fr]; | ||
+ | a = [1 0]; | ||
+ | dev = [(10^(Ap/20)-1)/(10^(Ap/20)+1) 10^(-Ar/20)]; | ||
+ | [n,fo,ao,w] = firpmord(f,a,dev,fa); | ||
+ | b = firpm(n,fo,ao,w); | ||
+ | [h,w] = freqz(b,1,1024,fa); | ||
+ | plot(w, 20*log10(abs(h))); hold on; | ||
+ | plot([0 fr fr fa/2], [Ap/2 Ap/2 -Ar -Ar],':m') | ||
+ | plot([0 fp fp], [-Ap/2 -Ap/2 -(Ar+30)],':m'); | ||
+ | ylim([-(Ar+30) Ap/2+10]) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | *Exemplo do projeto de um filtro passa-faixa, com minima ordem (Filtro de Parks-McClellan) com frequências de passagem de 1500 e 1700 Hz e e frequências de rejeição de 1000 e 3000 Hz, dada uma frequência de amostragem de 8000 Hz. Considere que a atenuação na primeira banda de rejeição é de no mínimo 40 dB e 60 dB na segunda banda de rejeição. O ripple máximo na banda passante é de 1 dB e fa = 8000; | ||
+ | |||
+ | |||
+ | |||
+ | :*Uso do [http://la.mathworks.com/help/dsp/ug/use-fdatool-with-dsp-system-toolbox-software.html] para projeto de filtro IIR, FIR equiripple e FIR com janela. | ||
+ | *Uso do [http://la.mathworks.com/help/dsp/gs/design-and-implement-a-filter.html] no Simulink. | ||
+ | |||
+ | *Exemplo do projeto de um filtro passa-baixas, com minima ordem (Filtro de Parks-McClellan) com frequência de passagem de 1000 Hz e frequência de rejeição de 1500 Hz, dada uma frequência de amostragem de 8000 Hz. Considere que a atenuação na banda de rejeição é de no mínimo 40 dB e o ripple máximo na banda passante é de 0.4 dB. | ||
+ | |||
+ | <!-- | ||
+ | ;Aula 23 (14 out): | ||
+ | *Projeto de filtro FIR | ||
+ | :*projetar os filtros usando: 1) Janela fixa 2) Janela ajustável 3) Parks-McClellan. | ||
+ | :*garantir que o filtro seja de menor ordem em cada caso, mas que esteja dentro das especificações. | ||
+ | :*se necessário ajustar os valores de fs, fp, Ap, As, e a ordem do filtro, indicando o critério utilizado para o ajuste. | ||
+ | |||
+ | |||
+ | <syntaxhighlight lang=matlab> | ||
+ | %% Projetar o filtro passa baixas | ||
+ | fp = 1200 Hz; | ||
+ | fs = 1380 Hz; | ||
+ | fa = 8000 Hz; | ||
+ | Ap = 1 dB; | ||
+ | Ar = 50 dB; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | <syntaxhighlight lang=matlab> | ||
+ | %% Projetar o filtro passa altas | ||
+ | fs = 1200 Hz; | ||
+ | fp = 1380 Hz; | ||
+ | fa = 8000 Hz; | ||
+ | Ap = 1 dB; | ||
+ | Ar = 50 dB; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ;Aula 23 (10 mai) | ||
+ | |||
+ | *Projeto de filtro FIR | ||
+ | :*projetar os filtros usando: 1) Janela fixa 2) Janela ajustável 3) Parks-McClellan. | ||
+ | :*garantir que o filtro seja de menor ordem em cada caso, mas que esteja dentro das especificações. | ||
+ | :*se necessário ajustar os valores de fs, fp, Ap, As, e a ordem do filtro, indicando o critério utilizado para o ajuste. | ||
+ | |||
+ | <syntaxhighlight lang=matlab> | ||
+ | %% Projetar o filtro passa faixa | ||
+ | fs1 = 800 Hz; | ||
+ | fp1 = 900 Hz; | ||
+ | fp2 = 1000 Hz; | ||
+ | fs2 = 1300 Hz; | ||
+ | fa = 8000 Hz; | ||
+ | Ap = 1 dB; | ||
+ | Ar = 50 dB; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | <syntaxhighlight lang=matlab> | ||
+ | %% Projetar o filtro rejeita faixa | ||
+ | fp1 = 800 Hz; | ||
+ | fs1 = 900 Hz; | ||
+ | fs2 = 1000 Hz; | ||
+ | fp2 = 1300 Hz; | ||
+ | fa = 8000 Hz; | ||
+ | Ap = 1 dB; | ||
+ | Ar = 50 dB; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Entrega do trabalho de projeto e análise de filtros digitais (05 de junho de 2019, as 9:40) | ||
+ | --> | ||
+ | <!-- | ||
+ | ;Aula 23 (23 out): | ||
+ | :*Uso do Simulink | ||
+ | ::* Uso dos blocos de simulação [http://www.mathworks.com/help/simulink/slref/sinewave.html sinewave], [http://www.mathworks.com/help/simulink/slref/floatingscope.html scope] e [http://www.mathworks.com/help/dsp/ref/spectrumanalyzer.html Spectrum Analyzer]. | ||
+ | ::* Outros blocos [http://www.mathworks.com/help/simulink/slref/mux.html mux], [http://www.mathworks.com/help/simulink/slref/demux.html demux], [http://www.mathworks.com/help/simulink/slref/add.html sum], [http://www.mathworks.com/help/simulink/slref/product.html product]. | ||
+ | ::*[https://www.mathworks.com/help/simulink/gs/create-a-simple-model.html?s_cid=learn_doc Create Simple Model] [https://www.mathworks.com/videos/getting-started-with-simulink-118723.html] | ||
+ | |||
+ | ;Aula 24 (25 out): | ||
+ | :*Uso do Simulink | ||
+ | :*Tipos de Solver ([http://www.mathworks.com/help/simulink/ug/choosing-a-solver.html Choose a Solver]). | ||
+ | :*Diferença entre processamento por amostra e processamento por quadro ([http://www.mathworks.com/help/dsp/ug/sample-and-frame-based-concepts.html Sample- and Frame-Based Concepts]). | ||
+ | :*Exemplos: | ||
+ | ::*[https://www.mathworks.com/help/dsp/ug/filter-frames-of-a-noisy-sine-wave-signal-in-simulink.html Filtragem] - frame based | ||
+ | ::*[[Modulações Analógicas]] | ||
+ | ::*[[Amostragem de sinais]] | ||
+ | ::*[https://www.mathworks.com/help/dsp/ug/digital-filter-design-block.html Digital Filter Design Block], [https://www.mathworks.com/help/dsp/ref/digitalfilterdesign.html], [https://www.mathworks.com/help/dsp/ref/filterrealizationwizard.html] | ||
+ | |||
+ | :::*É importante ler informações complementares sobre o [http://www.mathworks.com/help/simulink/gui/solver-pane.html Solver Pane], [http://www.mathworks.com/help/simbio/ug/simulating-models.html Model Simulation], [http://www.mathworks.com/help/simulink/ug/types-of-solvers.html Types of Solvers], [http://www.mathworks.com/help/simevents/ug/solvers-for-simevents-models.html Solvers for Discrete-Event Systems]. | ||
+ | |||
+ | :::*É importante ler informações complementares sobre, [http://www.mathworks.com/help/simulink/sample-time.html Tempo de amostragem (Time Sample)], [http://www.mathworks.com/help/simulink/ug/how-to-view-sample-time-information.html View Sample Time Information], [http://www.mathworks.com/help/simulink/slref/concatenate.html Vector Concatenate, Matrix Concatenate] | ||
+ | Para configurar o Simulink para sistemas discretos execute o comando dspstartup.m antes de abrir um novo modelo. | ||
+ | |||
+ | --> | ||
{{collapse bottom}} | {{collapse bottom}} |
Edição das 16h49min de 18 de fevereiro de 2021
Unidade 1
Unidade 1 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
profile on
profile viewer Execute no Matlab o código abaixo, e analise os 3 filtros implementados através dos seus zeros e polos. Busque tirar conclusões sobre a influência da posição dos polos e zeros (ver o gráfico do plano z) e correlacione com a resposta de frequência em magnitude (gráfico do freqz).
|
Unidade 2 - Filtros IIR
Unidade 2 - Filtros IIR | |||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Na sequência será mostrado como inicialmente projetar o filtro LP protótipo, e depois as transformações em frequência.
%%Definição do filtro
% Definindo os coeficientes do filtro
b = [1 1]; % Numerador
a = [1 1 5]; % Denominador
% Calculando os zeros (raízes do numerador) e pólos (raízes do denominador)
% Método 1 - usando a função tf2zp
[z1,p1,k]=tf2zp(b,a)
% Método 2 - obtendo as raízes
z2 = roots(b);
p2 = roots(a);
zplane(b,a);
%% Obtendo a resposta em frequência
% substitituindo a variável complexa s por jw usando a função freqz
freqs(b,a);
% Usando cálculo simbólico e plotando o gráfico com semilogx
syms s w
H(s) = (s+1)/(s^2 + s + 5);
pretty(H(1j*w))
latex(H(1j*w))
%%
ws = logspace(-2, 1, 1000);
h = H(1j*ws);
subplot(211)
plot(ws,abs(h)); grid on;
%semilogx(ws,abs(h)); grid on;
subplot(212)
plot(ws,angle(h)/pi*180); grid on;
%semilogx(ws,angle(h)/pi*180); grid on;
Os projetos de filtro Butterworth com função de transferência utilizam os polinômios de Butterworth mostrados na tabela a seguir:
Para o projeto dos filtros do tipo Chebyshev, são utilizados os polinômios de Chebyshev de primeira ordem, os quais são definidos pela equação trigonométrica: Os dois primeiros polinômios são facilmente calculados como: O cálculo dos demais termos pode ser feita pela relação recursiva: Portanto o polinômio de grau 2 pode ser obtido por Assim os primeiros nove polinômios de Chebyshev de primeira ordem podem ser obtidos: Esses polinômios mostram um comportamento oscilatório entre . Figura 2.1 - Os primeiros cinco polinômios de Chebyshev de primeira ordem no domínio
Figura 2.2 - Resposta de magnitude de filtro protótipo Chebyshev
Para o projeto de filtros analógicos é necessário fazer as transformações de frequência indicadas abaixo, as quais devem ser consideradas no momento da determinação dos parâmetros do filtro protótipo LP.
%% Projeto de filtro passa-alta (HP) usando funções do Matlab
Wp = 150; % rad/s
Ws = 40; % rad/s
Rp = 3; % dB
Rs = 60; % dB
[n,Wn] = buttord(Wp,Ws,Rp,Rs,'s')
[b,a] = butter(n,Wn,'high','s');
[h,w] = freqs(b,a,logspace(1,3,1000));
semilogx(w,20*log10(abs(h)));grid on;
hold on; plot([Wp Wn Ws],[-Rp -3 -Rs],'x'); hold off;
title(sprintf('Filtro HP Butterworth, n = %d',n))
%% Projeto de filtro passa-faixa (BP) usando funções do Matlab
Wp = [100 200]; % rad/s
Ws = [50 250]; % rad/s
Rp = 3; % dB
Rs = 40; % dB
[n,Wn] = buttord(Wp,Ws,Rp,Rs,'s');
[b,a] = butter(n,Wn,'s');
freqs(b,a,logspace(1,3,1000))
title(sprintf('Filtro BP Butterworth, n = %d',n))
%% Projeto de filtro passa-baixas usando funções do Matlab
%% Especificações do filtro
Wp =16000; Ws = 20000; Ap = 0.3; As = 20; G0= 3;
% Para analisar o filtro projetado, use fvtool(b,a) para observar plano s, resposta em magnitude, fase e atraso de grupo
%% Butterworth
[n,Wn] = buttord(Wp, Ws, Ap, As,'s')
[b,a] = butter(n,Wn, 's');
%% Chebyshev I
n = cheb1ord(Wp, Ws, Ap, As,'s')
[b,a] = cheby1(n,Ap, Wp, 's');
%% Chebyshev II
n = cheb2ord(Wp, Ws, Ap, As,'s')
[b,a] = cheby2(n,As, Ws, 's');
%% Elliptic - Cauer
[n, Wn] = ellipord(Wp, Ws, Ap, As,'s')
[b,a] = ellip(n,Ap,As, Wn, 's');
fa = 200;
fN = fa/2;
wo = 60/fN; bw = 10/fN;
[b,a] = iirnotch(wo,bw);
fvtool(b,a);
syms z;
N(z) = poly2sym(b,z);
D(z) = poly2sym(a,z);
H(z) = N(z)/D(z);
pretty(vpa(H(z),3))
fa = 8000;
fN = fa/2;
wo = 941/fN; bw = 100/fN;
[b,a] = iirpeak(wo,bw);
fvtool(b,a);
syms z;
N(z) = poly2sym(b,z);
D(z) = poly2sym(a,z);
H(z) = N(z)/D(z);
pretty(vpa(H(z),3))
fa = 8000; fN = fa/2;
fo = 1000; bw = 20/fN;
[b,a] = iircomb(fa/fo,bw,'peak'); % ou use a flag 'notch'
fvtool(b,a);
syms z;
N(z) = poly2sym(b,z);
D(z) = poly2sym(a,z);
H(z) = N(z)/D(z);
pretty(vpa(H(z),3))
|
Unidade 3 - Filtros FIR
Unidade 3 - Filtros FIR | ||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ATUAL
A determinação da resposta ao impulso do filtro pode ser feita substituindo a entrada por . O resultado é , e portanto a resposta ao impulso tem duração igual ao número de coeficientes N+1 (onde N é a ordem do filtro). Esse é o motivo pelo qual o filtro tem o nome de filtro de resposta ao impulso finita (FIR - Finite Impulse Response). O filtro também recebe nomes como filtro transversal, Filtro não recursivo, filtro de média móvel, e tapped delay filter (torneira com atrasos?). A função de transferência também pode ser descrita como: Algumas vantagens que os filtros FIR tem sobre os IIR: 1. É possível projetar FIR com fase linear, ou seja atraso de grupo constante. Esses filtros são desejáveis na transmissão de sinais digitais.
2. As amostras da resposta ao impulso são os coeficientes do filtros , e portanto não precisam ser calculadas. 3. Os FIR são sempre estáveis pois tem todos os polos na origem. Também é consequência de não ter realimentação. Por isso também não tem ciclo limite que surge nos filtros IIR como resultado da resposta ao impulso de duração infinita associada a representação dos coeficientes e dos sinais com palavras de comprimento finito de bits. 4. O efeito da representação dos coeficientes e dos sinais com palavras de comprimento finito de bits, na resposta de frequência e resposta no domínio do tempo é menor que nos IIR.
Os filtros de fase linear possuem algumas propriedades (respostas em frequência possíveis, distribuição dos zeros em simetria quadrantal), conforme é mostrado a seguir.
N = 10;
bi = 2*(rand(1,N)-0.5)
%% Tipo I - LP, HP, BS, BP
b = [bi (2*rand(1,1)-0.5) flip(bi)];
fvtool(b,1);
%% Tipo II - LP, BP
% tem um zero em -1
b = [bi flip(bi)];
fvtool(b,1);
%% Tipo III - BP
% tem um zero em 1 e -1
b = [bi 0 -flip(bi)];
fvtool(b,1);
%% Tipo IV - BP, HP
% tem um zero em 1
b = [bi -flip(bi)];
fvtool(b,1);
Projeto de filtros FIR pelo método da série de FourierUsando a representação dos filtros ideais LP, HP, BP, BS, com frequências de corte e ganho unitário na banda de passagem e ganho zero na banda de rejeição, e considerando que a magnitude das respostas em frequência é uma função periódica em , e conhecendo as equações de síntese e análise de um sinal (ou sistema) onde É possível coeficientes da série de Fourier de filtros ideais: LP, HP, BP, BS
De modo semelhante é possível obter os coeficientes dos filtros HP, BP e BS.
onde sabe-se que , ou seja para e para .
Aplicando a equação de síntese da série obtemos: Note que esta função tem um máximo em , e cruza o zero em , portanto a lagura do lóbulo central é de . Além disso percebe-se que se aumentamos o tamanho da janela retangular (2M+1), a largura do lóbulo central é reduzida proporcionalmente. Ao fazer o "janelamento" dos coeficientes da série de Fourier da resposta em frequência do filtro ideal, estamos multiplicando a série de coeficientes pelo janela retangular , conforme mostra a figura a seguir. Essa multiplicação no domínio do tempo corresponde a uma convolução no domínio da frequência. A qual é mostrada graficamente na figura a seguir.
L = 64;
wvtool(rectwin(L), triang(L), bartlett(L), hann(L), hamming(L), blackman(L), blackmanharris(L), nuttallwin(L));
Use o código abaixo e verifique o efeito das diferentes janelas temporais sobre a magnitude da resposta em frequência, sobre a resposta ao impulso, posição dos zeros no plano z, etc.
N = 32;
wc = 0.5; M = N/2;
CLP = wc*sinc(wc*(-M:M));
bRET = CLP;
bHAM = CLP.*hamming(2*M+1)';
bBLACK = CLP.*blackman(2*M+1)';
fvtool(bRET,1,bHAM,1,bBLACK,1);
legend('rectwin', 'Hamming', 'Blackman');
ylim([-0.1 0.1])
wp = 0.2*pi; Ap = 1 dB; Gp = 0 dB ws = 0.4*pi; As = 40 dB;
ws = 0.4*pi; Ap = 0.2 dB; Gp = 0 dB wp = 0.6*pi; As = 50 dB;
L = 64;
r = 60; % Chebyshev e Tukey
alpha = 3; % Gauss
betha = 8; % Kaiser
nbar = 10; % Taylor
wvtool(kaiser(L,betha), chebwin(L,r), gausswin(L,alpha),tukeywin(L,r), taylorwin(L,nbar,-r));
Para a janela de Kaiser, a estimação do fator e da ordem do filtro são obtidos por:
onde é a atenuação do lóbulo lateral e é a largura da banda de transição em rad/amostra. A janela de Kaiser é definida por:
onde : é a função de Bessel de ordem zero [2] Utilizando o Matlab é possível estimar esses valores utilizando a função kaiserord. Exemplo da obtenção de um filtro passa baixa com , , atenuação de 40 dB na "stopband" %% Calculo do filtro de kaiser, sem ajustes
% Especificaçao
fsamp = 8000;
fcuts = [1000 1500];
Ap = 1;
As = 40;
ftype = 'low';
fN = fsamp/2;
wp = fcuts(1)/fN;
ws = fcuts(2)/fN;
Dw = abs(ws-wp);
% Calculo da janela de Kaiser
beta = 0.5842*(As-21)^0.4+0.07886*(As-21);
n = ceil((As-8)/(2.285*Dw*pi)+1);
Wn = (wp+ws)/2;
wkaiser = kaiser(n+1,beta);
Forma alternativa de projeto usando a função kaiserord fsamp = 8000;
fcuts = [1000 1500];
Ap = 1;
As = 40;
mags = [1 0];
devs = [1-10^(-Ap/20) 10^(-As/20)];
[n,Wn,beta,ftype] = kaiserord(fcuts,mags,devs,fsamp);
wkaiser = kaiser(n+1,beta);
h_fir = fir1(n,Wn,ftype,wkaiser,'noscale');
A partir das especificações do filtro é possível obter um projeto usando a função fir1. Essa função basicamente aplica o método da janela ao filtro ideal especificado pela(s) frequência(s) de corte . h_fir = fir1(n,Wn,ftype,kaiser(n+1,beta),'noscale');
[Hw,w] =freqz(h_fir);
plot(w*fsamp/2/pi,20*log10(abs(Hw)))
title(['Kaiser filter N = ' num2str(n)])
%fvtool(h_fir,1)
Como resultado do projeto a partir das equações de Kaiser é obtido o filtro abaixo: No entanto realizando ajustes tanto do ganho no topo , na largura da banda de transição , e na ordem do filtro , é possível reduzir essa ordem obtendo o filtro abaixo: L = 64;
r = 60; % Chebyshev e Tukey
alpha = 3; % Gauss
betha = 8; % Kaiser
nbar = 10; % Taylor
wvtool(kaiser(L,betha), chebwin(L,r), gausswin(L,alpha),tukeywin(L,r), taylorwin(L,nbar,-r));
Digital Filters with Linear Phase].
fa = 8000;
Ap = 1;
Ar = 40;
fp = 1000;
fr = 1500;
f = [fp fr];
a = [1 0];
dev = [(10^(Ap/20)-1)/(10^(Ap/20)+1) 10^(-Ar/20)];
[n,fo,ao,w] = firpmord(f,a,dev,fa);
b = firpm(n,fo,ao,w);
[h,w] = freqz(b,1,1024,fa);
plot(w, 20*log10(abs(h))); hold on;
plot([0 fr fr fa/2], [Ap/2 Ap/2 -Ar -Ar],':m')
plot([0 fp fp], [-Ap/2 -Ap/2 -(Ar+30)],':m');
ylim([-(Ar+30) Ap/2+10])
|
Referências Bibliográficas
- ↑ 1,0 1,1 1,2 DINIZ, P. S. R., DA SILVA, E. A. B., e LIMA NETTO, S. Processamento Digital de Sinais: Projeto e Análise de Sistemas. 2. ed. Porto Alegre: Bookman, 2014. 976 p. ISBN 978-8582601235
- ↑ 2,0 2,1 2,2 2,3 2,4 2,5 2,6 SHENOI, B. A. Introduction to Digital Signal Processing and Filter Design. 1.ed. New Jersey: John Wiley-Interscience, 2006. 440 p. ISBN 978-0471464822