Mudanças entre as edições de "PSD29007-Engtelecom(2020-1) - Prof. Marcos Moecke"
(→ATUAL) |
|||
(171 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
Linha 189: | Linha 189: | ||
:*Ver também [http://www.mathworks.com/help/releases/R2014a/pdf_doc/matlab/index.html PDF Documentation for MATLAB]. Principalmente [http://www.mathworks.com/help/releases/R2014a/pdf_doc/matlab/getstart.pdf MATLAB Primer]. | :*Ver também [http://www.mathworks.com/help/releases/R2014a/pdf_doc/matlab/index.html PDF Documentation for MATLAB]. Principalmente [http://www.mathworks.com/help/releases/R2014a/pdf_doc/matlab/getstart.pdf MATLAB Primer]. | ||
− | |||
;Aula 8 (9 mar): | ;Aula 8 (9 mar): | ||
− | |||
:* A filtragem de sinais digitais pode ser realizada de diferentes formas: | :* A filtragem de sinais digitais pode ser realizada de diferentes formas: | ||
::* convolução (y = conv(x,h)), onde x(n) é o sinal de entrada e h(n) é a resposta ao impulso do filtro (sistema linear invariante no tempo), | ::* convolução (y = conv(x,h)), onde x(n) é o sinal de entrada e h(n) é a resposta ao impulso do filtro (sistema linear invariante no tempo), | ||
Linha 384: | Linha 382: | ||
===Unidade 2=== | ===Unidade 2=== | ||
− | {{collapse top | | + | {{collapse top | Unidade 2 - Filtros IIR}} |
;Aula 9 (12 mar): | ;Aula 9 (12 mar): | ||
;Conceitos Gerais sobre Filtros Analógicos: | ;Conceitos Gerais sobre Filtros Analógicos: | ||
Linha 503: | Linha 501: | ||
*Calcule o valor do módulo dos pólos. | *Calcule o valor do módulo dos pólos. | ||
− | ;Aula 10 ( | + | ====INÌCIO DAS AULAS REMOTAS==== |
+ | ;Aula 10 e 11 (26 e 30 mar): | ||
;Projeto de filtros analógicos LP protótipo: | ;Projeto de filtros analógicos LP protótipo: | ||
* Projeto de filtros analógicos passa baixas (low pass - LP) do tipo Butterworth, considerando: <math> \omega_p </math> é a frequência de passagem, <math> A_p = 3 dB </math> é a atenuação em dB na frequência de passagem, <math> \omega_s </math> é a frequência de ''stopband'', <math> A_s </math> é a atenuação em dB na frequência de ''stopband''. | * Projeto de filtros analógicos passa baixas (low pass - LP) do tipo Butterworth, considerando: <math> \omega_p </math> é a frequência de passagem, <math> A_p = 3 dB </math> é a atenuação em dB na frequência de passagem, <math> \omega_s </math> é a frequência de ''stopband'', <math> A_s </math> é a atenuação em dB na frequência de ''stopband''. | ||
Linha 515: | Linha 514: | ||
*Se considerarmos o caso particular em que na frequência de passagem o ganho (em escala linear) deve ser <math> G_p = 1/\sqrt{2} = 0,707 </math>, que corresponde a um ganho (em escala log) <math> G_p = - 3 dB </math>, ou atenuação <math> A_p = 3 dB </math>. | *Se considerarmos o caso particular em que na frequência de passagem o ganho (em escala linear) deve ser <math> G_p = 1/\sqrt{2} = 0,707 </math>, que corresponde a um ganho (em escala log) <math> G_p = - 3 dB </math>, ou atenuação <math> A_p = 3 dB </math>. | ||
− | *Obtemos o fator <math> \epsilon = \sqrt{10^{0.1A_p}-1}</math>, | + | *Obtemos o fator <math> \epsilon^2 = {10^{0.1A_p}-1}</math>, ou <math> \epsilon = \sqrt{10^{0.1A_p}-1}</math>, para <math> A_p = 3 dB </math> temos que <math> \epsilon = 1 </math>. Esse fator no caso dos filtros com essa atenuação <math> A_p = 3 dB </math> acaba desaparecendo das equação de projeto. Para atenuações diferentes de 3 dB, ele ajusta a magnitude dos pólos, e afeta a ordem do filtro. |
− | + | ||
− | * | + | *Os passos para projetar um filtro analógico Hs(s) são: |
+ | :0) fazer a normalização da frequência e do ganho. | ||
+ | ::<math> {\Omega_p} = 1 </math>, e <math> \Omega_s = \frac {\omega_s} {\omega_p} </math> para o caso de filtros LP. | ||
+ | ::<math> A_p = -(G_p - G_0) </math>, <math> A_s = -(G_s - G_0) </math>. | ||
:1) determinar a ordem <math> n </math> do filtro utilizando a equação: | :1) determinar a ordem <math> n </math> do filtro utilizando a equação: | ||
Linha 539: | Linha 541: | ||
{{collapse top| bg=lightyellow | Exemplo Filtro LP Butterworth}} | {{collapse top| bg=lightyellow | Exemplo Filtro LP Butterworth}} | ||
− | Projete um filtro Butterworth LP com ganho em <math> \omega = 0 </math> | + | Projete um filtro Butterworth LP com ganho em <math> \omega = 0 </math> <math> G_{topo} = 5 dB </math>, frequência de passagem <math> {\omega_p} = 1000 rad/s </math> com ganho no mínimo de <math> G_p = 2 dB </math>, frequência de rejeição de <math> \omega_s = 5000 rad/s </math>, na qual o ganho deve ser inferior a <math> G_s = -25 dB </math> dB. |
− | + | *Dados de <math> Hs(s) </math>, passa-baixas (lowpass-LP) | |
::<math> \omega_p = </math> | ::<math> \omega_p = </math> | ||
::<math> \omega_s = </math> | ::<math> \omega_s = </math> | ||
− | ::<math> G_{ | + | ::<math> G_{topo(dB)} = </math> |
::<math> G_{p(dB)} = </math> | ::<math> G_{p(dB)} = </math> | ||
::<math> G_{s(dB)} = </math> | ::<math> G_{s(dB)} = </math> | ||
− | + | *Especificações de <math> Hp(p) </math>, passa-baixas (lowpass-LP) protótipo | |
::<math> \Omega_p = </math> | ::<math> \Omega_p = </math> | ||
::<math> \Omega_s = </math> | ::<math> \Omega_s = </math> | ||
Linha 554: | Linha 556: | ||
::<math> A_{s(dB)} = </math> | ::<math> A_{s(dB)} = </math> | ||
− | + | *Determinação de <math> Hp(p) </math> | |
::<math> \epsilon = </math> | ::<math> \epsilon = </math> | ||
::<math> n = </math> | ::<math> n = </math> | ||
Linha 561: | Linha 563: | ||
::<math> Hp(p) = </math> | ::<math> Hp(p) = </math> | ||
− | + | *Determinação de <math> Hs1(s) </math> substituindo <math>p=\frac{s}{\omega_p}</math> e corrigindo o ganho em <math> G_{topo} </math> | |
− | ::<math> Hs(s) = </math> | + | ::<math> Hs2(s) = Hs1(s) \cdot 10^{G_{topo}/20}</math> |
+ | |||
+ | *Obtida a função de transferência <math> Hs(s) = N(s)/D(s)</math> obtenha a resposta em frequência, substituindo <math>s=j*\omega</math> | ||
− | + | *Obtenha a resposta em frequência, para <math>\omega = 0, \omega_p , \omega_s, 10\omega_p </math> | |
+ | *Plote o gráfico de <math> |Hp(p)| </math> e <math> |Hs(s)| </math>, indicando a máscara de especificação do filtro. | ||
{{collapse bottom}} | {{collapse bottom}} | ||
+ | ;Aula 12 (2 abr): | ||
;Casos em que o ganho na banda de passagem é um valor <math> A_p </math> qualquer: | ;Casos em que o ganho na banda de passagem é um valor <math> A_p </math> qualquer: | ||
− | *Teremos <math> \epsilon = \sqrt{10^{0.1A_p}-1}</math> | + | *Teremos <math> \epsilon = \sqrt{10^{0.1A_p}-1}</math>, ou <math> \epsilon^2 = (10^{0.1A_p}-1)</math> |
*Para projetar o filtro é necessário: | *Para projetar o filtro é necessário: | ||
Linha 592: | Linha 598: | ||
{{collapse top| bg=lightyellow | Exemplo Filtro LP Butterworth}} | {{collapse top| bg=lightyellow | Exemplo Filtro LP Butterworth}} | ||
− | Projete um filtro Butterworth LP com ganho em <math> \omega = 0 </math> | + | Projete um filtro Butterworth LP com ganho em <math> \omega = 0 </math> <math> G_{topo} = 0dB </math>, frequência de passagem <math> {\omega_p} = 1000 rad/s </math> com atenuação máxima de <math> A_p = 0.5 dB </math>, frequência de rejeição de <math> \omega_s = 5000 rad/s </math> com atenuação mínima de <math> A_s = 30 dB </math>. |
− | + | *Dados de <math> Hs(s) </math>, passa-baixas (lowpass-LP) | |
::<math> \omega_p = </math> | ::<math> \omega_p = </math> | ||
::<math> \omega_s = </math> | ::<math> \omega_s = </math> | ||
− | ::<math> G_{ | + | ::<math> G_{topo(dB)} = </math> |
::<math> G_{p(dB)} = </math> | ::<math> G_{p(dB)} = </math> | ||
::<math> G_{s(dB)} = </math> | ::<math> G_{s(dB)} = </math> | ||
− | + | *Especificações de <math> Hp(p) </math>, passa-baixas (lowpass-LP) protótipo | |
::<math> \Omega_p = </math> | ::<math> \Omega_p = </math> | ||
::<math> \Omega_s = </math> | ::<math> \Omega_s = </math> | ||
− | ::<math> | + | ::<math> G_{0(dB)} = </math> |
::<math> A_{p(dB)} = </math> | ::<math> A_{p(dB)} = </math> | ||
::<math> A_{s(dB)} = </math> | ::<math> A_{s(dB)} = </math> | ||
− | + | *Determinação de <math> Hp(p) </math> | |
::<math> \epsilon = </math> | ::<math> \epsilon = </math> | ||
::<math> n = </math> | ::<math> n = </math> | ||
Linha 615: | Linha 621: | ||
::<math> Hp(p) = </math> | ::<math> Hp(p) = </math> | ||
− | + | *Determinação de <math> Hs1(s) </math> substituindo <math>p=\frac{s}{\omega_p}</math> e corrigindo o ganho em <math> G_{topo} </math> | |
− | ::<math> | + | ::<math> Hs2(s) = Hs1(s) \cdot 10^{G_{topo}/20}</math> |
− | + | *Obtida a função de transferência <math> Hs(s) = N(s)/D(s)</math> obtenha a resposta em frequência, substituindo <math>s=j*\omega</math> | |
− | |||
+ | *Obtenha a resposta em frequência, para <math>\omega = 0, \omega_p , \omega_s, 10\omega_p </math> | ||
+ | *Plote o gráfico de <math> |Hp(p)| </math> e <math> |Hs(s)| </math>, indicando a máscara de especificação do filtro. | ||
{{collapse bottom}} | {{collapse bottom}} | ||
:*Ver [[Uso do calculo simbólico na Matlab]] | :*Ver [[Uso do calculo simbólico na Matlab]] | ||
:*Ver pag. 186 a 204 de <ref name="SHENOI2006"> SHENOI, B. A. '''Introduction to Digital Signal Processing and Filter Design'''. 1.ed. New Jersey: John Wiley-Interscience, 2006. 440 p. ISBN 978-0471464822 </ref> | :*Ver pag. 186 a 204 de <ref name="SHENOI2006"> SHENOI, B. A. '''Introduction to Digital Signal Processing and Filter Design'''. 1.ed. New Jersey: John Wiley-Interscience, 2006. 440 p. ISBN 978-0471464822 </ref> | ||
+ | ;Aula 13 (6 abr): | ||
− | + | ; Polinômios Chebyshev de primeira ordem: | |
− | < | + | 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: |
− | + | :<math>C_n(\Omega) = cos (n cos^{-1}(\Omega))</math> | |
− | + | Os dois primeiros polinômios são facilmente calculados como: | |
− | + | :<math>C_0(\Omega) = cos (0 \times cos^{-1}(\Omega)) = cos(0) = 1 </math> | |
− | + | :<math>C_1(\Omega) = cos (1 \times cos^{-1}(\Omega)) = \Omega </math> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | </ | ||
− | + | O cálculo dos demais termos pode ser feita pela relação recursiva: | |
− | + | :<math>C_{n}(\Omega) = 2 \times \Omega \times C_{n-1}(\Omega) - C_{n-2}(\Omega)</math> | |
− | + | Portanto o polinômio de grau 2 pode ser obtido por | |
− | + | :<math>C_{2}(\Omega) = 2 \times \Omega \times C_{1}(\Omega) - C_{0}(\Omega) </math> | |
− | :<math> | + | :<math>C_{2}(\Omega) = 2 \times \Omega \times \Omega - 1 </math> |
− | + | :<math>C_{2}(\Omega) = 2 \Omega ^2 - 1 </math> | |
− | :<math> | ||
− | |||
− | :<math>C_{ | ||
− | + | Assim os primeiros nove polinômios de Chebyshev de primeira ordem podem ser obtidos: | |
:<math> C_0(\Omega) = 1 \,</math> | :<math> C_0(\Omega) = 1 \,</math> | ||
:<math> C_1(\Omega) = \Omega \,</math> | :<math> C_1(\Omega) = \Omega \,</math> | ||
Linha 663: | Linha 656: | ||
:<math> C_4(\Omega) = 8\Omega^4 - 8\Omega^2 + 1 \,</math> | :<math> C_4(\Omega) = 8\Omega^4 - 8\Omega^2 + 1 \,</math> | ||
:<math> C_5(\Omega) = 16\Omega^5 - 20\Omega^3 + 5\Omega \,</math> | :<math> C_5(\Omega) = 16\Omega^5 - 20\Omega^3 + 5\Omega \,</math> | ||
+ | :<math> C_6(\Omega) = 32\Omega^6 - 48\Omega^4 + 18\Omega^2 - 1 \,</math> | ||
+ | :<math> C_7(\Omega) = 64\Omega^7 - 112\Omega^5 + 56\Omega^3 - 7\Omega \,</math> | ||
+ | :<math> C_8(\Omega) = 128\Omega^8 - 256\Omega^6 + 160\Omega^4 - 32\Omega^2 + 1 \,</math> | ||
+ | |||
+ | Esses polinômios mostram um comportamento oscilatório entre <math> -1 < \Omega < 1 </math>. | ||
+ | <center> | ||
+ | :[[Arquivo:ChebyshevGraph.png| 600px]] | ||
+ | :Figura: Os primeiros cinco polinômios de Chebyshev de primeira ordem no domínio <math> -1 < \Omega < 1 </math> | ||
+ | FONTE: [https://pt.wikipedia.org/wiki/Polin%C3%B4mios_de_Tchebychev Polinômios de Tchebychev], Wikipedia | ||
+ | </center> | ||
+ | *Ver mais em [[Polinômio de Chebyshev]] | ||
+ | |||
+ | ; Projeto de filtro protótipo LP do tipo Chebyshev I: | ||
+ | *Determine a ordem mínima necessária considerando: <math> \omega_p </math> é a frequência de passagem do filtro LP, <math> A_p </math> é a atenuação em dB na frequência de passagem, <math> \omega_s </math> é a frequência de ''stopband'' do filtro, <math> A_s </math> é a atenuação em dB na frequência de ''stopband'', <math> \Omega_s = \frac {\omega_s} {\omega_p} </math>, <math> \Omega_p = \frac {\omega_p} {\omega_p} = 1 </math> são as frequências de passagem e ''stopband'' do filtro protótipo. | ||
+ | ::<math> n \ge \frac {\cosh^{-1} \sqrt{(10^{0.1A_s}-1)/ \epsilon^2}} {\cosh^{-1} \Omega_s} </math> | ||
+ | ::onde <math> \epsilon^2 = (10^{0.1A_p}-1)</math> ou <math> \epsilon = \sqrt{10^{0.1A_p}-1 } </math>. | ||
− | + | *Obtenha os polos do filtro: | |
− | |||
− | :: | + | ::<math> p_k = -\sinh(\varphi_2) \sin(\theta_k)+ j \cosh(\varphi_2) \cos(\theta_k) \ \ \ \ \ k = 1, 2, 3, ... n</math>, |
+ | ::onde <math> \theta_k = \left ( \frac{(2k-1)\pi}{2n} \right ) </math> e <math> \varphi_2 = \frac{1}{n} \sinh^{-1}\left (\frac{1}{\epsilon} \right ) </math> | ||
− | |||
− | |||
− | |||
− | :<math>\left | H( | + | <!-- ou seja :<math> 10 log10 \left| H( 1 ) \right | = sqrt(\frac {1}{1+\epsilon^2}) </math> --> |
− | :<math>\left | H(0) \right | ^2 = \frac{H_0^2}{ 1+ \epsilon^2 C_n ^2 \left ( \Omega_0 \right )} </math> | + | <!-- :<math>\left | H(0) \right | ^2 = \frac{H_0^2}{ 1+ \epsilon^2 C_n ^2 \left ( \Omega_0 \right )} </math> --> |
− | + | * Para obter a função de transferência: | |
+ | |||
+ | ::<math> H(p)= \frac{H_0}{D(p)} </math>, onde <math> D(p)=\prod_{k-1}^{n} \left ( p-p_{k} \right ) </math> | ||
− | |||
::onde | ::onde | ||
− | ::<math> H_0 = d_0 | + | ::<math>H_0 = H(0) \times d_0 =\left\{ |
− | + | \begin{matrix} | |
− | ::<math> d_0 =\prod_{k-1}^{n} \left (-p_{k} \right ) </math> é o último termo do denominador D(p) | + | d_0 & \text{para} & n & \text{impar} \\ |
+ | \frac {d_0}{\sqrt[]{1+\epsilon^2}} & \text{para} & n & \text{par} | ||
+ | \end{matrix}\right. </math> | ||
+ | ::<math> d_0 =\prod_{k-1}^{n} \left (-p_{k} \right ) </math> é o último termo do denominador <math> D(p) = d_n p^n+ d_{n-1} p^{n-1} + \cdots + d_1 p+ d_0 </math> | ||
− | : | + | ::<math>\left | H( 0 ) \right | ^2 = \left\{ |
− | + | \begin{matrix} | |
− | + | 1 & \text{para} & n & \text{impar} \\ | |
+ | \frac {1}{1+\epsilon^2} & \text{para} & n & \text{par} | ||
+ | \end{matrix}\right. </math> | ||
+ | |||
+ | ::<math>\left | H( 1 ) \right | ^2 = \frac {1}{1+\epsilon^2} </math>, onde <math> 20 log10 (\left | H( 1 ) \right |) = A_p (dB) </math> | ||
+ | |||
+ | ; Projeto de Filtros Analógicos do tipo LP, HP, BP, BS: | ||
+ | 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. | ||
+ | :* Transformações de frequência de filtros analógicos | ||
+ | :*passa-baixas (<math> \Omega_p= 1 </math>) -> passa-baixas (<math> \omega_p</math>) | ||
+ | ::*Cálculo do protótipo com <math> \Omega_s = \frac{\omega_s}{\omega_p}</math> | ||
+ | ::*Substituição de variáveis <math> p = \frac{s}{\omega_p}</math> | ||
+ | |||
+ | :*passa-baixas (<math> \Omega_p= 1 </math>) -> passa-altas (<math> \omega_p</math>) | ||
+ | ::*Cálculo do protótipo com <math> \Omega_s = \frac{\omega_p}{\omega_s}</math> | ||
+ | ::*Substituição de variáveis <math> p = \frac{\omega_p} {s}</math> | ||
+ | |||
+ | :*passa-baixas (<math> \Omega_p= 1 </math>) -> passa-faixa (<math> \omega_0 </math> e <math> B </math>) | ||
+ | ::*Cálculo do protótipo com <math> \Omega_s = \Bigg|\frac{-\omega_s^2 + \omega_0^2} {B \omega_s}\Bigg|</math> | ||
+ | ::*Substituição de variáveis <math> p = \frac{s^2 + \omega_0^2} {B s}</math> | ||
+ | :: onde <math> B = \omega_{p2} - \omega_{p1}</math> e <math> \omega_0 = \sqrt{\omega_{p2} \omega_{p1}}</math> | ||
+ | |||
+ | :*passa-baixas (<math> \Omega_p= 1 </math>) -> rejeita-faixa (<math> \omega_0 </math> e <math> B </math>) | ||
+ | ::*Cálculo do protótipo com <math> \Omega_s = \Bigg| \frac {B \omega_s} {-\omega_s^2 + \omega_0^2}\Bigg|</math> | ||
+ | ::*Substituição de variáveis <math> p = \frac {B s} {s^2 + \omega_0^2}</math> | ||
+ | :: onde <math> B = \omega_{p2} - \omega_{p1}</math> e <math> \omega_0 = \sqrt{\omega_{p2} \omega_{p1}}</math> | ||
+ | |||
+ | ;Aula 14 (9 abr): | ||
+ | {{collapse top| bg=lightyellow | Exemplo Filtro HP Chebyshev I}} | ||
+ | |||
+ | Projete um filtro Chebyshev I '''HP''' com ganho em <math> \omega = 0 </math> <math> G_{topo} = 5 dB</math>, frequência de rejeição <math> {\omega_s} = 2500 rad/s </math> com atenuação mínima de <math> A_s = 30 dB </math>, frequência de passagem de <math> \omega_p = 12500 rad/s </math> com atenuação máxima de <math> A_p = 0.5 dB </math>. | ||
+ | |||
+ | *Dados de <math> Hs(s)</math>, passa-altas (highpass-HP) | ||
+ | ::<math> \omega_p = </math> | ||
+ | ::<math> \omega_s = </math> | ||
+ | ::<math> G_{topo(dB)} = </math> | ||
+ | ::<math> G_{p(dB)} = </math> | ||
+ | ::<math> G_{s(dB)} = </math> | ||
+ | |||
+ | *Especificações de <math> Hp(p) </math>, passa-baixas (lowpass-LP) protótipo | ||
+ | ::<math> \Omega_p = </math> | ||
+ | ::<math> \Omega_s = </math> | ||
+ | ::<math> A_{0(dB)} = </math> | ||
+ | ::<math> A_{p(dB)} = </math> | ||
+ | ::<math> A_{s(dB)} = </math> | ||
+ | |||
+ | *Determinação de <math> Hp(p) </math> | ||
+ | ::<math> \epsilon = </math> | ||
+ | ::<math> n = </math> | ||
+ | ::<math> p_k = </math> | ||
+ | ::<math> D(p) = </math> | ||
+ | ::<math> d_0 = </math> | ||
+ | ::<math> H_0 = </math> | ||
+ | ::<math> Hp(p) = </math> | ||
+ | |||
+ | *Determinação de <math> Hs1(s) </math> '''HP''' substituindo <math>p=\frac{\omega_p}{s}</math> e corrigindo o ganho em <math> G_{topo} </math> | ||
+ | ::<math> Hs2(s) = Hs1(s) \cdot 10^{G_{topo}/20}</math> | ||
+ | |||
+ | *Obtida a função de transferência <math> Hs(s) = N(s)/D(s)</math> obtenha a resposta em frequência, substituindo <math>s=j*\omega</math> | ||
+ | |||
+ | *Obtenha a resposta em frequência, para <math>\omega = 0, \omega_p , \omega_s, 10\omega_p </math> | ||
+ | |||
+ | *Plote o gráfico de <math> |Hp(p)| </math> e <math> |Hs(s)| </math>, indicando a máscara de especificação do filtro. | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | ;Aula 15 (13 abr): | ||
+ | |||
+ | * Uso das funções [http://www.mathworks.com/help/signal/ref/buttord.html buttord], [http://www.mathworks.com/help/signal/ref/butter.html butter], [http://www.mathworks.com/help/signal/ref/cheb1ord.html cheb1ord], [http://www.mathworks.com/help/signal/ref/cheby1.html cheby1], [http://www.mathworks.com/help/signal/ref/cheb2ord.html cheb2ord], [http://www.mathworks.com/help/signal/ref/cheby2.html cheby2], [http://www.mathworks.com/help/signal/ref/ellipord.html ellipord], [http://www.mathworks.com/help/signal/ref/ellip.html ellip] para o projeto de filtros analógicos com Matlab (é necessário usar o parâmetro ''''s''''). | ||
+ | |||
+ | *'''[n,Wn] = buttord(Wp,Ws,Rp,Rs,'s')''' Encontra a menor ordem '''n''' é a frequência de corte '''Wn''' para um filtro Butterworth analógico, com ripple na banda passante (''bandpass'') menor que '''Rp''' dB e atenuação na banda de rejeição (''stopband'') pelo menos de '''Rs''' dB. As frequências angulares '''Wp''' e '''Ws''' são dadas em rad/s. Se Wp e Ws são escalares, o filtro será um LP ou HP. Se Wp e Ws forem vetores, o filtro será um BP ou BS. | ||
+ | |||
+ | *'''[b,a] = butter(n,Wn,ftype,'s')''' Projeta o filtro Butterworth analógico LP, HP, BP ou BS com frequência angular de corte '''Wn''', dependendo do valor de '''ftype''' e do número de elementos de '''Wn'''. | ||
+ | <syntaxhighlight lang=matlab> | ||
+ | %% 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)) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | *'''[n,Wp] = cheb1ord(Wp,Ws,Rp,Rs,'s')''' designs a lowpass, highpass, bandpass, or bandstop analog Chebyshev Type I filter with cutoff angular frequencies Wp. | ||
+ | *'''[b,a] = cheby1(n,Rp,Wp,ftype,'s')''' designs a lowpass, highpass, bandpass, or bandstop analog Chebyshev Type I filter with passband edge angular frequency Wp and Rp decibels of passband ripple. | ||
+ | |||
+ | *'''[n,Ws] = cheb2ord(Wp,Ws,Rp,Rs,'s')''' designs a lowpass, highpass, bandpass, or bandstop analog Chebyshev Type II filter with cutoff angular frequencies Ws. | ||
+ | *'''[b,a] = cheby2(n,Rs,Ws,ftype,'s')''' designs a lowpass, highpass, bandpass, or bandstop analog Chebyshev Type II filter with stopband edge angular frequency Ws and Rs decibels of stopband attenuation. | ||
+ | |||
+ | *'''[n,Wn] = ellipord(Wp,Ws,Rp,Rs,'s'''') finds the minimum order n and cutoff frequencies Wn for an analog elliptic filter. Specify the frequencies Wp and Ws in radians per second. The passband or the stopband can be infinite. | ||
+ | *'''[b,a] = ellip(n,Rp,Rs,Wp,ftype, 's'''') designs a lowpass, highpass, bandpass, or bandstop analog elliptic filter with passband edge angular frequency Wp, Rp decibels of passband ripple, and Rs decibels of stopband attenuation. | ||
+ | |||
+ | *Note: The resulting bandpass and bandstop designs are of order 2n. | ||
+ | *Note: See [https://www.mathworks.com/help/signal/ref/cheby1.html#bucqqye-2 Limitations] [https://www.mathworks.com/help/signal/ref/ellip.html#bucsbss-2] for information about numerical issues that affect forming the transfer function. | ||
+ | |||
+ | :* Ver também [https://www.mathworks.com/help/signal/ug/comparison-of-analog-iir-lowpass-filters.html Comparison of Analog IIR Lowpass Filters]. | ||
+ | :* Uso das funções [http://www.mathworks.com/help/signal/ref/freqs.html freqs], [https://www.mathworks.com/help/signal/ref/zplane.html zplane] na análise da resposta em frequência de filtros analógicos. | ||
+ | : | ||
* Projeto de filtros analógicos do tipo Butterworth, Chebyshev I e II e Cauer (eliptico) usando funções do Matlab. | * Projeto de filtros analógicos do tipo Butterworth, Chebyshev I e II e Cauer (eliptico) usando funções do Matlab. | ||
<syntaxhighlight lang=matlab> | <syntaxhighlight lang=matlab> | ||
Linha 714: | Linha 834: | ||
:*Ver pag. 204 a 208 de <ref name="SHENOI2006"/> | :*Ver pag. 204 a 208 de <ref name="SHENOI2006"/> | ||
− | + | ;Aula 16 (16 abr): | |
− | ;Aula | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
*Exemplos de Filtros Analógicos: | *Exemplos de Filtros Analógicos: | ||
:* Exemplo 1: Filtro passa-baixas (<math> f_p </math> = 941Hz, <math> f_s </math> = 1209 Hz, <math> A_p </math> = 1 dB, <math> A_s </math> = 20 dB) | :* Exemplo 1: Filtro passa-baixas (<math> f_p </math> = 941Hz, <math> f_s </math> = 1209 Hz, <math> A_p </math> = 1 dB, <math> A_s </math> = 20 dB) | ||
:* Exemplo 2: Filtro passa-altas (<math> f_p </math> = 1209 Hz, <math> f_s </math> = 941Hz, <math> A_p </math> = 1 dB, <math> A_s </math> = 20 dB) | :* Exemplo 2: Filtro passa-altas (<math> f_p </math> = 1209 Hz, <math> f_s </math> = 941Hz, <math> A_p </math> = 1 dB, <math> A_s </math> = 20 dB) | ||
− | :* Exemplo 3: Filtro passa-faixa (<math> f_{ | + | :* Exemplo 3: Filtro passa-faixa (<math> f_{s1} </math> = 770 Hz, <math> f_{p1} </math> = 811 Hz, <math> f_{p2} </math> = 895,5 Hz, <math> f_{s2} </math> = 1209 Hz, <math> A_p </math> = 1 dB, <math> A_s </math> = 30 dB, <math> G_{topo} </math> = 5 dB). |
− | :* Exemplo 4: Filtro rejeita-faixa (<math> f_{p1} </math> = 53 Hz, <math> f_{s1} </math> = 58 Hz, <math> f_{s2} </math> = 62 Hz <math> f_{p2} </math> = 67 Hz, <math> A_p </math> = 2 dB, <math> | + | :* Exemplo 4: Filtro rejeita-faixa (<math> f_{p1} </math> = 53 Hz, <math> f_{s1} </math> = 58 Hz, <math> f_{s2} </math> = 62 Hz <math> f_{p2} </math> = 67 Hz, <math> A_p </math> = 2 dB, <math> A_s </math> = 25 dB) |
::'''NOTA:''' | ::'''NOTA:''' | ||
:::*No calculo do filtro lembre-se de usar as frequências angulares para <math> \omega_p </math>, <math> \omega_s </math>, <math> B\omega </math>, <math> \omega_0 </math>. | :::*No calculo do filtro lembre-se de usar as frequências angulares para <math> \omega_p </math>, <math> \omega_s </math>, <math> B\omega </math>, <math> \omega_0 </math>. | ||
Linha 752: | Linha 846: | ||
:::*Confira os projetos dos filtros plotando as respostas em frequência dos filtros protótipo H(p) e filtro final H(s) de cada um dos exemplos. | :::*Confira os projetos dos filtros plotando as respostas em frequência dos filtros protótipo H(p) e filtro final H(s) de cada um dos exemplos. | ||
− | ;Aula | + | :* Comparar o uso das funções [http://www.mathworks.com/help/matlab/ref/plot.html plot], [http://www.mathworks.com/help/matlab/ref/stem.html stem], [http://www.mathworks.com/help/matlab/ref/fplot.html fplot], [http://www.mathworks.com/help/matlab/ref/semilogx.html semilogx], [http://www.mathworks.com/help/matlab/ref/semilogy.html semilogy]. |
+ | :* Estudar as funções auxiliares [http://www.mathworks.com/help/matlab/ref/logspace.html logspace], [http://www.mathworks.com/help/matlab/ref/linspace.html linspace], [http://www.mathworks.com/help/matlab/ref/hold.html hold], [http://www.mathworks.com/help/matlab/ref/grid.html grid], [http://www.mathworks.com/help/matlab/ref/subplot.html subplot], [http://www.mathworks.com/help/matlab/ref/legend.html legend], [http://www.mathworks.com/help/matlab/ref/xlabel.html xlabel], [http://www.mathworks.com/help/matlab/ref/ylabel.html ylabel], [http://www.mathworks.com/help/matlab/ref/title.html title], [http://www.mathworks.com/help/matlab/ref/text.html text]. | ||
+ | :*Funções de transformação de frequência: [http://www.mathworks.com/help/signal/ref/lp2lp.html lp2lp], [http://www.mathworks.com/help/signal/ref/lp2hp.html lp2hp],[http://www.mathworks.com/help/signal/ref/lp2bp.html lp2bp], [http://www.mathworks.com/help/signal/ref/lp2bs.html lp2bs]. | ||
+ | :*Ver em [http://www.mathworks.com/help/signal/ug/iir-filter-design.html IIR Filter Design], [http://www.mathworks.com/help/signal/ug/special-topics-in-iir-filter-design.html Special Topics in IIR Filter Design]. | ||
+ | :*Ver pag. 208 a 218 de <ref name="SHENOI2006"/> | ||
+ | |||
+ | ;Aula 17 e 18 (23 e 28 abr): | ||
+ | |||
*Filtros Digitais: Filtros IIR: transformações do tempo contínuo no tempo discreto | *Filtros Digitais: Filtros IIR: transformações do tempo contínuo no tempo discreto | ||
:*[[Transformação Invariante ao Impulso]] (pode ser usada apenas para filtros com forte atenuação em frequência altas, ex: passa-baixas e passa-faixa) | :*[[Transformação Invariante ao Impulso]] (pode ser usada apenas para filtros com forte atenuação em frequência altas, ex: passa-baixas e passa-faixa) | ||
:*[[Transformação Bilinear]] (pode ser usada para todos tipos de filtro) <math> s = 2fa \frac {z-1}{z+1} </math> | :*[[Transformação Bilinear]] (pode ser usada para todos tipos de filtro) <math> s = 2fa \frac {z-1}{z+1} </math> | ||
− | ::*Obter a especificação do filtro em angulo entre 0 e 1, onde 1 corresponde a metade da frequência de amostragem <math> (fa/2) </math> | + | ::*Obter a especificação do filtro em angulo <math> \theta </math> entre 0 e 1, onde 1 corresponde a metade da frequência de amostragem <math> (fa/2) </math>, ou também o angulo <math> \pi </math> |
::*Obter o valor desse angulo predistorcido <math> \lambda </math> para compensar a distorção na frequência causada pela transformação bilinear <math> \lambda= 2 tan \left (\frac{\theta \pi}{2} \right ) </math>, onde <math> \theta = \frac{f}{f_a/2} = \frac{\omega}{\omega_a /2} </math> | ::*Obter o valor desse angulo predistorcido <math> \lambda </math> para compensar a distorção na frequência causada pela transformação bilinear <math> \lambda= 2 tan \left (\frac{\theta \pi}{2} \right ) </math>, onde <math> \theta = \frac{f}{f_a/2} = \frac{\omega}{\omega_a /2} </math> | ||
Linha 782: | Linha 883: | ||
:*Ver pag. 219 a 229 de <ref name="SHENOI2006"/> | :*Ver pag. 219 a 229 de <ref name="SHENOI2006"/> | ||
:*Ver pag. 403 a 415 e 434 a 435 de <ref name="DINIZ2014"/> | :*Ver pag. 403 a 415 e 434 a 435 de <ref name="DINIZ2014"/> | ||
+ | :*Ver também a ferramenta [http://www.mathworks.com/help/signal/ref/fvtool.html fvtool], que facilita a análise dos filtros digitais. | ||
+ | |||
+ | {{collapse top| bg=lightyellow | Exemplo filtro digital BP IIR - transformação bilinear}} | ||
+ | |||
+ | Projete um filtro digital passa-banda IIR com <math> G_{topo} = 5 dB </math>, frequências de passagem <math> f_{p1} = 811 Hz </math> e <math> f_{p2} = 895,5 Hz </math> com ganho no mínimo de <math> G_p = 2 dB </math>, frequências de rejeição de <math> f_{s1} = 770 Hz </math> e <math> f_{s1} = 1209 Hz </math>, na qual o ganho deve ser inferior a <math> G_s = -25 dB </math> dB. Considere dois projetos para uma frequência de amostragem <math> f_{a1} = 4000 Hz </math> e também para <math> f_{a2} = 8000 Hz </math>. | ||
+ | |||
+ | *Dados de especificação do filtro passa-banda (band-pass - BP) | ||
+ | ::<math> f_{a} = </math> | ||
+ | ::<math> f_{s1} = </math> | ||
+ | ::<math> f_{p1} = </math> | ||
+ | ::<math> f_{p2} = </math> | ||
+ | ::<math> f_{s2} = </math> | ||
+ | ::<math> G_{topo(dB)} = </math> | ||
+ | ::<math> G_{p(dB)} = </math> | ||
+ | ::<math> G_{s(dB)} = </math> | ||
+ | |||
+ | *Dados do filtro digital <math> Hz(z) </math>, passa-banda (band-pass - BP) | ||
+ | ::<math> \theta_{s1} = </math> | ||
+ | ::<math> \theta_{p1} = </math> | ||
+ | ::<math> \theta_{p2} = </math> | ||
+ | ::<math> \theta_{s2} = </math> | ||
+ | ::<math> G_{topo(dB)} = </math> | ||
+ | ::<math> G_{p(dB)} = </math> | ||
+ | ::<math> G_{s(dB)} = </math> | ||
+ | |||
+ | *Dados do filtro analógico <math> Hs(s) </math>, passa-banda (band-pass - BP) | ||
+ | ::<math> \lambda_{s1} = </math> | ||
+ | ::<math> \lambda_{p1} = </math> | ||
+ | ::<math> \lambda_{p2} = </math> | ||
+ | ::<math> \lambda_{s2} = </math> | ||
+ | ::<math> \lambda_{0} = </math> | ||
+ | ::<math> B\lambda = </math> | ||
+ | ::<math> G_{topo(dB)} = </math> | ||
+ | ::<math> G_{p(dB)} = </math> | ||
+ | ::<math> G_{s(dB)} = </math> | ||
+ | |||
+ | *Especificações de <math> Hp(p) </math>, passa-baixas (lowpass-LP) protótipo | ||
+ | ::<math> \Omega_p = 1 </math> | ||
+ | ::<math> \Omega_s = </math> | ||
+ | ::<math> A_{0(dB)} = 0 </math> | ||
+ | ::<math> A_{p(dB)} = </math> | ||
+ | ::<math> A_{s(dB)} = </math> | ||
+ | |||
+ | *Determinação de <math> Hp(p) </math> | ||
+ | ::<math> n = </math> | ||
+ | ::<math> p_k = </math> | ||
+ | ::<math> z_k = </math> | ||
+ | ::<math> Dp(p) = </math> | ||
+ | ::<math> Np(p) = </math> | ||
+ | ::<math> Hp(p) = </math> | ||
+ | |||
+ | *Determinação de <math> Hs1(s) </math> substituindo <math>p=\frac{s}{\omega_p}</math> e corrigindo o ganho em <math> G_{topo} </math> | ||
+ | ::<math> Hs2(s) = Hs1(s) \cdot 10^{G_{topo}/20}</math> | ||
+ | |||
+ | *Obtida a função de transferência <math> Hs(s) = N(s)/D(s)</math> obtenha a resposta em frequência, substituindo <math>s=j*\omega</math> | ||
+ | |||
+ | *Determinação de <math> Hz(z) </math> substituindo <math>s=2\frac{s - 1}{s + 1}</math> | ||
+ | |||
+ | *Plote o gráfico de <math> |Hp(p)| </math>, <math> |Hs(s)| </math> e <math> |Hz(z)| </math>, indicando a máscara de especificação do filtro. | ||
+ | <center> [[Arquivo:IIRCheb2BP.png|800px]]</center> | ||
+ | {{collapse bottom}} | ||
+ | |||
− | ;Aula | + | ;Aula 19 (30 abr): |
:* Ver em [http://www.mathworks.com/help/signal/ug/iir-filter-design.html IIR Filter Design] | :* Ver em [http://www.mathworks.com/help/signal/ug/iir-filter-design.html IIR Filter Design] | ||
:* Uso das funções [http://www.mathworks.com/help/signal/ref/buttord.html buttord], [http://www.mathworks.com/help/signal/ref/butter.html butter], [http://www.mathworks.com/help/signal/ref/cheb1ord.html cheb1ord], [http://www.mathworks.com/help/signal/ref/cheby1.html cheby1], [http://www.mathworks.com/help/signal/ref/cheb2ord.html cheb2ord], [http://www.mathworks.com/help/signal/ref/cheby2.html cheby2], [http://www.mathworks.com/help/signal/ref/ellipord.html ellipord], [http://www.mathworks.com/help/signal/ref/ellip.html ellip] para o projeto de filtros IIR digitais (sem o parâmetro ''''s''''). | :* Uso das funções [http://www.mathworks.com/help/signal/ref/buttord.html buttord], [http://www.mathworks.com/help/signal/ref/butter.html butter], [http://www.mathworks.com/help/signal/ref/cheb1ord.html cheb1ord], [http://www.mathworks.com/help/signal/ref/cheby1.html cheby1], [http://www.mathworks.com/help/signal/ref/cheb2ord.html cheb2ord], [http://www.mathworks.com/help/signal/ref/cheby2.html cheby2], [http://www.mathworks.com/help/signal/ref/ellipord.html ellipord], [http://www.mathworks.com/help/signal/ref/ellip.html ellip] para o projeto de filtros IIR digitais (sem o parâmetro ''''s''''). | ||
Linha 828: | Linha 991: | ||
pretty(vpa(H(z),3)) | pretty(vpa(H(z),3)) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | {{collapse bottom}} | ||
+ | |||
+ | ;Dias 4, 7, 11 e 14 mai: | ||
+ | *Parada Pedagógica sem aulas de acordo com a resolução do colegiado do campus de São José. | ||
+ | |||
+ | ;Dia 18 mai: | ||
+ | |||
+ | *Retorno às ANPs, porém sem aula de acordo com mensagem recebida do chefe do DEPE. | ||
+ | *Foi solicitado que todos alunos se cadastram no workspace da disciplina no [https://join.slack.com/t/psd29007/shared_invite/zt-em6cn3u8-YnrrRCX1ENnu2XJMKZntmQ SLACK]. | ||
+ | *Foi solicitado que todos alunos respondam a uma sondagem sobre as ANPs [https://forms.gle/Y6kTj2tvJDJPCsHc7 Volta às aulas não presenciais em tempo de pandemia]. | ||
+ | |||
+ | *Resultado das outras enquetes: | ||
+ | :Você gostaria que a UC de PSD29007 tivesse continuidade através de ANPs durante a pandemia do corona virus? | ||
+ | :::sim | ||
+ | :::█████████████████████████ | 100% (11) | ||
+ | :::não | ||
+ | |||
+ | :A que horas começar as aulas? | ||
+ | :::7:30 | ||
+ | :::████████ | 33% (3) | ||
+ | :::7:45 | ||
+ | :::██████████████ | 56% (5) | ||
+ | :::8:00 | ||
+ | :::██ | 11% (1) | ||
+ | :::8:15 | ||
+ | ::: | 0% (0) | ||
+ | |||
+ | ===Unidade 3=== | ||
+ | {{collapse_top | Unidade 3 - Filtros FIR}} | ||
+ | |||
+ | ;Aula 20 (21 mai): 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 22 (09 out) | ||
+ | |||
+ | ;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}} | ||
+ | |||
+ | ===Unidade 4 - Realização de Filtros=== | ||
+ | {{collapse top| expand=true | Unidade 4 - Realização de Filtros}} | ||
+ | |||
+ | ; Aula 30 (2 jul): | ||
+ | |||
+ | *Realização de 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) &= b_0 + b_1 z^{-1} + b_2 z^{-2} + ... + b_N z^{-N} | ||
+ | \end{align}</math> | ||
+ | *Como <math> H(z) = X(z)/Y(z) </math> | ||
+ | :<math>\begin{align} | ||
+ | Y(z) &= b_0 X(z) + b_1 z^{-1}X(z) + b_2 z^{-2}X(z) + ... + b_N z^{-N}X(z) | ||
+ | \end{align}</math> | ||
+ | |||
+ | *Conhecendo a transformada Z inversa de <math> X(z) = Z\{x[n]\} </math>, e a propriedade do atraso <math> X(z) z^{-k} = Z\{x[n-k]\} </math>, o filtro FIR causal de ordem <math> N </math> 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 alguma das estruturas mostradas a seguir. | ||
+ | |||
+ | * A título de exemplo vamos considerar um filtro FIR de ordem 4, e para permitir uma notação de vetores com os índices do Matlab (maiores que 0), a função de de transferência e sua equação de diferenças são mostradas a seguir: | ||
+ | :<math>\begin{align} | ||
+ | H(z) &= {b(1) + b(2) z^{-1} + b(3) z^{-2} + b(4) z^{-3} + b(5) z^{-4}} \\ | ||
+ | Y(z) &= {b(1) + b(2) z^{-1} + b(3) z^{-2} + b(4) z^{-3} + b(5) z^{-4}} X(z) \\ | ||
+ | y[n] &= {b(1) x[n]+ b(2) x[n-1] + b(3) x[n-2] + b(4) x[n-3] + b(5) x[n-4]} | ||
+ | \end{align}</math> | ||
+ | ;Realização de filtros FIR na Forma Direta: | ||
+ | Para exemplificar as diferentes realizações utilizaremos com base um filtro de ordem 4 representado pela função de transferência | ||
+ | ::<math>\begin{align} | ||
+ | H (z) &= h(1) + h(2) z^{-1} + h(3) z^{-2} + h(4) z^{-3} + h(5) z^{-4} \\ | ||
+ | \end{align}</math> | ||
+ | |||
+ | * A implementação direta desse sistema discreto no tempo pode ser representada pelo modelo esquemático a seguir. | ||
+ | {{fig|4.1|Realização de filtros FIR na Forma Direta|FIR_FD_MathWorks.png|800 px|}} | ||
+ | |||
+ | ;Realização de filtros FIR na Forma Transposta: | ||
+ | ::*A transposição consiste na '''inversão do fluxo de todos os sinais''', substituição de '''nós de soma por derivações''' e as '''derivações por soma'''. A '''entrada e saída também devem ser invertidas'''. A realização da transposição não altera o sistema implementado. | ||
+ | {{fig|4.2|Realização de filtros FIR na Forma Transposta|FIR_FDT_MathWorks.png|800 px|}} | ||
+ | |||
+ | {{fig|4.3|Realização de filtros FIR na Forma Transposta|FIR_FDT2_MathWorks.png|800 px|}} | ||
+ | |||
+ | ;Realização de filtros FIR de fase linear: | ||
+ | Os filtros FIR de fase linear podem ser com coeficientes simétricos (tipo I e II) ou antissimétricos (tipo III e IV). | ||
+ | ;Tipo I - Simétrico de ordem par: | ||
+ | ::<math>\begin{align} | ||
+ | H (z) &= h(1) + h(2) z^{-1} + h(3) z^{-2} + h(4) z^{-3} + h(5) z^{-4} \\ | ||
+ | &= h(1)(1+z^{-4}) + h(2)(z^{-1}+z^{-3}) + h(3) z^{-2} | ||
+ | \end{align}</math> | ||
+ | {{fig|4.4|Realização de filtros FIR de fase linear Simétrico I|FIR_Sym2_MathWorks.png|600 px|}} | ||
+ | |||
+ | ;Tipo II - Simétrico de ordem impar: | ||
+ | ::<math>\begin{align} | ||
+ | H (z) &= h(1) + h(2) z^{-1} + h(3) z^{-2} + h(4) z^{-3} + h(5) z^{-4} + h(6) z^{-5} \\ | ||
+ | &= h(1)(1+z^{-5}) + h(2)(z^{-1}+z^{-4}) + h(3)(z^{-2}+ z^{-3}) | ||
+ | \end{align}</math> | ||
+ | |||
+ | {{fig|4.5|Realização de filtros FIR de fase linear Simétrico II|FIR_Sym1_MathWorks.png|600 px|}} | ||
+ | |||
+ | ;Tipo III - Antissimétrico de ordem par: | ||
+ | ::<math>\begin{align} | ||
+ | H (z) &= h(1) + h(2) z^{-1} + h(3) z^{-2} + h(4) z^{-3} + h(5) z^{-4} \\ | ||
+ | &= h(1)(1-z^{-4}) + h(2)(z^{-1}-z^{-3}) + 0 z^{-2} \\ | ||
+ | &= h(1)(1-z^{-4}) + h(2)(z^{-1}-z^{-3}) | ||
+ | \end{align}</math> | ||
+ | |||
+ | {{fig|4.6|Realização de filtros FIR de fase linear Antisimétrico III|FIR_AntiSym3_MathWorks.png|600 px|}} | ||
+ | |||
+ | ;Tipo IV - Antissimétrico de ordem impar: | ||
+ | ::<math>\begin{align} | ||
+ | H (z) &= h(1) + h(2) z^{-1} + h(3) z^{-2} + h(4) z^{-3} + h(5) z^{-4} + h(6) z^{-5} \\ | ||
+ | &= h(1)(1-z^{-5}) + h(2)(z^{-1}-z^{-4}) + h(3)(z^{-2}- z^{-3}) | ||
+ | \end{align}</math> | ||
+ | |||
+ | {{fig|4.7|Realização de filtros FIR de fase linear Antisimétrico IV|FIR_AntiSym4_MathWorks.png|600 px|}} | ||
+ | |||
+ | ;Uso do Matlab e Simulink | ||
+ | :* Realização de Filtros FIR [http://la.mathworks.com/help/dsp/ug/using-filter-designer.html usando o FDATool] | ||
+ | |||
+ | :* Estudar [http://www.mathworks.com/help/simulink/slref/discretefirfilter.html estrutura de filtros disrcetos FIR no Matlab], [http://www.mathworks.com/help/dsp/ref/filterrealizationwizard.html Filter Realization Wizard - Reference], [http://www.mathworks.com/help/dsp/ug/filter-realization-wizard.html Filter Realization Wizard - User Guide]. | ||
+ | :*Ver pag. 303 a 312 de <ref name="SHENOI2006"/>. | ||
+ | |||
+ | :* Realização de Filtros usando o comando [https://www.mathworks.com/help/dsp/ref/dsp.allpassfilter.realizemdl.html realizemdl],[http://www.mathworks.com/help/dsp/ref/realizemdl.html ] do MatLab | ||
+ | :* O que são os objetos de sistema usados pela função realizemdl? Ver [https://www.mathworks.com/help/matlab/matlab_prog/what-are-system-objects.html What Are System Objects?] e [ | ||
+ | <syntaxhighlight lang=matlab> | ||
+ | |||
+ | Fs = 30000; % Sampling Frequency | ||
+ | Fpass = 12000; % Passband Frequency | ||
+ | Fstop = 13000; % Stopband Frequency | ||
+ | Dpass = 0.01; % Passband Ripple | ||
+ | Dstop = 0.01; % Stopband Attenuation | ||
+ | flag = 'scale'; % Sampling Flag | ||
+ | |||
+ | % Calculate the order from the parameters using KAISERORD. | ||
+ | [N,Wn,BETA,TYPE] = kaiserord([Fpass Fstop]/(Fs/2), [1 0], [Dstop Dpass]); | ||
+ | |||
+ | % Calculate the coefficients using the FIR1 function. | ||
+ | b = fir1(N, Wn, TYPE, kaiser(N+1, BETA), flag); | ||
+ | |||
+ | hFIR = dsp.FIRFilter; | ||
+ | hFIR.Numerator = b; | ||
+ | |||
+ | % Para definir diretamente os coeficientes | ||
+ | realizemdl(hFIR) | ||
+ | |||
+ | % Para definir os coeficientes através de uma matriz de entrada | ||
+ | realizemdl(hFIR,'MapCoeffsToPorts','on'); | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | |||
+ | ; Aula 31 (6 jul): | ||
+ | :* Realização de filtros IIR de 2ª ordem: Forma Direta I e II, e Forma Transposta I e II. | ||
+ | :<math> H(z) = \frac{Y(z)}{X(z)}, H(z) = \frac{b_0 z^2 + b_1 z^1 + b_2}{z^2 + a_1 z^1 + a_2}, H(z) = \frac{b_0 + b_1 z^{-1} + b_2 z^{-2}}{1 + a_1 z^{-1} + a_2 z^{-2}} </math> | ||
+ | ::* Separando H(z) em dois blocos <math>\ H(z) = H_1(z) H_2(z) </math>, e obtendo o sinal intermediário W(z) ou Y(z) dependendo da ordem dos blocos. | ||
+ | {{fig|4.8|Separação do filtro IIR H(z) em H1(z) e H2(z)|H1_H2_MathWorks.png|600 px|}} | ||
+ | |||
+ | : Com o ordenamento dos blocos <math>\ H_1(z) </math> e <math>\ H_2(z) </math> em ordem direta teremos a Forma Direta I: | ||
+ | :<math> H_1(z) = \frac{W(z)}{X(z)} = b_0 + b_1 z^{-1} + b_2 z^{-2} </math> | ||
+ | :<math> H_2(z) = \frac{Y(z)}{W(z)} = \frac{1}{1 + a_1 z^{-1} + a_2 z^{-2}} </math> | ||
+ | :Podemos obter a realização de <math>\ H_1(z) </math> na forma direta. | ||
+ | :<math>\ W(z) = (b_0 + b_1 z^{-1} + b_2 z^{-2})X(z) </math> | ||
+ | :Para obter a realização de <math>\ H_2(z) </math> , é necessário reescrever a saída <math>\ Y(z) </math> em função de <math>\ W(z) </math> e das saídas anteriores <math>\ Y(z) z^{-1} </math> e <math>\ Y(z) z^{-2} </math>: | ||
+ | :<math>\ Y(z) = \frac{W(z)}{1 + a_1 z^{-1} + a_2 z^{-2}} </math> | ||
+ | :<math>\ Y(z)({1 + a_1 z^{-1} + a_2 z^{-2}}) = W(z) </math> | ||
+ | :<math>\ Y(z) = W(z) - a_1 Y(z) z^{-1} - a_2 Y(z) z^{-2} </math> | ||
+ | {{fig|4.9|Realização de filtros IIR na Forma Direta I|IIR_FD1_MathWorks.png|600 px|}} | ||
+ | |||
+ | : Com o ordenamento dos blocos <math>\ H_2(z) </math> e <math>\ H_1(z) </math> em ordem reversa teremos a Forma Direta II: | ||
+ | :<math> H_2(z) = \frac{V(z)}{X(z)} = \frac{1}{1 + a_1 z^{-1} + a_2 z^{-2}} </math> | ||
+ | :<math>\ V(z) = X(z) - a_1 V(z) z^{-1} - a_2 V(z) z^{-2} </math> | ||
+ | |||
+ | :<math> H_1(z) = \frac{Y(z)}{V(z)} = b_0 + b_1 z^{-1} + b_2 z^{-2} </math> | ||
+ | :<math>\ Y(z) = (b_0 + b_1 z^{-1} + b_2 z^{-2})V(z) </math> | ||
+ | {{fig|4.10|Realização de filtros IIR na Forma Direta II|IIR_FD2a_MathWorks.png|600 px|}} | ||
+ | |||
+ | :Considerando que os sinais no centro são idênticos podemos simplificar e obter a Forma Direta II (Canônica): | ||
+ | {{fig|4.11|Realização de filtros IIR na Forma Direta II Canônica |IIR_FD2b_MathWorks.png|600 px|}} | ||
+ | |||
+ | :Considerando as regras de transposição podemos obter a forma transposta I e II. A transposição consiste na inversão do fluxo de todos os sinais, substituição de nós de soma por derivações e as derivações por soma. A entrada e saída também devem ser invertidas. A realização da transposição não altera o sistema implementado. | ||
+ | {{fig|4.12|Realização de filtros IIR na Forma Transposta I|IIR_FT1_MathWorks.png|600 px|}} | ||
+ | |||
+ | {{fig|4.13|Realização de filtros IIR na Forma Transposta II|IIR_FT2_MathWorks.png|600 px|}} | ||
+ | |||
+ | :* Realização de filtros IIR de ordem maior que 2: Forma Direta I e II, Transposta I e II, Cascata, Paralela | ||
+ | ::*Os filtros IIR de ordem superior a 2 podem ser implementados nas FD I ou II e na FT I ou II. No entanto nessa configuração tendem a ficar instáveis ao terem os coeficientes quantizados, e também terem uma significativa alteração da resposta em frequência. Para reduzir esses problemas uma possível solução é a decomposição em filtros de 2ª ordem para serem associados na forma em Cascata ou Paralela. | ||
+ | |||
+ | ===Uso do Simulink para processamento de sinais=== | ||
+ | ;Aula 32 (9 jul) | ||
+ | * Uso dos blocos de simulação - Sources [https://www.mathworks.com/help/dsp/ref/sinewave.html sinewave/DSP], [https://www.mathworks.com/help/dsp/ref/chirp.html chirp/DSP], [https://www.mathworks.com/help/dsp/ref/randomsource.html random noise]. | ||
+ | * Uso dos blocos de simulação - Sink [https://www.mathworks.com/help/dsp/ref/timescope.html time scope] e [https://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/slref/vectorconcatenate.html matrix concatenate]. | ||
+ | *Veja também esse exemplo com a criação de um modelo com filtro passa-baixas e passa-altas com a análise no domínio do tempo (scope) [https://www.mathworks.com/help/dsp/ug/digital-filter-design-block.html Digital Filter Design Block], e outro exemplo com análise no domínio da frequência (Spectrum Analyser) [https://www.mathworks.com/help/dsp/ug/filter-frames-of-a-noisy-sine-wave-signal-in-simulink.html Filter Frames of a Noisy Sine Wave Signal in Simulink]. Uma opção para a visualização de mais de um sinal no DF em um único [Spectrum Analyser] é utilizar o bloco [Matrix Concatenate] conforme mostrado no modelo em [https://www.mathworks.com/help/dsp/ug/display-frequency-domain-data-in-spectrum-analyzer.html Display Frequency-Domain Data in Spectrum Analyzer]. | ||
+ | *Para entender a diferença entre processamento por amostra e processamento por quadro, leia o texto em ([https://www.mathworks.com/help/dsp/ug/sample-and-frame-based-concepts.html Sample- and Frame-Based Concepts]). | ||
+ | *Para converter entre fluxos de dados de diferentes taxas de frames, ou entre sample-based e frame-based, os blocos [https://www.mathworks.com/help/dsp/ref/buffer.html buffer] e [https://www.mathworks.com/help/dsp/ref/unbuffer.html unbuffer] devem ser utilizados. | ||
+ | *O Simulink possui muitos blocos que permitem a implementação d filtros. Para os filtros IIR e FIR recomendo o uso dos blocos [https://www.mathworks.com/help/dsp/ref/digitalfilterdesign.html Digital Filter Design], [https://www.mathworks.com/help/dsp/ref/filterrealizationwizard.html Filter Realization Wizard]. | ||
+ | |||
+ | ;Aula 34 (6 ago) | ||
+ | Para aprender o básico do Simulink recomendo assistir a estes vídeos da Mathworks | ||
+ | *[https://www.mathworks.com/videos/getting-started-with-simulink-102159.html Getting Started with Simulink -(duração 3m26s)], ensina como usar a biblioteca de blocos [library browser] e o editor de modelos [model editor]. É mostrado um exemplo inserindo um gerador senoidal, um bloco de ganho e um osciloscópio. Detalhes de como conectar os blocos e uso de vetores nos parâmetros da simulação são também mostrados. | ||
+ | *[https://www.mathworks.com/videos/introduction-to-simulink-81623.html?form_seq=conf840&elqsid=1430251491350&potential_use=Education&country_code=BR Simulink for New Users -(duração 54m07s)], esse vídeo ensina a usar o ambiente de simulação de forma mais efetiva, indo desde a criação de um modelo até o compartilhamento do modelo com uma equipe e criação de templates para uso como base de projetos. O uso de dashboard é mostrado de forma resumida. | ||
+ | |||
+ | * Construa o modelo de simulação mostrado na AE4 | ||
+ | |||
+ | |||
+ | ;Aula XX (13 ago): | ||
+ | *Agrupar todas as entradas em um subsistema (input_source) | ||
+ | *Agrupar as saídas (medições) em um subsistema (measuarements) | ||
+ | *Agrupar todos os blocos do sistema desenvolvido sob um subsistema (DUT). | ||
+ | :*ver: [https://www.mathworks.com/help/simulink/ug/creating-subsystems.html Create a Subsystem], [https://www.mathworks.com/help/simulink/ug/creating-subsystems.html#f4-7371 Create Subsystem from Selection], [https://www.mathworks.com/help/simulink/ug/navigate-subsystems-in-the-model-hierarchy.html Navigate Model Hierarchies] | ||
+ | :*pode interessar a vocês também os vídeos: [https://www.youtube.com/watch?v=7IUyTPQpQwc], [https://www.youtube.com/watch?v=3GK7k_PFEls] | ||
+ | |||
+ | |||
+ | ;Aula XX (17 ago) | ||
+ | *Passos adicionais para converter de Matlab/Simulink para HDL. | ||
+ | :*Ver [https://www.mathworks.com/help/hdlcoder/ug/guidelines-for-checking-model-compatibility.html Basic Guidelines for Modeling HDL Algorithm in Simulink] | ||
+ | :*Ver [https://www.mathworks.com/help/hdlcoder/ug/guidelines-for-model-setup-and-checking-model-compatibility.html Guidelines for Model Setup and Checking Model Compatibility] | ||
+ | :*Ver [https://www.mathworks.com/help/hdlcoder/ug/basic-guidelines-for-blocks-usage.html Modeling with Simulink, Stateflow, and MATLAB Function Blocks] | ||
+ | :*Executar o hdlsetup('nome_modelo') para configurar o modelo antes da conversão. Se quiser customizar o comando edite o arquivo hdlsetup.m e salve com myhdlsetup.m | ||
+ | edit hdlsetup.m | ||
+ | |||
+ | *Experimentar com esse circuito contador até M. | ||
+ | :*[https://www.mathworks.com/help/hdlcoder/gs/create-hdl-compatible-simulink-model.html Create Simulink Model for HDL Code Generation] | ||
+ | |||
+ | {{fig|5.1|Divisão HDL_DUT e testbench|ContadorHDLCoder.png|800 px|}} | ||
+ | |||
+ | {{fig|5.2|Subsistema HDL_DUT|DUT_ContadorHDLCoder.png|800 px|}} | ||
+ | *'''NOTA''': Para funcionar a simulação é importante que o solver esteja setado para discreto, pois o contador é um sistema discreto pois utiliza os blocos '''Delay'''. Antes de simular aplique o hdlsetup ao modelo. | ||
+ | hdlsetup('nome_modelo') | ||
+ | *A invés de fixar o [Output data type] dos blocos [Constant] em uint32 conforme mostrado na página da mathworks, escolha um tipo de dado da entrada count_threshold, e deixe os blocos internos como [Inherit: Inherit via back propagation], para que eles se ajustem conforme a necessidade. | ||
+ | :*Verifique os códigos VHDL gerados quando é utilizado double, int8 e uint32. | ||
+ | *Para gerar o '''código VHDL''' pode se digitado '''makehdl('HDL_DUT')''', ou também usar a interface gráfica, com clique-direito sobre o bloco HDL_DUT e selecionando '''[HDL Code > Generate HDL for Subsystem]''', ou ainda pelo menu '''[Code > HDL Code > Generate HDL]'''. | ||
+ | *Para que o testbench seja separado em arquivos do tipo .dat, em menu '''[Code > HDL Workflow Advisor]''', no item '''3.1.3 Set Testbench Option''', marque '''[x] Multi-file test bench''' e '''[x] Use file I/O for read/write bench data'''. | ||
+ | *Para gerar o código VHDL para o '''testbench''' usar a interface gráfica pelo menu '''Code > HDL Code > Generate testbench]'''. | ||
+ | *Para fazer a simulação do sistema em VHDL, abra o Modelsim e vá para a pasta do projeto. | ||
+ | cd hdl_prj/hdlsrc/hdlcoder_simple_up_counter/ | ||
+ | *Compile os arquivos do projeto | ||
+ | do HDL_DUT_compile.do | ||
+ | *Compile os arquivos do testbench | ||
+ | do HDL_DUT_tb_compile.do | ||
+ | *Realize a simulação automática do contador. | ||
+ | do HDL_DUT_tb_sim.do | ||
+ | |||
+ | {{fig|5.3|Subsistema HDL_DUT simulado no Simulink|DUT_ContadorSimulink.png|800 px|}} | ||
+ | |||
+ | {{fig|5.4|Subsistema HDL_DUT simulado no Modelsim|DUT_ContadorModelsim.png|800 px|}} | ||
+ | |||
+ | *Observe que o sinal simulado em VHDL é identico ao sinal simulado pelo Simulink, além disso observe que a frase abaixo aparece no console confirmando que o sistema HDL_DUT está correto. O próximo passo seria usar o VDHL para implementar o sistema. | ||
+ | |||
+ | ** Note: **************TEST COMPLETED (PASSED)************** | ||
+ | |||
+ | ;Aula XX (20 ago) | ||
+ | *Filtros Digitais: Quantização | ||
+ | *Como criar dados de ponto fixo no Matlab [https://www.mathworks.com/help/fixedpoint/gs/fixed-point-basics.html Create Fixed-Point Data in MATLAB], [https://www.mathworks.com/help/simulink/ug/fixed-point-numbers.html Fixed-Point Numbers] | ||
+ | |||
+ | |||
+ | a_sfix = fi(0.1) % 0.1 representado com signed, 16 bits no total com os bits de fração determinados para representar o sinal | ||
+ | b_sfix = fi(-0.1) % 0.1 representado com signed, 16 bits no total com 10 bits de fração | ||
+ | c_sfix = fi(0.1,1,5,4) % 0.1 representado com signed, 5 bits no total com 4 bits de fração | ||
+ | d_sfix = fi(-0.1,1,5,4) % -0.1 representado com signed, 5 bits no total com 4 bits de fração | ||
+ | e_sfix = fi(-0.1,0,5,4) % -0.1 representado com unsigned, 5 bits no total com 4 bits de fração => ERRO | ||
+ | a_float = 0.1 | ||
+ | b_float = -0.1 | ||
+ | fi(0:0.3:10,0,8,0) | ||
+ | Para observar a precisão da representação mude o formato numérico para | ||
+ | format long | ||
+ | format hex | ||
+ | format short % formato default | ||
+ | |||
+ | Experimente com outros números como (10.3 3.25 pi e) | ||
+ | |||
+ | *Caso o dado tem um outro formato, é possível usar o quantizer-quantize para converter o dado para ponto fixo (ou outro formato) | ||
+ | *Além disso, os números de ponto fixo podem ser representado com sinal (fixed) ou sem sinal (ufixed) | ||
+ | <pre> | ||
+ | DataMode | ||
+ | Type of arithmetic used in quantization. This property can have the following values: | ||
+ | |||
+ | fixed — Signed fixed-point calculations | ||
+ | |||
+ | float — User-specified floating-point calculations | ||
+ | |||
+ | double — Double-precision floating-point calculations | ||
+ | |||
+ | single — Single-precision floating-point calculations | ||
+ | |||
+ | ufixed — Unsigned fixed-point calculations | ||
+ | |||
+ | The default value of this property is fixed. | ||
+ | </pre> | ||
+ | |||
+ | :*Ver [https://www.mathworks.com/help/fixedpoint/ref/quantize_method.html quantize method] e [https://www.mathworks.com/help/fixedpoint/ref/quantizer-object-properties.html quantizer Object Properties] | ||
+ | <pre> | ||
+ | v = -2:0.3:2 | ||
+ | q = quantizer('fixed', [5 4]) | ||
+ | quantize(q,0.1) | ||
+ | quantize(q,pi) | ||
+ | quantize(q,v) | ||
+ | qu = quantizer('ufixed', [16 4]) | ||
+ | quantize(qu,-0.1) | ||
+ | quantize(qu,-pi) | ||
+ | quantize(qu,v) | ||
+ | </pre> | ||
+ | Note neste caso que a quantidade de bits total e número de casas fracionárias limitam a representação dos números. | ||
+ | range(q) | ||
+ | |||
+ | |||
+ | Para observar os bits que representam o número pode ser usada a função num2bin e num2hex. Note que o format hex mostra o valor correspondente no padrão IEEE 754 (floating point) | ||
+ | |||
+ | <pre> | ||
+ | x=-0.2; | ||
+ | % Word length = 8, fraction length = 7 | ||
+ | q=quantizer([8,7]) | ||
+ | range(q) | ||
+ | xq=quantize(q,x); | ||
+ | binxq=num2bin(q,xq); | ||
+ | % Word length = 16, fraction length = 10 | ||
+ | q1=quantizer([160 150]) | ||
+ | range(q1) | ||
+ | xq1 = quantize(q1,x); | ||
+ | binxq1=num2bin(q1,xq1); | ||
+ | hexxq1=num2hex(q1,xq1); | ||
+ | x | ||
+ | xq | ||
+ | xq1 | ||
+ | disp(['x=',num2str(x), ',xq=',num2str(xq), ',bin=', binxq, ',xq1=',num2str(xq1),',bin=', binxq1 ]) | ||
+ | format hex | ||
+ | xq1 | ||
+ | hexxq1 | ||
+ | </pre> | ||
+ | A precisão da representação numérica também varia conforme o numero de bits usados para a parte fracionária. Para saber a precisão (valor correspondente ao bit menos significativo) use a função eps(q). | ||
+ | <pre> | ||
+ | q=quantizer('ufixed', [4,1]); | ||
+ | %q=quantizer([4,1],'fixed') | ||
+ | % q=quantizer([4,0],'ufixed') | ||
+ | % q=quantizer([4,0],'fixed') | ||
+ | % q=quantizer([4,-1],'ufixed') | ||
+ | % q=quantizer([4,-1],'fixed') | ||
+ | tostring(q) | ||
+ | range(q) | ||
+ | eps(q) | ||
+ | xq=quantize(q,x); | ||
+ | binxq=num2bin(q,xq); | ||
+ | xq | ||
+ | binxq | ||
+ | </pre> | ||
+ | |||
+ | *Na quantização um efeito que deve ser controlado é o overflow, no qual o valor a ser representado é superior ao possível para a quantidade de bits escolhida. Existe o modo de saturação e o modo de wrap. | ||
+ | <pre> | ||
+ | q=quantizer([3 0],'fixed','round','saturate'); | ||
+ | quantize(q,0:0.5:16) | ||
+ | q=quantizer([3 0],'ufixed','round','saturate'); | ||
+ | quantize(q,0:0.5:16) | ||
+ | q=quantizer([3 0],'fixed','round','wrap'); | ||
+ | quantize(q,0:0.5:16) | ||
+ | q=quantizer([3 0],'ufixed','round','wrap'); | ||
+ | quantize(q,0:0.5:16) | ||
+ | </pre> | ||
+ | Note a diferença entre estes 4 quantizadores acima. | ||
+ | |||
+ | ;Aula XX (24 ago) | ||
+ | *No Simulink os dados podem ser representados pelos seguintes formatos [https://www.mathworks.com/help/simulink/ug/data-types-supported-by-simulink.html Data Types Supported by Simulink]. Mas com a Toolbox fixed-point, os dados podem ser especificados também como ponto fixo, o que possibilita a geração de hardware e software usando a representação em ponto fixo. Veja alguns detalhes em [https://www.mathworks.com/help/simulink/ug/specify-data-types-using-data-type-assistant.html#bsnnyna-1 Specify Data Types Using Data Type Assistant - Specifying a Fixed-Point Data Type]. | ||
+ | |||
+ | *O recomendado é realizar o seguinte fluxo de projeto. [https://www.mathworks.com/help/fixedpoint/conversion-using-simulation-data.html Convert to Fixed Point]. | ||
+ | |||
+ | *O bloco [https://www.mathworks.com/help/simulink/slref/datatypeconversion.html Data Type Conversion] permite converter entre tipos de dados e agiliza o processo [https://www.mathworks.com/help/simulink/slref/convert-data-types-in-simulink-models.html Convert Data Types in Simulink Models]. | ||
+ | |||
+ | *Como a conversão do tipo de dado de ponto flutuante 64 bits (double) para ponto fixo, resulta na quantização dos coeficientes do filtro, é necessário fazer uma nova análise dos filtros projetados para verificar qual é o comportamento dos mesmos com esses coeficientes, pois dependendo da quantização um filtro pode não atender mais a especificação original. No caso dos IIR pode até se tornar instável. | ||
+ | No caso dos filtros FIR, escolha uma quantidade de bits suficiente para manter a resposta de frequência especificada, ou modifique o filtro visando reduzir o número de bits necessários. No caso dos IIR, utiliza uma estrutura de seções de segunda ordem (SOS) para a implementação dos filtros. | ||
+ | *Toda a análise acima pode ser feita diretamente com o FDAtool, e os filtros realizados depois de quantizados podem ser exportados para o Simulink, conforme será visto em aula. | ||
+ | |||
+ | ;Ver também: | ||
+ | :*[https://www.mathworks.com/help/simulink/ug/benefits-of-using-fixed-point-hardware.html Benefits of Using Fixed-Point Hardware] | ||
+ | :*[https://www.mathworks.com/help/fixedpoint/ug/precision-and-range.html#f6481 Precision and Range], [https://www.mathworks.com/help/simulink/ug/scaling-precision-range-quantization.html Scaling, Precision, and Range] | ||
+ | :*[https://www.mathworks.com/help/dsp/ref/fixed-point-filter-properties.html Fixed-Point Filter Properties] | ||
+ | :*[https://www.mathworks.com/help/dsp/ug/use-fdatool-with-dsp-system-toolbox-software.html?searchHighlight=fdatool&s_tid=doc_srchtitle Use Filter Designer with DSP System Toolbox Software] | ||
+ | :*[https://www.mathworks.com/help/fixedpoint/ug/tutorial-steps.html Convert Floating-Point Model to Fixed Point] | ||
+ | :*[http://www.clivemaxfield.com/diycalculator/sp-round.shtml Tipos de arredondamento], [https://www.eetimes.com/document.asp?doc_id=1274485 An introduction to different rounding algorithms] | ||
+ | *Para interpretar o valor numérico de dados em ponto flutuante use esse [https://baseconvert.com/ieee-754-floating-point conversor IEEE 754]. | ||
+ | |||
+ | ====ATUAL==== | ||
+ | ;Aula XX (27 ago) | ||
+ | *Neste dia foi usado um vídeo gravado mostrando como é feito o passo a passo de um projeto de filtro cujos coeficientes já foram determinados, até a descrição do hardware em HDL. | ||
+ | |||
+ | ====NEXT==== | ||
+ | ;Aula PF (31 ago) | ||
+ | *Definição dos requisitos e prazos do projeto final a ser realizado em equipes (ou individual). | ||
+ | * Neste dia todos alunos deverão estar on line com o vídeo ligado (pode ser a partir do celular). | ||
+ | * Vocês poderão tirar suas dúvidas sobre o projeto neste dia. | ||
+ | * Depois desse encontro não teremos mais encontros síncronos, apenas o atendimento, que será com hora marcada pelo grupo do SLACK nos dias de atendimento paralelo ou no horário das aulas. | ||
{{collapse bottom}} | {{collapse bottom}} | ||
==Avaliações== | ==Avaliações== | ||
* Atividades extraclasse | * Atividades extraclasse | ||
+ | {{collapse top | AE1 - Cálculo de uma DFT de comprimento 8}} | ||
;AE1 - Cálculo de uma DFT de comprimento 8. | ;AE1 - Cálculo de uma DFT de comprimento 8. | ||
* Determine a transformada discreta de Fourier X(w) a partir da sequencia discreta x(n) indicada na tabela abaixo. | * Determine a transformada discreta de Fourier X(w) a partir da sequencia discreta x(n) indicada na tabela abaixo. | ||
Linha 842: | Linha 2 166: | ||
* Compare os resultados obtidos para de X(k) obtido com os dois cálculos. | * Compare os resultados obtidos para de X(k) obtido com os dois cálculos. | ||
* Poste no Moodle a folha de cálculos (digitalize usando scanner ou smartphone). | * Poste no Moodle a folha de cálculos (digitalize usando scanner ou smartphone). | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | {{collapse top | AE2 - Projeto de Filtro Analógico e Filtro Digital IIR (Entrega e prazos ver Moodle)}} | ||
+ | A primeira parte dessa avaliação visa verificar se você conhece a metodologia de projeto de filtros analógicos: (a) projeto de um filtro protótipo analógico passa-baixas H(p); (b) transformação em frequência do filtro H(p) -> H(s), obtendo o filtro LP, HP conforme o tipo de filtro desejado; Nesta avaliação é solicitado que cada equipe realize o projeto de 2 filtros analógicos. Na segunda parte é solicitado que os filtros BP e BS sejam projetados seguindo as etapas (a) projeto de um filtro protótipo analógico passa-baixas H(p); (b) transformação em frequência do filtro H(p) -> H(s) (c) conversão do filtro analógico H(s) em digital H(z), usando a transformação bilinear. Note que nestes casos a frequência de amostragem do sinal e sistema é fundamental no projeto. | ||
+ | |||
+ | {| class="wikitable" border="1" cellpadding="3" cellspacing="0" style="text-align:left; font-size:100%" bgcolor="#efefef" | ||
+ | ! scope="col" width=12% align="left"| Equipe | ||
+ | ! scope="col" width=22% align="center"| Filtro 1 | ||
+ | ! scope="col" width=22% align="center"| Filtro 2 | ||
+ | ! scope="col" width=22% align="center"| Filtro 3 | ||
+ | ! scope="col" width=22% align="center"| Filtro 4 | ||
+ | |- | ||
+ | | Equipe 1 | ||
+ | | LP - (<math> f_1 </math> = 200 Hz; <math> f_2 </math> = 1000 Hz, <math> A_p </math> = 3 dB, <math> A_s </math> = 30 dB, <math> G_{topo} </math>= 10 dB, Butterworth) | ||
+ | | HP - (<math> f_1 </math> = 200 Hz; <math> f_2 </math> = 1000 Hz, <math> A_p </math> = 1 dB, <math> A_s </math> = 30 dB, <math> G_{topo} </math> = -10 dB, Chebyshev 1) | ||
+ | | BP - (<math> f_a </math> = 44100 Hz; <math> f_1 </math> = 1200 Hz; <math> f_2 </math> = 2000 Hz, <math> f_3 </math> = 3000 Hz; <math> f_4 </math> = 3800 Hz, <math> A_p </math> = 1 dB, <math> A_s </math> = 35 dB, <math> G_{topo} </math> = 5 dB ) | ||
+ | | BS - (<math> f_a </math> = 44100 Hz; <math> f_1 </math> = 1200 Hz; <math> f_2 </math> = 2000 Hz, <math> f_3 </math> = 3000 Hz; <math> f_4 </math> = 3800 Hz, <math> A_p </math> = 1 dB, <math> A_s </math> = 35 dB, <math> G_{topo} </math> = 5 dB ) | ||
+ | |- | ||
+ | | Equipe 2 | ||
+ | | LP - (<math> f_1 </math> = 40 Hz; <math> f_2 </math> = 200 Hz, <math> A_p </math> = 3 dB, <math> A_s </math> = 20 dB, <math> G_{topo} </math> = 5 dB, Butterworth) | ||
+ | | HP - (<math> f_1 </math> = 40 Hz; <math> f_2 </math> = 200 Hz, <math> A_p </math> = 1 dB, <math> A_s </math> = 50 dB, <math> G_{tTopo} </math> = 10 dB, Chebyshev 1) | ||
+ | | BP - (<math> f_a </math> = 8000 Hz; <math> f_1 </math> = 1200 Hz; <math> f_2 </math> = 2000 Hz, <math> f_3 </math> = 3000 Hz; <math> f_4 </math> = 3800 Hz, <math> A_p </math> = 3 dB, <math> A_s </math> = 40 dB, <math> G_{topo} </math> = 20 dB ) | ||
+ | | BS - (<math> f_a </math> = 8000 Hz; <math> f_1 </math> = 1200 Hz; <math> f_2 </math> = 2000 Hz, <math> f_3 </math> = 3000 Hz; <math> f_4 </math> = 3800 Hz, <math> A_p </math> = 3 dB, <math> A_s </math> = 40 dB, <math> G_{topo} </math> = 20 dB ) | ||
+ | |- | ||
+ | | Equipe 3 | ||
+ | | LP - (<math> f_1 </math> = 20 Hz; <math> f_2 </math> = 100 Hz, <math> A_p </math> = 3 dB, <math> A_s </math> = 25 dB, <math> G_{topo} </math> = 1 dB, Butterworth) | ||
+ | | HP - (<math> f_1 </math> = 20 Hz; <math> f_2 </math> = 100 Hz, <math> A_p </math> = 2 dB, <math> A_s </math> = 60 dB, <math> G_{topo} </math> = -20 dB, Chebyshev 1) | ||
+ | | BP - (<math> f_a </math> = 1000 Hz; <math> f_1 </math> = 150 Hz; <math> f_2 </math> = 200 Hz, <math> f_3 </math> = 300 Hz; <math> f_4 </math> = 380 Hz, <math> A_p </math> = 1 dB, <math> A_s </math> = 40 dB, <math> G_{topo} </math> = 10 dB ) | ||
+ | | BS - (<math> f_a </math> = 1000 Hz; <math> f_1 </math> = 150 Hz; <math> f_2 </math> = 200 Hz, <math> f_3 </math> = 300 Hz; <math> f_4 </math> = 380 Hz, <math> A_p </math> = 1 dB, <math> A_s </math> = 40 dB, <math> G_{topo} </math> = 10 dB ) | ||
+ | |- | ||
+ | | Equipe 4 | ||
+ | | LP - (<math> f_1 </math> = 10 Hz; <math> f_2 </math> = 60 Hz, <math> A_p </math> = 3 dB, <math> A_s </math> = 35 dB, <math> G_{topo} </math> = -5 dB, Butterworth) | ||
+ | | HP - (<math> f_1 </math> = 10 Hz; <math> f_2 </math> = 60 Hz, <math> A_p </math> = 2 dB, <math> A_s </math> = 45 dB, <math> G_{topo} </math> = 10 dB, Chebyshev 1) | ||
+ | | BP - (<math> f_a </math> = 2000 Hz; <math> f_1 </math> = 150 Hz; <math> f_2 </math> = 200 Hz, <math> f_3 </math> = 300 Hz; <math> f_4 </math> = 380 Hz, <math> A_p </math> = 0.5 dB, <math> A_s </math> = 30 dB, <math> G_{topo} </math> = 0 dB ) | ||
+ | | BS - (<math> f_a </math> = 2000 Hz; <math> f_1 </math> = 150 Hz; <math> f_2 </math> = 200 Hz, <math> f_3 </math> = 300 Hz; <math> f_4 </math> = 380 Hz, <math> A_p </math> = 0.5 dB, <math> A_s </math> = 30 dB, <math> G_{topo} </math> = 0 dB ) | ||
+ | |- | ||
+ | | Equipe 5 | ||
+ | | LP - (<math> f_1 </math> = 100 Hz; <math> f_2 </math> = 500 Hz, <math> A_p </math> = 3 dB, <math> A_s </math> = 40 dB, <math> G_{topo} </math> = -10 dB, Butterworth) | ||
+ | | HP - (<math> f_1 </math> = 100 Hz; <math> f_2 </math> = 500 Hz, <math> A_p </math> = 3 dB, <math> A_s </math> = 50 dB, <math> G_{topo} </math> = 10 dB, Chebyshev 1) | ||
+ | | BP - (<math> f_a </math> = 4000 Hz; <math> f_1 </math> = 400 Hz; <math> f_2 </math> = 800 Hz, <math> f_3 </math> = 1000 Hz; <math> f_4 </math> = 1400 Hz, <math> A_p </math> = 3 dB, <math> A_s </math> = 40 dB, <math> G_{topo} </math> = -10 dB ) | ||
+ | | BS - (<math> f_a </math> = 4000 Hz; <math> f_1 </math> = 400 Hz; <math> f_2 </math> = 800 Hz, <math> f_3 </math> = 1000 Hz; <math> f_4 </math> = 1400 Hz, <math> A_p </math> = 3 dB, <math> A_s </math> = 40 dB, <math> G_{topo} </math> = -10 dB ) | ||
+ | |||
+ | |} | ||
+ | |||
+ | :onde: | ||
+ | :: <math> f_N </math> - são as "N" frequência de especificação do filtro dadas em Hertz (kHz ou MHz); | ||
+ | ::LP (''Low Pass'')- Passa Baixa <math> f_p = f_1 </math> e <math> f_s = f_2 </math>. | ||
+ | ::HP (''High Pass'')- Passa Altas <math> f_s = f_1 </math> e <math> f_p = f_2 </math>. | ||
+ | ::BP (''Band Pass'')- Passa Faixa <math> f_{s1} = f_1 </math> e <math> f_{p1} = f_2 </math>, <math> f_{p2} = f_3 </math> e <math> f_{s2} = f_4 </math>. | ||
+ | ::BS (''Band Stop'')- Rejeita Faixa <math> f_{p1} = f_1 </math> e <math> f_{s1} = f_2 </math>, <math> f_{s2} = f_3 </math> e <math> f_{p2} = f_4 </math>. | ||
+ | :: <math> f_a </math> - frequência de amostragem; <math> f_p </math> - frequência de passagem; <math> f_s </math> - frequência de rejeição (''stopband''), <math> A_p </math> - Atenuação máxima na banda de passagem (dB), <math> A_s </math> - Atenuação mínima na banda de rejeição (dB) (''stopband''), <math> G_{topo} </math> - Ganho na banda de passagem (dB). | ||
+ | :* Os filtros LP e HP devem ser realizados utilizando a aproximação de '''Butterworth''' ou '''Chebyshev tipo 1''' (devendo ser todos os calculados efetuados a partir das equações). | ||
+ | :* Os filtros BP e BS devem ser realizados utilizando a aproximação de '''Chebyshev tipo 2''' ou '''Euler''' (podendo ser calculada a função H(p) a partir das funções do Matlab. | ||
+ | :* Para todos os filtros nos resultados deve ser indicada a ordem do filtro, o valor de polos e zeros, e as equações de H(p), H(s). No caso dos filtros 3 e 4 apresente também os resultados para H(z). | ||
+ | :* Deve ser apresentado de forma gráfica a resposta em frequência dos filtros (ganho em dB e fase) dos filtros (a) protótipo H(p), (b) Filtro analógico H(s). No caso dos filtros 3 e 4 apresente também os resultados para H(z). | ||
+ | :* Utilize uma mascara com as especificações para mostrar que os filtros atendem a especificação original (ver [[Fazer mascara de um filtro no Matlab]]). | ||
+ | :* Apresente o diagrama dos pólos e zeros dos filtros H(p), H(s). No caso dos filtros 3 e 4 apresente também o diagrama para H(z). | ||
+ | :* Utilize a mesma escala em dB para os gráficos de cada filtro. Nas abcissas utilize uma escala em Hz (kHz ou MHz). Utilize uma mascara com cor diferenciada para indicar claramente a especificação do filtro, e crie um segundo gráfico mostrando claramente a banda de passagem. | ||
+ | |||
+ | :* Escreva um relatório técnico em PDF mostrando os resultados obtidos e comentando os resultados obtidos. Não é necessário apresentar a teoria utilizado para o projeto, mas todos os cálculos devem estar documentados. | ||
+ | :* Envie o relatório em pdf ou imagem dos cálculos e eventuais arquivos ".m" utilizados na plataforma Moodle. | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | {{collapse top | AE3 - Projeto de Filtro Digital FIR (Entrega e prazos ver Moodle)}} | ||
+ | Essa avaliação visa verificar se você conhece a metodologia de projeto de filtros digital FIR com janelas fixas, janelas ajustáveis e usando o algoritmo de Park-McCleallan (PM). Nesta avaliação cada equipe deverá realizar o projeto de 2 filtros analógicos usando janela fixa e ajustáveis e todos os 4 filtros usando o PM. Alguns filtros foram modificados em relação a atividade anterior. | ||
+ | |||
+ | {| class="wikitable" border="1" cellpadding="3" cellspacing="0" style="text-align:left; font-size:100%" bgcolor="#efefef" | ||
+ | ! scope="col" width=12% align="left"| Equipe | ||
+ | ! scope="col" width=22% align="center"| Filtro 1 | ||
+ | ! scope="col" width=22% align="center"| Filtro 2 | ||
+ | ! scope="col" width=22% align="center"| Filtro 3 | ||
+ | ! scope="col" width=22% align="center"| Filtro 4 | ||
+ | |- | ||
+ | | Equipe 1 | ||
+ | | LP - (<math> f_a </math> = 4000 Hz; <math> f_1 </math> = 400 Hz; <math> f_2 </math> = 1000 Hz; <math> A_p </math> = 2 dB; <math> A_s </math> = 50 dB; <math> G_{topo} </math> = 10 dB ; filtro PM) | ||
+ | | HP - (<math> f_a </math> = 4000 Hz; <math> f_1 </math> = 400 Hz; <math> f_2 </math> = 1000 Hz; <math> A_p </math> = 2 dB; <math> A_s </math> = 50 dB; <math> G_{topo} </math> = -10 dB; janela fixa, janela ajustável e filtro PM) | ||
+ | | BP - (<math> f_a </math> = 44100 Hz; <math> f_1 </math> = 1200 Hz; <math> f_2 </math> = 2000 Hz; <math> f_3 </math> = 3000 Hz; <math> f_4 </math> = 3800 Hz; <math> A_p </math> = 1 dB; <math> A_s </math> = 35 dB; <math> G_{topo} </math> = 5 dB; janela fixa, janela ajustável e filtro PM ) | ||
+ | | BS - (<math> f_a </math> = 44100 Hz; <math> f_1 </math> = 1200 Hz; <math> f_2 </math> = 2000 Hz; <math> f_3 </math> = 3000 Hz; <math> f_4 </math> = 3800 Hz; <math> A_p </math> = 1 dB; <math> A_s </math> = 35 dB; <math> G_{topo} </math> = 5 dB; filtro PM ) | ||
+ | |- | ||
+ | | Equipe 2 | ||
+ | | LP - (<math> f_a </math> = 8000 Hz; <math> f_1 </math> = 600 Hz; <math> f_2 </math> = 2000 Hz; <math> A_p </math> = 1 dB; <math> A_s </math> = 45 dB; <math> G_{topo} </math> = 5 dB; janela fixa, janela ajustável e filtro PM) | ||
+ | | HP - (<math> f_a </math> = 8000 Hz; <math> f_1 </math> = 600 Hz; <math> f_2 </math> = 2000 Hz; <math> A_p </math> = 1 dB; <math> A_s </math> = 45 dB; <math> G_{tTopo} </math> = 10 dB; filtro PM) | ||
+ | | BP - (<math> f_a </math> = 8000 Hz; <math> f_1 </math> = 1200 Hz; <math> f_2 </math> = 2000 Hz; <math> f_3 </math> = 3000 Hz; <math> f_4 </math> = 3800 Hz; <math> A_p </math> = 3 dB; <math> A_s </math> = 40 dB; <math> G_{topo} </math> = 20 dB; janela fixa, janela ajustável e filtro PM ) | ||
+ | | BS - (<math> f_a </math> = 8000 Hz; <math> f_1 </math> = 1200 Hz; <math> f_2 </math> = 2000 Hz, <math> f_3 </math> = 3000 Hz; <math> f_4 </math> = 3800 Hz, <math> A_p </math> = 3 dB, <math> A_s </math> = 40 dB, <math> G_{topo} </math> = 20 dB; filtro PM) | ||
+ | |- | ||
+ | | Equipe 3 | ||
+ | | LP - (<math> f_a </math> = 500 Hz; <math> f_1 </math> = 20 Hz; <math> f_2 </math> = 100 Hz, <math> A_p </math> = 3 dB, <math> A_s </math> = 35 dB, <math> G_{topo} </math> = 1 dB; janela fixa, janela ajustável e filtro PM) | ||
+ | | HP - (<math> f_a </math> = 500 Hz; <math> f_1 </math> = 20 Hz; <math> f_2 </math> = 100 Hz, <math> A_p </math> = 3 dB, <math> A_s </math> = 35 dB, <math> G_{topo} </math> = -20 dB; filtro PM) | ||
+ | | BP - (<math> f_a </math> = 1000 Hz; <math> f_1 </math> = 150 Hz; <math> f_2 </math> = 200 Hz, <math> f_3 </math> = 300 Hz; <math> f_4 </math> = 380 Hz, <math> A_p </math> = 1 dB, <math> A_s </math> = 40 dB, <math> G_{topo} </math> = 10 dB; janela fixa, janela ajustável e filtro PM ) | ||
+ | | BS - (<math> f_a </math> = 1000 Hz; <math> f_1 </math> = 150 Hz; <math> f_2 </math> = 200 Hz, <math> f_3 </math> = 300 Hz; <math> f_4 </math> = 380 Hz, <math> A_p </math> = 1 dB, <math> A_s </math> = 40 dB, <math> G_{topo} </math> = 10 dB; filtro PM) | ||
+ | |- | ||
+ | | Equipe 4 | ||
+ | | LP - (<math> f_a </math> = 200 Hz; <math> f_1 </math> = 10 Hz; <math> f_2 </math> = 60 Hz, <math> A_p </math> = 3 dB, <math> A_s </math> = 40 dB, <math> G_{topo} </math> = -5 dB; filtro PM) | ||
+ | | HP - (<math> f_a </math> = 200 Hz; <math> f_1 </math> = 10 Hz; <math> f_2 </math> = 60 Hz, <math> A_p </math> = 3 dB, <math> A_s </math> = 40 dB, <math> G_{topo} </math> = 10 dB; janela fixa, janela ajustável e filtro PM) | ||
+ | | BP - (<math> f_a </math> = 2000 Hz; <math> f_1 </math> = 150 Hz; <math> f_2 </math> = 200 Hz, <math> f_3 </math> = 300 Hz; <math> f_4 </math> = 380 Hz, <math> A_p </math> = 0.5 dB, <math> A_s </math> = 30 dB, <math> G_{topo} </math> = 0 dB; janela fixa, janela ajustável e filtro PM ) | ||
+ | | BS - (<math> f_a </math> = 2000 Hz; <math> f_1 </math> = 150 Hz; <math> f_2 </math> = 200 Hz, <math> f_3 </math> = 300 Hz; <math> f_4 </math> = 380 Hz, <math> A_p </math> = 0.5 dB, <math> A_s </math> = 30 dB, <math> G_{topo} </math> = 0 dB; filtro PM) | ||
+ | |- | ||
+ | | Equipe 5 | ||
+ | | LP - (<math> f_a </math> = 2000 Hz; <math> f_1 </math> = 100 Hz; <math> f_2 </math> = 500 Hz, <math> A_p </math> = 3 dB, <math> A_s </math> = 30 dB, <math> G_{topo} </math> = -10 dB; janela fixa, janela ajustável e filtro PM) | ||
+ | | HP - (<math> f_a </math> = 2000 Hz; <math> f_1 </math> = 100 Hz; <math> f_2 </math> = 500 Hz, <math> A_p </math> = 3 dB, <math> A_s </math> = 30 dB, <math> G_{topo} </math> = 10 dB; filtro PM) | ||
+ | | BP - (<math> f_a </math> = 4000 Hz; <math> f_1 </math> = 400 Hz; <math> f_2 </math> = 800 Hz, <math> f_3 </math> = 1000 Hz; <math> f_4 </math> = 1400 Hz, <math> A_p </math> = 3 dB, <math> A_s </math> = 40 dB, <math> G_{topo} </math> = -10 dB; janela fixa, janela ajustável e filtro PM) | ||
+ | | BS - (<math> f_a </math> = 4000 Hz; <math> f_1 </math> = 400 Hz; <math> f_2 </math> = 800 Hz, <math> f_3 </math> = 1000 Hz; <math> f_4 </math> = 1400 Hz, <math> A_p </math> = 3 dB, <math> A_s </math> = 40 dB, <math> G_{topo} </math> = -10 dB; filtro PM) | ||
+ | |||
+ | |} | ||
+ | |||
+ | :onde: | ||
+ | :: <math> f_x </math> - são as "x" frequência de especificação do filtro dadas em Hertz (kHz ou MHz); | ||
+ | ::LP (''Low Pass'')- Passa Baixa <math> f_p = f_1 </math> e <math> f_s = f_2 </math>. | ||
+ | ::HP (''High Pass'')- Passa Altas <math> f_s = f_1 </math> e <math> f_p = f_2 </math>. | ||
+ | ::BP (''Band Pass'')- Passa Faixa <math> f_{s1} = f_1 </math> e <math> f_{p1} = f_2 </math>, <math> f_{p2} = f_3 </math> e <math> f_{s2} = f_4 </math>. | ||
+ | ::BS (''Band Stop'')- Rejeita Faixa <math> f_{p1} = f_1 </math> e <math> f_{s1} = f_2 </math>, <math> f_{s2} = f_3 </math> e <math> f_{p2} = f_4 </math>. | ||
+ | :: <math> f_a </math> - frequência de amostragem; <math> f_p </math> - frequência de passagem; <math> f_s </math> - frequência de rejeição (''stopband''), <math> A_p </math> - Atenuação máxima na banda de passagem (dB), <math> A_s </math> - Atenuação mínima na banda de rejeição (dB) (''stopband''), <math> G_{topo} </math> - Ganho na banda de passagem (dB). | ||
+ | :* Os filtros LP, HP, BP e BS devem ser projetados utilizando o algoritmo de Park-McCleallan (PM), podem ser usadas as funções apropriadas do Matlab. | ||
+ | :* A metodologia de janela fixa e ajustável deve ser aplicada também aos filtros indicados na tabela. No caso das janelas fixas o cálculo dos coeficientes deve ser realizado seguindo todos os passos. Para os filtros ajustáveis pode ser usada a função '''fir1''' do Matlab. | ||
+ | :* Para todos os filtros nos resultados deve ser indicada a ordem do filtro, o diagrama dos polos e zeros mostrando o plano z no intervalo [-2 e 2], tanto para o eixo real como imaginário. | ||
+ | :* Para cada filtros LP, HP, BP e BS, as resposta em frequência (ganho em dB e fase) devem ser mostrado em um único gráfico quando houverem 3 projetos de filtro. | ||
+ | :* Utilize uma máscara com as especificações para mostrar que os filtros atendem a especificação original (ver [[Fazer mascara de um filtro no Matlab]]). | ||
+ | :* Utilize a mesma escala em dB para os gráficos de cada filtro. Nas abcissas utilize uma escala em Hz (kHz ou MHz). Utilize uma mascara com cor diferenciada e linha tracejada ou pontilha para indicar claramente a especificação do filtro, e crie um segundo gráfico mostrando claramente a banda de passagem, conforme mostrado na figura seguir. | ||
+ | :* Para todos os filtros projetados mostre a resposta ao impulso de forma gráfica. | ||
+ | :* Determine o atraso de grupo para todos os filtros projetados. | ||
+ | :* Para os filtros de fase linear determine o tipo tipo de simetria que apresenta e a classificação deles (tipo 1 a 4). | ||
+ | :* Analise se os filtros projetados possuem a propriedade da simetria quadrantal. | ||
+ | :* Escreva um relatório técnico em PDF mostrando os resultados obtidos e comentando os resultados obtidos. Não é necessário apresentar a teoria utilizado para o projeto, mas todos os cálculos devem estar documentados. | ||
+ | :* Envie o relatório em pdf ou imagem dos cálculos e eventuais arquivos ".m" utilizados na plataforma Moodle. | ||
+ | ;Exemplos de formatação de figuras: | ||
+ | |||
+ | {{fig|AE3.1| Resposta ao impulso de um filtro digital FIR |Ex_impulseFIR.png|1000 px|}} | ||
+ | {{fig|AE3.2| Resposta em frequência de 3 filtros passa altas do tipo FIR |Ex_FiltroFIRHP.png|1000 px|}} | ||
+ | {{fig|AE3.3| Diagrama de polos e zeros de um filtro digital FIR |Ex_zplaneFIR.png|600 px|}} | ||
+ | |||
+ | {{collapse bottom}} | ||
+ | |||
+ | {{collapse top | AE4 - Simulação de sistemas DSP com Simulink (Entrega e prazos ver Moodle)}} | ||
+ | |||
+ | Como atividade de estudo realizar a montagem do modelo indicado na figura abaixo e fazer a simulação, usar fa = 8000Hz. | ||
+ | ;PASSO 1 - Entrar no Simulink: | ||
+ | * Abra o Matlab e crie uma pasta PSD29007 | ||
+ | * Entre no Simulink criando um novo modelo digitando | ||
+ | simulink | ||
+ | * Em seguida salve o modelo vazio com o nome '''aula34.slx''' | ||
+ | |||
+ | ;PASSO 2 - Criando o modelo slx: | ||
+ | * crie as variáveis de parâmetro para os blocos do simulink. Digite no matlab: | ||
+ | fa = 8000 % Sampling frequency; | ||
+ | Ta = 1/fa % Sample time; | ||
+ | spf = 1 % Samples per frame; | ||
+ | v1 = 0.2 % Sine amplitude; | ||
+ | f1 = 500 % Sine frequency; | ||
+ | G = 0.05 % Gain; | ||
+ | |||
+ | ;PASSO 3 - Construindo o circuito com as fontes ('''source''') de sinal: | ||
+ | * Insira os blocos que deseja utilizar para construir a seleção da fonte (ver o diagrama de blocos) | ||
+ | |||
+ | {{fig|AE4.1| Modelagem da seleção das fontes de sinal |SelectSourceSimulink.png|400 px|}} | ||
+ | |||
+ | * Configure os parâmetros de cada bloco. | ||
+ | {{collapse top | Configurar o bloco [https://www.mathworks.com/help/dsp/ref/sinewave.html sinewave]}} | ||
+ | ;Amplitude — Amplitude of sine waves: v1 | ||
+ | ;Frequency (Hz) — Frequency of each sine wave: f1 | ||
+ | ;Phase offset (rad) — Phase offset: 0 (default) | ||
+ | ;Sample mode — Continuous or discrete sampling mode: Discrete (default) | ||
+ | ;Output complexity — Real or complex waveform: Real (default) | ||
+ | ;Computation method — Method for computing discrete-time sinusoids: Trigonometric fcn (default) | ||
+ | ;Sample time — Sample period: Ta | ||
+ | ;Samples per frame — Samples per frame: spf | ||
+ | ;Resetting states when re-enabled — State behavior inside enabled subsystems: Restart at time zero (default) | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | {{collapse top | Configurar o bloco [https://www.mathworks.com/help/dsp/ref/chirp.html chirp]}} | ||
+ | ;Frequency sweep — Type of frequency sweep : Linear (default) | ||
+ | ;Sweep mode — Sweep mode: Unidirectional (default) | ||
+ | ;Initial frequency (Hz) — Initial frequency: 1 | ||
+ | ;Target frequency (Hz) — Target frequency: fa/2 | ||
+ | ;Target time (s) — Target time of sweep: 2 | ||
+ | ;Sweep time (s) — Sweep time: 2 | ||
+ | ;Initial phase (rad) — Initial phase of cosine output: 0 (default) | ||
+ | ;Sample time — Output sample period: Ta | ||
+ | ;Samples per frame — Samples per frame: spf | ||
+ | ;Output data type — Output data type: Double (default) | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | {{collapse top | Configurar o bloco [https://www.mathworks.com/help/dsp/ref/randomsource.html random source]}} | ||
+ | ;Source type — Uniform or Gaussian: Uniform (default) | ||
+ | ;Minimum — Minimum value of uniform distribution: -1 | ||
+ | ;Maximum — Maximum value of uniform distribution: 1 (default) | ||
+ | ;Repeatability — Repeatability of block output: Not repeatable | ||
+ | ;Inherit output port attributes — Inherit output port parameters from downstream block: off (default) | ||
+ | ;Sample mode — Discrete or continuous: Discrete (default) | ||
+ | ;Sample time — Output sample period: Ta | ||
+ | ;Samples per frame — Samples per output frame: spf | ||
+ | ;Output data type — Output data type: Double (default) | ||
+ | ;Complexity — Complexity of output: Real (default) | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | ;PASSO 4 - Construindo o circuito com os receptores ('''sink''') de sinal: | ||
+ | * Insira os blocos que deseja utilizar para receptores (ver o diagrama de blocos) | ||
+ | {{fig|AE4.2| Modelagem das medições de sinal |SinkSimulink.png|800 px|}} | ||
+ | |||
+ | * Configure os parâmetros de cada bloco. | ||
+ | {{collapse top | Configurar o bloco [https://www.mathworks.com/help/dsp/ref/timescope.html time scope]}} | ||
+ | Abra a configuração [View > Configuration properties] | ||
+ | |||
+ | *Na aba [Main] | ||
+ | ;Open at simulation start — Specify when scope window opens: on (default for Time Scope) | ||
+ | ;Display the full path — Display block path on scope title bar: off (default) | ||
+ | ;Number of input ports — Number of input ports on scope block: 2 | ||
+ | ;Layout — Number and arrangement of displays: 1 coluna 2 linhas | ||
+ | ;Sample time — Simulation interval between scope updates: -1 (for inherited) (default) | ||
+ | ;Input processing — Channel or element signal processing: Columns as channels (frame based) (default for Time Scope) | ||
+ | ;Maximize axes — Maximize size of plots: Auto (default for Time Scope) | ||
+ | |||
+ | *Na aba [Time] | ||
+ | ;Time span — Length of x-axis to display: 2 | ||
+ | ;Time span overrun action — Display data beyond visible x-axis: Wrap (default) | ||
+ | ;Time units — x-axis units: Metric (default for Time Scope) | ||
+ | ;Time display offset — x-axis offset: 0 (default) | scalar | vector | ||
+ | ;Time-axis labels — Display of x-axis labels: All (default for Time Scope) | ||
+ | ;Show time-axis label — Display or hide x-axis labels: on (default for Time Scope) | ||
+ | |||
+ | *Na aba [Display] | ||
+ | ;Active display — Selected display: 1 (default) | ||
+ | ;Title — Display name: %<SignalLabel> (default) | ||
+ | ;Show legend — Display signal legend: on | ||
+ | ;Show grid — Show internal grid lines: on (default) | ||
+ | ;Plot signals as magnitude and phase — Split display into magnitude and phase plots: off (default) | ||
+ | ;Y-limits (Minimum) — Minimum y-axis value: -10 (default) | ||
+ | ;Y-limits (Maximum) — Maximum y-axis value: 10 (default) | ||
+ | ;Y-label — Y-axis label: Amplitude (default for Time Scope) | ||
+ | |||
+ | *Na aba [Logging] | ||
+ | ;Limit data points to last — Limit buffered data values: off and 5000 (default) | ||
+ | ;Decimation — Reduce amount of scope data to display and save: off, 2 (default) | ||
+ | ;Log data to workspace — Save data to MATLAB workspace: off (default) | ||
+ | ;Variable name — Name of saved data variable: ScopeData (default) | ||
+ | ;Save format — MATLAB variable format: Dataset (default) | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | {{collapse top | Configurar o bloco [https://www.mathworks.com/help/dsp/ref/spectrumanalyzer.html spectrum analyser]}} | ||
+ | Abra a configuração [View > Spectrum Settings] | ||
+ | |||
+ | *Main option | ||
+ | <!--;Input domain — Domain of the input signal: Time (default) | Frequency--> | ||
+ | ;Type — Type of spectrum to display: Power (default) | ||
+ | ;View — Spectrum view: Spectrum (default) | ||
+ | ;Sample rate — Sample rate of the input signal in hertz: Inherited (default) | ||
+ | ;Full frequency span — Use entire Nyquist frequency interval: on (default) | ||
+ | ;RBW (Hz) — Resolution bandwidth: Auto (default) | ||
+ | |||
+ | *Window Options | ||
+ | ;Overlap (%) — Segment overlap percentage: 0 (default) | ||
+ | ;Window — Windowing method: Hann (default) | ||
+ | ;NENBW — Normalized effective noise bandwidth: | ||
+ | |||
+ | *Trace Options | ||
+ | ;Units — Spectrum units: dBm (default) | ||
+ | ;Averages — Number of spectral averages: 1 (default) | ||
+ | ;Reference load — Reference load: 1 (default) | ||
+ | ;Scale — Scale of frequency axis: Linear (default) | ||
+ | ;Offset — Constant frequency offset: 0 (default) | ||
+ | ;Normal trace — Normal trace view: off | ||
+ | ;Max hold trace — Maximum hold trace view: on | ||
+ | ;Min hold trace — Minimum hold trace view: off (default) | ||
+ | ;Two-sided spectrum — Enable two-sided spectrum view: off (default) | ||
+ | *Ver mais em: [https://www.mathworks.com/help/dsp/ug/configure-spectrum-analyzer.html Configure Spectrum Analyzer] | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | |||
+ | {{collapse top | Criar um Filtro usando o [Digital Filter Design]}} | ||
+ | *Use o bloco '''Digital Filter Design''' para projetar e implementar um filtro digital FIR ou IIR. | ||
+ | *De um duplo click sobre o bloco, e escolha as configurações que desejar. | ||
+ | *Após configurar o filtro ou importar os coeficientes projetados no Matlab, clique em [Design Filter]. | ||
+ | *No menu [Edit > Convert Structure], escolha a implementação desejada. | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | *Para melhorar a visualização dos sinais no Simulink, faça os seguintes procedimentos: | ||
+ | :* Ative a visualização das dimensões das portas ['''Display > Signal & Ports > Signal Dimensions'''] ou [ALT]+D+S+D+[ENTER] | ||
+ | :* Ative a visualização do tipo de dados das portas ['''Display > Signal & Ports > Port Data Types'''] ou [ALT]+D+S+D+D+[ENTER] | ||
+ | :* Ative a visualização da cor para indicar os tempos de amostragem sinais ['''Display > Sample Time > Colors'''] ou [ALT]+D+T+C+[ENTER] | ||
+ | |||
+ | * Velocidade de simulação | ||
+ | *Note que se for usado um bloco [https://www.mathworks.com/help/dsp/ref/toaudiodevice.html To Audio Device], a velocidade de simulação será determinada pelo tempo real de amostragem do sistema. | ||
+ | *Para acelerar a simulação é necessário remover ou comentar (''comment out'') os dispositivos de tempo real como o '''To Audio Device''' ou '''[https://www.mathworks.com/help/dsp/ref/fromaudiodevice.html From Audio Device]'''. | ||
+ | *Conforme já mencionado a simulação usando '''frames''' no lugar de '''samples''' também acelera a simulação. Experimente utilizar spf = 1, 2, 256, 1024, e perceba a diferença de velocidade de simulação. | ||
+ | *Tipo de entrada para analisar o filtro. | ||
+ | :*Experimente as entradas senoidais, chirp, random noise e mistura dessas, assim como sinais constantes, e observe os sinais de entrada e saída no DT e DF. | ||
+ | |||
+ | |||
+ | *Exemplo de modelo de um sistema e resultados da simulação | ||
+ | |||
+ | {{fig|AE4.3| Modelagem de um sistema em Simulink |SimulationFilterPSD1.png|800 px|}} | ||
+ | |||
+ | '''DICAS:''' | ||
+ | |||
+ | *Fazer a análise no DT e DF para um ruido uniforme (-1 a 1) | ||
+ | {{fig|AE4.4| Análise no DT com fonte de ruído randomico |DTnoiseFilterPSD1.png|400 px|}} | ||
+ | {{fig|AE4.5| Análise no DF com fonte de ruído randomico |DFnoiseFilterPSD1.png|400 px|}} | ||
+ | |||
+ | *Fazer a análise no DT e DF para um sinal de chirp (0 a 4000Hz) | ||
+ | {{fig|AE4.4| Análise no DT com fonte de chirp |DTchirpFilterPSD1.png|400 px|}} | ||
+ | {{fig|AE4.5| Análise no DF com fonte de chirp |DFchirpFilterPSD1.png|400 px|}} | ||
+ | {{collapse bottom}} | ||
+ | ===PROJETO FINAL=== | ||
+ | {{collapse top | expand=true | PF - Projeto, simulação e realização e implementação em VHDL de filtros}} | ||
+ | Em todos os filtros abaixo a especificação será sempre a mesma. Cada equipe deverá utilizar a especificação do Filtro 3 da AE3. Para o filtro FIR poderá ser utilizada a metodologia de projeto de filtros digital FIR com janelas fixas ou janelas ajustáveis ou usando o algoritmo de Park-McCleallan (PM) (APENAS UM DELES). Para o filtro IIR deverão ser seguidas as etapas (a) projeto de um filtro protótipo analógico passa-baixas H(p); (b) transformação em frequência do filtro H(p) -> H(s) (c) conversão do filtro analógico H(s) em digital H(z), usando a transformação bilinear. A aproximação a ser utilizada neste caso pode ser Butterworth, Chebyshev I, Chebyshev II ou Eliptico (Cauer). | ||
− | * | + | {| class="wikitable" border="1" cellpadding="3" cellspacing="0" style="text-align:left; font-size:100%" bgcolor="#efefef" |
− | * | + | ! scope="col" width=30% align="left"| Equipe |
− | : | + | ! scope="col" width=70% align="center"| Filtro |
− | : | + | |- |
− | :PFr - Relatório do | + | | Equipe 1 |
− | : | + | | BP - (<math> f_a </math> = 44100 Hz; <math> f_1 </math> = 1200 Hz; <math> f_2 </math> = 2000 Hz; <math> f_3 </math> = 3000 Hz; <math> f_4 </math> = 3800 Hz; <math> A_p </math> = 1 dB; <math> A_s </math> = 35 dB; <math> G_{topo} </math> = 5 dB) |
+ | |- | ||
+ | | Equipe 2 | ||
+ | | BP - (<math> f_a </math> = 8000 Hz; <math> f_1 </math> = 1200 Hz; <math> f_2 </math> = 2000 Hz; <math> f_3 </math> = 3000 Hz; <math> f_4 </math> = 3800 Hz; <math> A_p </math> = 3 dB; <math> A_s </math> = 40 dB; <math> G_{topo} </math> = 20 dB) | ||
+ | |- | ||
+ | | Equipe 3 | ||
+ | | BP - (<math> f_a </math> = 1000 Hz; <math> f_1 </math> = 150 Hz; <math> f_2 </math> = 200 Hz, <math> f_3 </math> = 300 Hz; <math> f_4 </math> = 380 Hz, <math> A_p </math> = 1 dB, <math> A_s </math> = 40 dB, <math> G_{topo} </math> = 10 dB) | ||
+ | |- | ||
+ | | Equipe 4 | ||
+ | | BP - (<math> f_a </math> = 2000 Hz; <math> f_1 </math> = 150 Hz; <math> f_2 </math> = 200 Hz, <math> f_3 </math> = 300 Hz; <math> f_4 </math> = 380 Hz, <math> A_p </math> = 0.5 dB, <math> A_s </math> = 30 dB, <math> G_{topo} </math> = 0 dB) | ||
+ | |- | ||
+ | | Equipe 5 | ||
+ | | BP - (<math> f_a </math> = 4000 Hz; <math> f_1 </math> = 400 Hz; <math> f_2 </math> = 800 Hz, <math> f_3 </math> = 1000 Hz; <math> f_4 </math> = 1400 Hz, <math> A_p </math> = 3 dB, <math> A_s </math> = 40 dB, <math> G_{topo} </math> = -10 dB) | ||
+ | |} | ||
+ | |||
+ | ;1) Filtro FIR com precisão "infinita" (''floating point'' de 64 bits): | ||
+ | *Converter o filtro para a estrutura simétrica e realizar com elementos básicos | ||
+ | *Simular o filtro no simulink. | ||
+ | *Usar o HDL coder para converter para vhdl em double (real). | ||
+ | *Fazer a simulação do vhdl no Modelsim. | ||
+ | *Analisar os resultados da simulação no simulink, Modelsim com a resposta de frequencia do filtro (freqz ou fvtool ou fdatool). | ||
+ | ;2) Filtro FIR com precisão finita (''fixed point''): | ||
+ | *Faça a quantização dos coeficientes do filtro para ponto fixo, de modo a reduzir ao máximo o número de bits e o hardware necessário para implementar. | ||
+ | *Simular o filtro no simulink. | ||
+ | *Usar o HDL coder para converter para vhdl em sfix (std_logic_vector). | ||
+ | *Fazer a simulação do vhdl no Modelsim. | ||
+ | *Analisar os resultados da simulação no simulink, Modelsim com a resposta de frequencia do filtro (freqz ou fvtool ou fdatool). | ||
+ | ;3) Filtro IIR com precisão "infinita" (''floating point'' de 64 bits): | ||
+ | *Projetar o mesmo o filtro anterior com IIR (de seu escolha), | ||
+ | *Converter para seções de segunda ordem e realizar com com elementos básicos | ||
+ | *Simular o filtro no simulink. | ||
+ | *Usar o HDL coder para converter para vhdl em double (real). | ||
+ | *Fazer a simulação do vhdl no Modelsim. | ||
+ | *Analisar os resultados da simulação no simulink, Modelsim com a resposta de frequencia do filtro (freqz ou fvtool ou fdatool). | ||
+ | ;4) Filtro IIR com precisão finita (''fixed point''): | ||
+ | *Faça a quantização dos coeficientes do filtro para ponto fixo, de modo a reduzir ao máximo o número de bits e o hardware necessário para implementar. | ||
+ | *Simular o filtro no simulink. | ||
+ | *Usar o HDL coder para converter para vhdl em sfix (std_logic_vector). | ||
+ | *Fazer a simulação do vhdl no Modelsim. | ||
+ | *Analisar os resultados da simulação no simulink, Modelsim com a resposta de frequencia do filtro (freqz ou fvtool ou fdatool). | ||
+ | ;5) Comparação dos filtros IIR e FIR: | ||
+ | *Comparar as respostas de frequência (ganho e fase) dos filtros IIR e FIR. | ||
+ | *Comparar a estabilidade dos filtros IIR e FIR a medida que os coeficientes são representados com menos bits. (use o FDAtool) | ||
+ | *Comparar os atrasos de grupo dos filtros IIR e FIR, mantendo eles em paralelo no simulink. (use o time scope). | ||
+ | *Analise o número de elementos do filtro IIR e do FIR, considere que o número de elementos logicos é proporcional a: (Use o relatório do FDAtool ou do HDL coder) | ||
+ | (S) Somador = B, (M) Multiplicador = 2B, (D) Delay = B. | ||
+ | O número de elementos lógicos o hardware será EL_Hw = N_S x B + N_M x 2B + N_D x B. | ||
+ | Multiplicadores por 1, -1, 0, e 2^N não necessitam de hardware para implementação. | ||
+ | |||
+ | ;6) A entrega do Projeto Final será até dia 18/set/2020. O projeto é avaliado nos quesitos: | ||
+ | :PFp - Implementação do projeto; | ||
+ | :PFq - Qualidade das medidas realizadas; | ||
+ | :PFr - Relatório do projeto; | ||
+ | |||
+ | ;Notas: | ||
+ | *[[Limitações do HDL coder]] | ||
+ | {{collapse bottom}} | ||
==Referências Bibliográficas== | ==Referências Bibliográficas== |
Edição atual tal como às 19h15min de 17 de setembro de 2020
Registro on-line das aulas
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
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:
INÌCIO DAS AULAS REMOTAS
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 . FONTE: Polinômios de Tchebychev, Wikipedia
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))
|
- Dias 4, 7, 11 e 14 mai
- Parada Pedagógica sem aulas de acordo com a resolução do colegiado do campus de São José.
- Dia 18 mai
- Retorno às ANPs, porém sem aula de acordo com mensagem recebida do chefe do DEPE.
- Foi solicitado que todos alunos se cadastram no workspace da disciplina no SLACK.
- Foi solicitado que todos alunos respondam a uma sondagem sobre as ANPs Volta às aulas não presenciais em tempo de pandemia.
- Resultado das outras enquetes:
- Você gostaria que a UC de PSD29007 tivesse continuidade através de ANPs durante a pandemia do corona virus?
- sim
- █████████████████████████ | 100% (11)
- não
- A que horas começar as aulas?
- 7:30
- ████████ | 33% (3)
- 7:45
- ██████████████ | 56% (5)
- 8:00
- ██ | 11% (1)
- 8:15
- | 0% (0)
Unidade 3
Unidade 3 - Filtros FIR | ||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
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);
FIR tipo IConsidere o exemplo de um filtro simétrico de ordem par (N=6) Se ele apresenta simetria dos coeficientes , e , temos que: Para obter a resposta em frequência , substituímos . Aplicando a identidade , obtemos que: Portanto a resposta em frequência tem um resposta de magnitude com uma parte real , e uma fase linear igual a , e portanto o atraso de grupo é , que é a metade da ordem N do filtro. Pode-se generalizar este resultado para qualquer filtro simétrico de ordem par: Na qual se percebe que a fase linear é igual a , e portanto o atraso de grupo é , metade da ordem N do filtro. FIR tipo IIConsidere o exemplo de um filtro simétrico de ordem impar (N=5) Se ele apresenta simetria dos coeficientes , e , temos que: Para obter a resposta em frequência: Aplicando a identidade , obtemos que: Portanto a resposta em frequência tem um resposta de magnitude com uma parte real , e uma fase linear igual a , e portanto o atraso de grupo é , que é a metade da ordem N do filtro. Pode-se generalizar este resultado para qualquer filtro simétrico de ordem impar: Na qual se percebe que a fase linear é igual a , e portanto o atraso de grupo é , metade da ordem N do filtro. FIR tipo IIIConsidere o exemplo de um filtro antissimétrico de ordem par (N=6) Se ele apresenta simetria dos coeficientes , , e , temos que: Para obter a resposta em frequência , substituímos . Aplicando a identidade , e que obtemos que: Portanto a resposta em frequência tem um resposta de magnitude com uma parte real , e uma fase linear igual a , e portanto o atraso de grupo é , que é a metade da ordem N do filtro. Pode-se generalizar este resultado para qualquer filtro antissimétrico de ordem par: Na qual se percebe que a fase linear é igual a , e portanto o atraso de grupo é , metade da ordem N do filtro. FIR tipo IVConsidere o exemplo de um filtro antissimétrico de ordem impar (N=5) Se ele apresenta simetria dos coeficientes , e , temos que: Para obter a resposta em frequência: E portanto Portanto a resposta em frequência tem um resposta de magnitude com uma parte real , e uma fase linear igual a , e portanto o atraso de grupo é , que é a metade da ordem N do filtro. Pode-se generalizar este resultado para qualquer filtro antissimétrico de ordem impar: Na qual se percebe que a fase linear é igual a , e portanto o atraso de grupo é , metade da ordem N do filtro. Propriedades dos filtros FIR de fase linearComo 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 . 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');
Também devido a existência (ou não) de zeros em e , que corresponde a frequência de Nyquist , 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:
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 : fazendo na segunda equação N-n = m, temos que os limites n = 0 -> m = N, e n = N -> m = 0. Com a mesma análise para antissimetria nos coeficientes : Nessas duas equações é possível perceber que se é um zero então também será um zero de . No caso de zeros reais, se temos um zero então também é um zero, exceto se ou . Por outro lado, se todos os coeficientes b(n) do filtro são reais, então os zeros complexos, aparecem em pares complexos conjugados e , e seus reciprocos e também são zeros de . Esse tipo de disposição dos zeros denominamos de simetria quadrantal. FONTE:
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])
|
Unidade 4 - Realização de Filtros
Unidade 4 - Realização de Filtros |
---|
Para exemplificar as diferentes realizações utilizaremos com base um filtro de ordem 4 representado pela função de transferência
Figura 4.1 - Realização de filtros FIR na Forma Direta
Figura 4.2 - Realização de filtros FIR na Forma Transposta Figura 4.3 - Realização de filtros FIR na Forma Transposta
Os filtros FIR de fase linear podem ser com coeficientes simétricos (tipo I e II) ou antissimétricos (tipo III e IV).
Figura 4.4 - Realização de filtros FIR de fase linear Simétrico I
Figura 4.5 - Realização de filtros FIR de fase linear Simétrico II
Figura 4.6 - Realização de filtros FIR de fase linear Antisimétrico III
Figura 4.7 - Realização de filtros FIR de fase linear Antisimétrico IV
Fs = 30000; % Sampling Frequency
Fpass = 12000; % Passband Frequency
Fstop = 13000; % Stopband Frequency
Dpass = 0.01; % Passband Ripple
Dstop = 0.01; % Stopband Attenuation
flag = 'scale'; % Sampling Flag
% Calculate the order from the parameters using KAISERORD.
[N,Wn,BETA,TYPE] = kaiserord([Fpass Fstop]/(Fs/2), [1 0], [Dstop Dpass]);
% Calculate the coefficients using the FIR1 function.
b = fir1(N, Wn, TYPE, kaiser(N+1, BETA), flag);
hFIR = dsp.FIRFilter;
hFIR.Numerator = b;
% Para definir diretamente os coeficientes
realizemdl(hFIR)
% Para definir os coeficientes através de uma matriz de entrada
realizemdl(hFIR,'MapCoeffsToPorts','on');
Figura 4.8 - Separação do filtro IIR H(z) em H1(z) e H2(z)
Figura 4.9 - Realização de filtros IIR na Forma Direta I
Figura 4.10 - Realização de filtros IIR na Forma Direta II
Figura 4.11 - Realização de filtros IIR na Forma Direta II Canônica
Figura 4.12 - Realização de filtros IIR na Forma Transposta I Figura 4.13 - Realização de filtros IIR na Forma Transposta II
Uso do Simulink para processamento de sinais
Para aprender o básico do Simulink recomendo assistir a estes vídeos da Mathworks
edit hdlsetup.m
Figura 5.1 - Divisão HDL_DUT e testbench Figura 5.2 - Subsistema HDL_DUT
hdlsetup('nome_modelo')
cd hdl_prj/hdlsrc/hdlcoder_simple_up_counter/
do HDL_DUT_compile.do
do HDL_DUT_tb_compile.do
do HDL_DUT_tb_sim.do Figura 5.3 - Subsistema HDL_DUT simulado no Simulink Figura 5.4 - Subsistema HDL_DUT simulado no Modelsim
** Note: **************TEST COMPLETED (PASSED)**************
a_sfix = fi(0.1) % 0.1 representado com signed, 16 bits no total com os bits de fração determinados para representar o sinal b_sfix = fi(-0.1) % 0.1 representado com signed, 16 bits no total com 10 bits de fração c_sfix = fi(0.1,1,5,4) % 0.1 representado com signed, 5 bits no total com 4 bits de fração d_sfix = fi(-0.1,1,5,4) % -0.1 representado com signed, 5 bits no total com 4 bits de fração e_sfix = fi(-0.1,0,5,4) % -0.1 representado com unsigned, 5 bits no total com 4 bits de fração => ERRO a_float = 0.1 b_float = -0.1 fi(0:0.3:10,0,8,0) Para observar a precisão da representação mude o formato numérico para format long format hex format short % formato default Experimente com outros números como (10.3 3.25 pi e)
DataMode Type of arithmetic used in quantization. This property can have the following values: fixed — Signed fixed-point calculations float — User-specified floating-point calculations double — Double-precision floating-point calculations single — Single-precision floating-point calculations ufixed — Unsigned fixed-point calculations The default value of this property is fixed. v = -2:0.3:2 q = quantizer('fixed', [5 4]) quantize(q,0.1) quantize(q,pi) quantize(q,v) qu = quantizer('ufixed', [16 4]) quantize(qu,-0.1) quantize(qu,-pi) quantize(qu,v) Note neste caso que a quantidade de bits total e número de casas fracionárias limitam a representação dos números. range(q)
x=-0.2; % Word length = 8, fraction length = 7 q=quantizer([8,7]) range(q) xq=quantize(q,x); binxq=num2bin(q,xq); % Word length = 16, fraction length = 10 q1=quantizer([160 150]) range(q1) xq1 = quantize(q1,x); binxq1=num2bin(q1,xq1); hexxq1=num2hex(q1,xq1); x xq xq1 disp(['x=',num2str(x), ',xq=',num2str(xq), ',bin=', binxq, ',xq1=',num2str(xq1),',bin=', binxq1 ]) format hex xq1 hexxq1 A precisão da representação numérica também varia conforme o numero de bits usados para a parte fracionária. Para saber a precisão (valor correspondente ao bit menos significativo) use a função eps(q). q=quantizer('ufixed', [4,1]); %q=quantizer([4,1],'fixed') % q=quantizer([4,0],'ufixed') % q=quantizer([4,0],'fixed') % q=quantizer([4,-1],'ufixed') % q=quantizer([4,-1],'fixed') tostring(q) range(q) eps(q) xq=quantize(q,x); binxq=num2bin(q,xq); xq binxq
q=quantizer([3 0],'fixed','round','saturate'); quantize(q,0:0.5:16) q=quantizer([3 0],'ufixed','round','saturate'); quantize(q,0:0.5:16) q=quantizer([3 0],'fixed','round','wrap'); quantize(q,0:0.5:16) q=quantizer([3 0],'ufixed','round','wrap'); quantize(q,0:0.5:16) Note a diferença entre estes 4 quantizadores acima.
No caso dos filtros FIR, escolha uma quantidade de bits suficiente para manter a resposta de frequência especificada, ou modifique o filtro visando reduzir o número de bits necessários. No caso dos IIR, utiliza uma estrutura de seções de segunda ordem (SOS) para a implementação dos filtros.
ATUAL
NEXT
|
Avaliações
- Atividades extraclasse
AE1 - Cálculo de uma DFT de comprimento 8 |
---|
|
AE2 - Projeto de Filtro Analógico e Filtro Digital IIR (Entrega e prazos ver Moodle) | ||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
A primeira parte dessa avaliação visa verificar se você conhece a metodologia de projeto de filtros analógicos: (a) projeto de um filtro protótipo analógico passa-baixas H(p); (b) transformação em frequência do filtro H(p) -> H(s), obtendo o filtro LP, HP conforme o tipo de filtro desejado; Nesta avaliação é solicitado que cada equipe realize o projeto de 2 filtros analógicos. Na segunda parte é solicitado que os filtros BP e BS sejam projetados seguindo as etapas (a) projeto de um filtro protótipo analógico passa-baixas H(p); (b) transformação em frequência do filtro H(p) -> H(s) (c) conversão do filtro analógico H(s) em digital H(z), usando a transformação bilinear. Note que nestes casos a frequência de amostragem do sinal e sistema é fundamental no projeto.
|
AE3 - Projeto de Filtro Digital FIR (Entrega e prazos ver Moodle) | ||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Essa avaliação visa verificar se você conhece a metodologia de projeto de filtros digital FIR com janelas fixas, janelas ajustáveis e usando o algoritmo de Park-McCleallan (PM). Nesta avaliação cada equipe deverá realizar o projeto de 2 filtros analógicos usando janela fixa e ajustáveis e todos os 4 filtros usando o PM. Alguns filtros foram modificados em relação a atividade anterior.
Figura AE3.1 - Resposta ao impulso de um filtro digital FIR Figura AE3.2 - Resposta em frequência de 3 filtros passa altas do tipo FIR Figura AE3.3 - Diagrama de polos e zeros de um filtro digital FIR |
AE4 - Simulação de sistemas DSP com Simulink (Entrega e prazos ver Moodle) | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Como atividade de estudo realizar a montagem do modelo indicado na figura abaixo e fazer a simulação, usar fa = 8000Hz.
simulink
fa = 8000 % Sampling frequency; Ta = 1/fa % Sample time; spf = 1 % Samples per frame; v1 = 0.2 % Sine amplitude; f1 = 500 % Sine frequency; G = 0.05 % Gain;
Figura AE4.1 - Modelagem da seleção das fontes de sinal
Figura AE4.2 - Modelagem das medições de sinal
Figura AE4.3 - Modelagem de um sistema em Simulink DICAS:
Figura AE4.4 - Análise no DT com fonte de ruído randomico Figura AE4.5 - Análise no DF com fonte de ruído randomico
Figura AE4.4 - Análise no DT com fonte de chirp Figura AE4.5 - Análise no DF com fonte de chirp |
PROJETO FINAL
PF - Projeto, simulação e realização e implementação em VHDL de filtros | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Em todos os filtros abaixo a especificação será sempre a mesma. Cada equipe deverá utilizar a especificação do Filtro 3 da AE3. Para o filtro FIR poderá ser utilizada a metodologia de projeto de filtros digital FIR com janelas fixas ou janelas ajustáveis ou usando o algoritmo de Park-McCleallan (PM) (APENAS UM DELES). Para o filtro IIR deverão ser seguidas as etapas (a) projeto de um filtro protótipo analógico passa-baixas H(p); (b) transformação em frequência do filtro H(p) -> H(s) (c) conversão do filtro analógico H(s) em digital H(z), usando a transformação bilinear. A aproximação a ser utilizada neste caso pode ser Butterworth, Chebyshev I, Chebyshev II ou Eliptico (Cauer).
(S) Somador = B, (M) Multiplicador = 2B, (D) Delay = B. O número de elementos lógicos o hardware será EL_Hw = N_S x B + N_M x 2B + N_D x B. Multiplicadores por 1, -1, 0, e 2^N não necessitam de hardware para implementação.
|
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 2,7 2,8 SHENOI, B. A. Introduction to Digital Signal Processing and Filter Design. 1.ed. New Jersey: John Wiley-Interscience, 2006. 440 p. ISBN 978-0471464822