Mudanças entre as edições de "PSD29007-Engtelecom(2017-1) - Prof. Marcos Moecke"
(42 revisões intermediárias por 2 usuários não estão sendo mostradas) | |||
Linha 334: | Linha 334: | ||
===Unidade 2=== | ===Unidade 2=== | ||
− | ;Aula | + | ;Aula 7 (6 Mar): |
*Filtros Analógicos: | *Filtros Analógicos: | ||
:* Função de transferência | :* Função de transferência | ||
Linha 352: | Linha 352: | ||
::<math> H(s) = H(p)\left|\begin{matrix}\\ p=g(s) \end{matrix}\right. </math> | ::<math> H(s) = H(p)\left|\begin{matrix}\\ p=g(s) \end{matrix}\right. </math> | ||
− | ;Aula | + | ;Aula 8 e 9 (10 e 13 Mar): |
* Projeto de filtros analógicos do tipo Butterworth | * Projeto de filtros analógicos do tipo Butterworth | ||
:* A aproximação de magnitude de filtros analógicos pode ser realizado usando as aproximações de Butterworth, Chebyshev (tipo 1 ou 2) e Cauer. | :* A aproximação de magnitude de filtros analógicos pode ser realizado usando as aproximações de Butterworth, Chebyshev (tipo 1 ou 2) e Cauer. | ||
Linha 374: | Linha 374: | ||
:*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 | + | ;Aula 10 (17 Mar): |
* Projeto de filtros analógicos do tipo Chebyshev I. | * Projeto de filtros analógicos do tipo Chebyshev I. | ||
::*Determine a ordem mínima necessária: | ::*Determine a ordem mínima necessária: | ||
Linha 388: | Linha 388: | ||
:*Ver pag. 204 a 208 de <ref name="SHENOI2006"/> | :*Ver pag. 204 a 208 de <ref name="SHENOI2006"/> | ||
− | ;Aula | + | ;Aula 11 (20 Mar): |
*Filtros Analógicos: | *Filtros Analógicos: | ||
:* 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''''). | :* 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''''). | ||
Linha 427: | Linha 427: | ||
:*Ver pag. 208 a 218 de <ref name="SHENOI2006"/> | :*Ver pag. 208 a 218 de <ref name="SHENOI2006"/> | ||
− | ;Aula | + | ;Aula 12 e 13 (24 e 27 Mar): |
*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) | ||
Linha 434: | Linha 434: | ||
:*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"/> | ||
− | ;Aula | + | ;Aula 14 a 16 (31 Mar a 7 Abr): |
*Filtros Digitais: Filtros IIR: Uso do Matlab. | *Filtros Digitais: Filtros IIR: Uso do Matlab. | ||
::*Ver as funções de discretização usadas no Matlab: [http://www.mathworks.com/help/signal/ref/bilinear.html bilinear], [http://www.mathworks.com/help/signal/ref/impinvar.html impinvar] | ::*Ver as funções de discretização usadas no Matlab: [http://www.mathworks.com/help/signal/ref/bilinear.html bilinear], [http://www.mathworks.com/help/signal/ref/impinvar.html impinvar] | ||
Linha 465: | Linha 465: | ||
===Unidade 3=== | ===Unidade 3=== | ||
− | ;Aula | + | ;Aula 17 (10 Abr): |
*Filtros Digitais: Filtros FIR | *Filtros Digitais: Filtros FIR | ||
:*Filtros de fase linear: simétricos e antisimétricos (Tipo 1, 2, 3 e 4) | :*Filtros de fase linear: simétricos e antisimétricos (Tipo 1, 2, 3 e 4) | ||
Linha 472: | Linha 472: | ||
:*Ver [https://www.mathworks.com/help/signal/ug/fir-filter-design.html FIR Filter Design] | :*Ver [https://www.mathworks.com/help/signal/ug/fir-filter-design.html FIR Filter Design] | ||
− | ;Aula | + | ;Aula 18 (17 Abr): |
:*Projeto de FILTRO IIR | :*Projeto de FILTRO IIR | ||
::*Atividade a distância, com laboratório liberado para uso dos alunos para a realização da AE2. | ::*Atividade a distância, com laboratório liberado para uso dos alunos para a realização da AE2. | ||
− | ;Aula | + | ;Aula 19 (24 Abr) |
*Filtros Digitais: Filtros FIR: | *Filtros Digitais: Filtros FIR: | ||
:*Coeficientes da série de Fourier de filtros ideias: LP, HP, BP, BS | :*Coeficientes da série de Fourier de filtros ideias: LP, HP, BP, BS | ||
Linha 537: | Linha 537: | ||
:*Ver pag. 256 a 265 de <ref name="SHENOI2006"/> | :*Ver pag. 256 a 265 de <ref name="SHENOI2006"/> | ||
− | ; | + | ; (28 Abr) |
:* Adesão a Greve Geral | :* Adesão a Greve Geral | ||
− | ;Aula | + | ;Aula 21 (5 Mai) |
*Filtros Digitais: Filtros FIR | *Filtros Digitais: Filtros FIR | ||
*Projeto de filtro FIR utilizando janelas temporais fixas. | *Projeto de filtro FIR utilizando janelas temporais fixas. | ||
Linha 559: | Linha 559: | ||
::*Projete os dois filtros projetados anteriormente como IIR, utilizando 3 janelas diferentes. Compare os filtros obtidos com os filtros IIR. | ::*Projete os dois filtros projetados anteriormente como IIR, utilizando 3 janelas diferentes. Compare os filtros obtidos com os filtros IIR. | ||
− | ;Aula | + | ;Aula 22 (8 Mai) |
*Filtros Digitais: Filtros FIR | *Filtros Digitais: Filtros FIR | ||
*Projeto de filtro FIR utilizando janelas temporais | *Projeto de filtro FIR utilizando janelas temporais | ||
Linha 600: | Linha 600: | ||
:*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 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"/> | :*Ver pag. 266 a 273 de <ref name="SHENOI2006"/> | ||
− | |||
− | ;Aula | + | ;Aula 23 (12 Mai) |
*Filtros Digitais: Filtros FIR | *Filtros Digitais: Filtros FIR | ||
:* 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 | :* 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 | ||
Linha 616: | Linha 615: | ||
:*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]. | :*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]. | ||
− | + | ;Aula 24 (15 Mai): | |
− | |||
− | ;Aula | ||
*Uso do [http://www.mathworks.com/help/signal/examples/introduction-to-the-filter-design-and-analysis-tool-fdatool.html] [http://www.mathworks.com/help/signal/ref/fdatool.html Fdatool] para projeto de filtro IIR, FIR equiripple e FIR com janela. | *Uso do [http://www.mathworks.com/help/signal/examples/introduction-to-the-filter-design-and-analysis-tool-fdatool.html] [http://www.mathworks.com/help/signal/ref/fdatool.html Fdatool] para projeto de filtro IIR, FIR equiripple e FIR com janela. | ||
<syntaxhighlight lang=matlab> | <syntaxhighlight lang=matlab> | ||
Linha 628: | Linha 625: | ||
Ar = 40 dB; | Ar = 40 dB; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | --> | + | |
+ | ;Aula 25 (19 Mai): | ||
+ | *Atraso de grupo em filtros IIR e FIR no Matlab | ||
+ | :*O '''atraso de grupo''' de um filtro é a medida da atraso médio do filtro em função da frequência do sinal de entrada. Ele é obtido pela primeira derivada da resposta de fase do filtro. Se a resposta em frequencia é <math>H(e^{j \omega}) </math> , então o atraso de grupo é: | ||
+ | ::<math>\tau_g(\omega) =\frac {d \theta (\omega)} {d \omega}</math> | ||
+ | ::onde <math>\tau_g(\omega) </math> é a fase de <math>H(e^{j \omega}) </math>. | ||
+ | :*[http://www.mathworks.com/help/signal/ref/grpdelay.html Função para o cálculo do atraso de grupo (group delay) no Matlab] | ||
+ | :*[http://www.mathworks.com/help/signal/ug/compensate-for-the-delay-introduced-by-a-filter-with-feedback.html Compensação do atraso introduzido pelo filtro IIR]. | ||
+ | :*[http://www.mathworks.com/help/signal/ref/filtfilt.html Filtragem digital com fase nula]. | ||
+ | :*[http://www.mathworks.com/help/signal/ug/compensate-for-the-delay-introduced-by-a-filter.html Compensação do atraso introduzido pelo filtro FIR]. | ||
+ | |||
+ | :*Um filtro sem distorção de fase (Não causal) pode ser obtido ao passar uma sequencia x(n) por um filtro H1, tomando a saída do filtro revertida e passando novamente pelo mesmo filtro H1. A saída do último filtro revertida corresponde ao sinal x(n) filtro com fase zero. O filtro obtido desta forma tem as seguintes características: | ||
+ | ::*A Distorção de fase nula | ||
+ | ::*A função de transferência do filtro é igual a magnitude ao quadrada da função de transferência original do filtro H1. | ||
+ | ::*A ordem do filtro é o dobro da ordem do filtro H1. | ||
+ | :*Exemplo de aplicação a filtragem de um sinal ECG com ruído [[Arquivo:noisyecg.txt noisyecg.mat]]: | ||
+ | <syntaxhighlight lang=matlab> | ||
+ | %% Carregando um sinal de ECG com ruído com duração de 4 segundos. | ||
+ | load noisyecg.mat | ||
+ | x = noisyECG_withTrend; | ||
+ | fa = 500; %% 2000 amostras em 4 segundos => 500 amostras por segundo. | ||
+ | t = [0:length(x)-1]*1/fa; | ||
+ | plot(t,x); | ||
+ | |||
+ | %% Projetando um filtro passa-baixa tipo IIR butter com f_passagem = 0.15 rad/s | ||
+ | d = designfilt('lowpassiir', ... | ||
+ | 'PassbandFrequency',0.15,'StopbandFrequency',0.2, ... | ||
+ | 'PassbandRipple',1,'StopbandAttenuation',60, ... | ||
+ | 'DesignMethod','butter'); | ||
+ | freqz(d) | ||
+ | |||
+ | %% Filtro de x revertido x e somando com x filtrado. OFF LINE | ||
+ | y = flip(filter(d,flip(filter(d,x)))); | ||
+ | y1 = filter(d,x); | ||
+ | |||
+ | figure(2); | ||
+ | subplot(2,1,1) | ||
+ | plot(t, [y y1]) | ||
+ | title('Filtered Waveforms') | ||
+ | legend('Zero-phase Filtering','Conventional Filtering') | ||
+ | |||
+ | subplot(2,1,2) | ||
+ | plot(t, [x y]) | ||
+ | title('Original Waveform') | ||
+ | legend('noisy ecg ','fitered ecg') | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | :*Verifique também o resultado da filtragem usando um filtro IIR (ellip, cheby1 ou cheby2) e filtros FIR (equiripple e de janela) | ||
+ | |||
+ | <syntaxhighlight lang=matlab> | ||
+ | %% Projetando um filtro passa-baixa tipo FIR equiripple com f_passagem = 0.15 rad/s | ||
+ | d = designfilt('lowpassfir', ... | ||
+ | 'PassbandFrequency',0.15,'StopbandFrequency',0.2, ... | ||
+ | 'PassbandRipple',1,'StopbandAttenuation',60, ... | ||
+ | 'DesignMethod','equiripple'); | ||
+ | |||
+ | y = flip(filter(d,flip(filter(d,x)))); | ||
+ | </syntaxhighlight> | ||
+ | *Note que nos filtros FIR de fase linear o procedimento mais simples é adiantar o sinal de acordo com o atraso de grupo (metade da ordem do filtro), devendo-se tomar cuidado para arredondar a meia amostra nos filtros de ordem impar. | ||
+ | |||
+ | <syntaxhighlight lang=matlab> | ||
+ | y1 = filter(d,x); | ||
+ | gd = grpdelay(d); | ||
+ | gd1 = ceil(gd(1)); | ||
+ | y = [y1(gd1:end); zeros(gd1-1, 1)]; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | O cálculo do atraso de grupo pode ser realizado utilizando a função '''grpdelay''' ou diretamente pela definição da derivada do ângulo em relação a frequência: | ||
+ | |||
+ | ::<math>\tau_g(\omega) =\frac {d \theta (\omega)} {d \omega} = \lim_{\Delta_{\omega} \to 0} \frac{\theta(\omega+\Delta_{\omega}) - \theta(\omega)}{\Delta_{\omega}} </math> | ||
+ | |||
+ | <syntaxhighlight lang=matlab> | ||
+ | %% Calculo do atraso de grupo usando a função grpdelay | ||
+ | [z,p,k] = butter(30,0.2); | ||
+ | sos = zp2sos(z,p,k); | ||
+ | [gd,w]=grpdelay(sos,128); | ||
+ | figure(1) | ||
+ | plot(w/pi,gd),grid on; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | * Ler [http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=492552 Gustafsson, F. "Determining the initial states in forward-backward filtering." IEEE® Transactions on Signal Processing. Vol. 44, April 1996, pp. 988–992], artigo que propos um técnica de minimizaçao dos transientes de inicio e fim do sistema linear. | ||
+ | |||
+ | ===Unidade 4=== | ||
+ | ;Aula 26 (22 Mai) | ||
+ | *Realização de Filtros | ||
+ | :* Realização de filtros FIR: Forma Direta. | ||
+ | <center>[[Arquivo:FIR_FD_MathWorks.png |800 px]]</center> | ||
+ | <center> Figura 1 - Realização de filtros FIR na Forma Direta </center> | ||
+ | |||
+ | :* Realização de filtros FIR: 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. | ||
+ | |||
+ | <center>[[Arquivo:FIR_FDT_MathWorks.png |800 px]]</center> | ||
+ | <center> Figura 2 - Realização de filtros FIR na Forma Transposta</center> | ||
+ | |||
+ | <center>[[Arquivo:FIR_FDT2_MathWorks.png |800 px]]</center> | ||
+ | <center> Figura 3 - Realização de filtros FIR na Forma Transposta</center> | ||
+ | |||
+ | :* Realização de filtros FIR de fase linear: simétrico tipo I e II e antissimétrico tipo III e IV. | ||
+ | |||
+ | <center>[[Arquivo:FIR_Sym2_MathWorks.png |600 px]]</center> | ||
+ | <center> Figura 4 - Realização de filtros FIR de fase linear Simétrico I </center> | ||
+ | |||
+ | <center>[[Arquivo:FIR_Sym1_MathWorks.png |600 px]]</center> | ||
+ | <center> Figura 5 - Realização de filtros FIR de fase linear Simétrico II </center> | ||
+ | |||
+ | <center>[[Arquivo:FIR_AntiSym3_MathWorks.png |600 px]]</center> | ||
+ | <center> Figura 6 - Realização de filtros FIR de fase linear Antisimétrico III</center> | ||
+ | |||
+ | <center>[[Arquivo:FIR_AntiSym4_MathWorks.png |600 px]]</center> | ||
+ | <center> Figura 7 - Realização de filtros FIR de fase linear Antisimétrico IV</center> | ||
+ | :* Realização de Filtros FIR [http://www.mathworks.com/help/signal/ug/opening-fdatool.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"/>. | ||
+ | |||
+ | |||
+ | ;Aula 27 (26 Mai) | ||
+ | :* Realização de Filtros usando o comando [http://www.mathworks.com/help/dsp/ref/realizemdl.html realizemdl] do MatLab | ||
+ | <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> | ||
+ | |||
+ | * Realização de filtros FIR: Cascata, Polifase | ||
+ | :*Vantagens do uso de filtro Polifase: | ||
+ | ::1) Quando o sinal será subamostrado (downsampling) de "D" amostras após a filtragem, a complexidade da implementação é reduzida de "D" vezes, pois apenas uma das "fases" precisa ser implementada. | ||
+ | ::2) Para reduzir o harware a ser implementado, é possível implementar apenas uma das "fases" do filtro e trocar "D" vezes os coeficientes. | ||
+ | ::* Ver [http://www.mathworks.com/help/dsp/ref/polyphase.html polyphase], [http://www.mathworks.com/help/dsp/ref/mfilt.firdecim.html mfilt.firdecim], [http://www.mathworks.com/help/dsp/ref/dsp.firdecimator-class.html dsp.FIRDecimator] | ||
+ | :* 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. | ||
+ | <center>[[Arquivo:H1_H2_MathWorks.png |600 px]]</center> | ||
+ | <center> Figura 7 - Separação do filtro IIR H(z) em H1(z) e H2(z)</center> | ||
+ | |||
+ | : 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> | ||
+ | <center>[[Arquivo:IIR_FD1_MathWorks.png |600 px]]</center> | ||
+ | <center> Figura 8 - Realização de filtros IIR na Forma Direta I</center> | ||
+ | |||
+ | : 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> | ||
+ | |||
+ | <center>[[Arquivo:IIR_FD2a_MathWorks.png |600 px]]</center> | ||
+ | <center> Figura 9 - Realização de filtros IIR na Forma Direta II</center> | ||
+ | |||
+ | :Considerando que os sinais no centro são idênticos podemos simplificar e obter a Forma Direta II (Canônica): | ||
+ | <center>[[Arquivo:IIR_FD2b_MathWorks.png |600 px]]</center> | ||
+ | <center> Figura 10 - Realização de filtros IIR na Forma Direta II Canônica</center> | ||
+ | |||
+ | :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. | ||
+ | |||
+ | <center>[[Arquivo:IIR_FT1_MathWorks.png |600 px]]</center> | ||
+ | <center> Figura 11 - Realização de filtros IIR na Forma Transposta I</center> | ||
+ | |||
+ | <center>[[Arquivo:IIR_FT2_MathWorks.png |600 px]]</center> | ||
+ | <center> Figura 12 - Realização de filtros IIR na Forma Transposta II</center> | ||
+ | |||
+ | :* 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. | ||
+ | :* Ver [http://www.mathworks.com/help/dsp/ref/biquadfilter.html Biquad Filter] | ||
+ | :* Ver funções do Matlab: [http://www.mathworks.com/help/matlab/ref/roots.html roots], [http://www.mathworks.com/help/matlab/ref/poly.html poly], [http://www.mathworks.com/help/signal/ref/residuez.html residuez], [http://www.mathworks.com/help/signal/ref/tf2zp.html tf2zp], [http://www.mathworks.com/help/signal/ref/zp2tf.html zp2tf], [http://www.mathworks.com/help/signal/ref/zp2sos.html zp2sos], [http://www.mathworks.com/help/signal/ref/tf2sos.html tf2sos], [http://www.mathworks.com/help/signal/ref/tf2latc.html tf2latc]. | ||
+ | :* Implementar o exercício 6.3: Forma direta I, Forma direta II, Cascata. | ||
+ | :* Implementar o exercício 6.13: Forma direta I, Cascata e Paralela. | ||
+ | :*Ver pag. 313 a de 353 <ref name="SHENOI2006"/>. | ||
+ | :*Ver pag. 469 a 474 do Lathi <ref name="Lathi2007"> LATHI, Bhagwandas P. '''Sinais e Sistemas Lineares'''. 2. ed. Porto Alegre: Artmed-Bookman, 2007. 856 p. ISBN 978-8560031139 </ref> | ||
+ | *Filtros Digitais: Ferramentas do Matlab para projeto | ||
+ | :*[http://www.mathworks.com/help/signal/ug/practical-introduction-to-digital-filter-design.html Practical Introduction to Digital Filter Design] | ||
+ | :*[http://www.mathworks.com/help/signal/ug/filter-design-gallery.html Filter Design Gallery] | ||
+ | :*Função para projeto de filtros - [http://www.mathworks.com/help/signal/ref/designfilt.html designfilt] | ||
+ | |||
+ | ;Aula 27 (29 Mai) | ||
+ | *Filtros Digitais: Utilização de filtros FIR | ||
+ | :*Utilizar o [http://audacityteam.org/ Audacity] para gerar sinais de teste. Gere os seguintes sinais e analise seus [http://manual.audacityteam.org/o/man/spectrogram_view.html espectrogramas]: | ||
+ | * Um sinal [https://en.wikipedia.org/wiki/Dual-tone_multi-frequency_signaling DTMF] com duração de 1 segundo com frequência de amostragem de 8 kHz, correspondente aos dígitos 1234567890 ('Dtmf.wav'). | ||
+ | * Um sinal contendo ruído branco com duração de 5 segundo com frequência de amostragem de 8 kHz ('RuidoBranco.wav'). | ||
+ | * Um sinal onda quadra com duração de 2 segundo com frequência de amostragem de 8 kHz e período de 2 ms ('Quadrada.wav'). | ||
+ | Utilize o Matlab para gerar o seguinte sinal: | ||
+ | * Um sinal de varredura de Cosseno entre 0 Hz e 4 kHz com duração de 1 segundo. | ||
+ | <syntaxhighlight lang=matlab> | ||
+ | Fs = 8000; | ||
+ | t = 0:1/Fs:1-1/Fs; | ||
+ | x = chirp(t,0,1,4000); | ||
+ | spectrogram(x, blackman(128), 120, 200, Fs,'yaxis') | ||
+ | audiowrite('Chirp0-4kHz.wav',x,Fs) | ||
+ | sound(x,Fs) % Atenção remova o fone de ouvido antes de realizar este procedimento. | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Utilizar o Matlab para projetar os seguintes filtros FIR e transmitir os sinais obtidos acima. Em todos os filtros considere a frequência de amostragem como 8 kHz, atenuação máxima na banda de passagem de 0,5 dB, e as bandas de transição como 400 Hz. Use a janela de Kaiser. | ||
+ | * Filtro passa-baixas com fc = 1,5 kHz e atenuação de 60 dB na rejeição; | ||
+ | * Filtro passa-altas com fc = 2,5 kHz e atenuação de 30 dB na rejeição; | ||
+ | * Filtro passa faixa com fc1 = 1,5 kHz e fc2 = 2,5 kHz e atenuação de 80 dB na rejeição; | ||
+ | * Filtro rejeita faixa com fc1 = 1,9 kHz e fc2 = 2,1 kHz e atenuação de 80 dB na rejeição; | ||
+ | |||
+ | Após obter os filtros, transmita cada um dos sinais gerados no Audacity através do filtro e verifique o resultado obtido analisando os sinal obtidos comparando o espectrograma com a resposta em magnitude do filtro. | ||
+ | |||
+ | <syntaxhighlight lang=matlab> | ||
+ | [x, Fs] = audioread('Chirp0-4kHz.wav'); % Leitura do sinal | ||
+ | t = (0:length(x)-1)/Fs; % Vetor de tempo | ||
+ | b = fir1(48,[2000 2100]/Fs); % Filtro Hamming com ordem 48 passa faixa | ||
+ | |||
+ | sound(x,Fs) % Atenção remova o fone de ouvido antes de realizar este procedimento. | ||
+ | y = filter(b,1,x); | ||
+ | sound(y,Fs) % Atenção remova o fone de ouvido antes de realizar este procedimento. | ||
+ | subplot(311); spectrogram(x, blackman(128), 100, 200, Fs) | ||
+ | subplot(312); spectrogram(y, blackman(128), 100, 200, Fs) | ||
+ | [Hw, w] = freqz(b,1,2000); | ||
+ | subplot(313); plot(w/pi*Fs/2,20*log10(abs(Hw))); ylim([-100,0]); | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | :*Ver as funções [http://www.mathworks.com/help/matlab/ref/audioread.html audioread], [http://www.mathworks.com/help/matlab/ref/audiowrite.html audiowrite], [http://www.mathworks.com/help/signal/ref/chirp.html chirp], [http://www.mathworks.com/help/signal/ref/spectrogram.html spectrogram], [http://www.mathworks.com/help/matlab/ref/filter.html filter] do Matlab. | ||
+ | |||
+ | ;Aula 29 (2 Jun) | ||
+ | *Filtros Digitais: Quantização | ||
+ | :*Ver [https://www.mathworks.com/help/dsp/ref/fixed-point-filter-properties.html Fixed-Point Filter Properties] | ||
+ | :Ver [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] | ||
+ | <syntaxhighlight lang=matlab> | ||
+ | x=-0.2; | ||
+ | % Word length = 8, fraction length = 7 | ||
+ | q=quantizer([8,7]); | ||
+ | xq=quantize(q,x); | ||
+ | binxq=num2bin(q,xq) | ||
+ | % Word length = 16, fraction length = 15 | ||
+ | q1=quantizer([16 15]); | ||
+ | xq1 = quantize(q1,x); | ||
+ | binxq1=num2bin(q1,xq1) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ===Unidade 5 - PROJETO FINAL=== | ||
+ | ;Aula 30 (5 Jun): | ||
+ | *Apresentação do projeto Final | ||
+ | :* Descrição do projeto '''AE5 - Projeto de um Detector de DTMF''' | ||
+ | |||
+ | ;Aula 31 (9 Jun): | ||
+ | :*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 32 (12 Jun): | ||
+ | :*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. | ||
+ | |||
+ | ;Aula 33 (19 Jun): | ||
+ | * Aula de projeto (implementação da AE5) | ||
+ | |||
+ | ;Aula 34 (23 Jun): | ||
+ | :*Uso do HDL Coder | ||
+ | ::* [http://www.mathworks.com/help/hdlcoder/hdl-code-generation-from-simulink.html HDL Code Generation from Simulink] | ||
+ | ::* [http://www.mathworks.com/help/hdlcoder/simulink.html Simulink® blocks supported for HDL code generation] | ||
+ | |||
+ | :* Exemplo simples. | ||
+ | ::* Inicialmente construa a biblioteca de blocos suportados pelo HDLcoder | ||
+ | hdllib [http://www.mathworks.com/help/hdlcoder/ug/show-blocks-supported-for-hdl-code-generation.html Show Blocks Supported for HDL Code Generation] | ||
+ | |||
+ | ::*Construa o modelo mostrado na figura abaixo. (sugestão de frequência do sinal de 100Hz, e frequência de amostragem deve ser de 1000Hz) | ||
+ | <center> | ||
+ | [[Arquivo:teste_sin_HDLcoder.png | 600 px]] | ||
+ | </center> | ||
+ | ::*coloque o modelo em um subsistema e conecte a saída a um '''Time Scope''' | ||
+ | <center> | ||
+ | [[Arquivo:subsistema_teste_sin_HDLcoder.png | 300 px]] | ||
+ | </center> | ||
+ | ::*Salve o modelo como teste_sin_HDLcoder, e em seguida faça o ajuste automático das configurações usando o comando. | ||
+ | hdlsetup('teste_sin_HDLcoder') | ||
+ | ::* Execute o HDLcoder | ||
+ | ::* Siga o fluxo do HDLcoder passo a passo e corrija eventuais problemas conforme indicado nas mensagens de ERRO. | ||
+ | :::* Será necessário mudar o tipo de dado do bloco seno e constante para fix(16). | ||
+ | ::* Após ter concluído com sucesso o fluxo de codificação HDL, vá até a pasta onde os arquivos VHDL foram gerados e observe que devem ser sido gerados os seguintes arquivos (Subsystem_tb_pkg.vhd Subsystem_tb.vhd Subsystem.vhd) na pasta | ||
+ | cd hdl_prj/hdlsrc/teste_sin_HDLcoder | ||
+ | ls *.vhd | ||
+ | |||
+ | ::* Use o ModelSim para compilar os arquivos e em seguida simular | ||
+ | vsim & | ||
+ | |||
+ | ::* No ModelSim execute os seguintes arquivos .do: | ||
+ | Subsystem_compile.do | ||
+ | Subsystem_tb_compile.do | ||
+ | Subsystem_tb_sim.do | ||
+ | |||
+ | ::* Observe que o sinal gerado pelo código VHDL é igual ao sinal calculado pelo Simulink. | ||
+ | <center> | ||
+ | [[Arquivo:teste_sin_ModelSim.png | 600 px]] | ||
+ | </center> | ||
+ | ::*Observe que no arquivo de testbench, existe uma instrução de ASSERT conferindo se os dois sinais são iguais: | ||
+ | <syntaxhighlight lang=vhdl> | ||
+ | IF Out1_testFailure = '0' THEN | ||
+ | ASSERT FALSE | ||
+ | REPORT "**************TEST COMPLETED (PASSED)**************" | ||
+ | SEVERITY NOTE; | ||
+ | ELSE | ||
+ | ASSERT FALSE | ||
+ | REPORT "**************TEST COMPLETED (FAILED)**************" | ||
+ | SEVERITY NOTE; | ||
+ | END IF; | ||
+ | </syntaxhighlight> | ||
+ | :* Exemplo mais complexo | ||
+ | ::* Abra o modelo | ||
+ | sfir_fixed | ||
+ | ::* ajuste as configurações | ||
+ | hdlsetup('sfir_fixed') | ||
+ | ::*Siga o tutorial [http://www.mathworks.com/help/hdlcoder/gs/example-generating-hdl-code-from-a-simulink-model.html HDL Code Generation from a Simulink Model] | ||
+ | |||
+ | ;Aula 35 a 37 (26 Jun a 3 Jul): | ||
+ | *Implementação do projeto final. | ||
==Avaliações== | ==Avaliações== | ||
* Entrega dos diversos trabalhos ao longo do semestre. | * Entrega dos diversos trabalhos ao longo do semestre. | ||
− | * Projeto Final. O projeto é avaliado nos quesitos: 1) Implementação do Sistema, 2) Documentação, 3) Avaliação Global do aluno no projeto. | + | * Projeto Final. O projeto é avaliado nos quesitos: |
+ | :1) Implementação do Sistema, | ||
+ | :2) Documentação, | ||
+ | :3) Avaliação Global do aluno no projeto. | ||
− | + | Neste tópico serão listadas as atividades avaliativas que os alunos da disciplina deverão realizar ao longo do curso. | |
− | Neste tópico serão listadas as atividades | ||
− | {{collapse top | AE1 - Revisão de Sinais e Sistemas (prazo 03/Mar/2017 as 23h59)}} | + | {{collapse top | AE1 - Revisão de Sinais e Sistemas (prazo 03/Mar/2017 as 23h59)}} - sem atribuição de conceitos. |
:* No Experimento 1.2 | :* No Experimento 1.2 | ||
# Varie o valor da frequência de amostragem de 6 até 20 Hz e observe: | # Varie o valor da frequência de amostragem de 6 até 20 Hz e observe: | ||
Linha 676: | Linha 1 021: | ||
:* Faça um relatório (em pdf) incluindo as principais figuras obtidas e as respostas e conclusões para o email "moecke at ifsc.edu.br" com o Assunto: '''PSD29007 - AE1 - Revisão de Sinais e Sistemas'''. | :* Faça um relatório (em pdf) incluindo as principais figuras obtidas e as respostas e conclusões para o email "moecke at ifsc.edu.br" com o Assunto: '''PSD29007 - AE1 - Revisão de Sinais e Sistemas'''. | ||
{{collapse bottom}} | {{collapse bottom}} | ||
− | + | {{collapse top | AE2 - Projeto de Filtros Digitais IIR (Entrega e prazos ver Moodle)}} | |
− | {{collapse top | ||
Esta avaliação visa verificar se você conhece a metodologia de projeto de filtros digitais IIR: (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, BP, BS, conforme o tipo de filtro desejado; (c) transformação do filtro analógico em filtro digital H(s) -> H(z) utilizando a transformação "Bilinear" ou pela transformação "Invariante ao Impulso". Nesta avaliação é solicitado que cada equipe realize o projeto de dois filtros. | Esta avaliação visa verificar se você conhece a metodologia de projeto de filtros digitais IIR: (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, BP, BS, conforme o tipo de filtro desejado; (c) transformação do filtro analógico em filtro digital H(s) -> H(z) utilizando a transformação "Bilinear" ou pela transformação "Invariante ao Impulso". Nesta avaliação é solicitado que cada equipe realize o projeto de dois filtros. | ||
Linha 731: | Linha 1 075: | ||
::* O "Publish" pode ser utilizado, mas o arquivo entregue deve ser PDF. | ::* O "Publish" pode ser utilizado, mas o arquivo entregue deve ser PDF. | ||
:* Envie o relatório em pdf e os arquivos ".m" utilizados na plataforma [http://moodlenovo.sj.ifsc.edu.br/mod/assign/view.php?id=2431 Moodle]. | :* Envie o relatório em pdf e os arquivos ".m" utilizados na plataforma [http://moodlenovo.sj.ifsc.edu.br/mod/assign/view.php?id=2431 Moodle]. | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | {{collapse top | AE3 - Projeto de Filtros Digitais FIR (Entrega e prazos ver Moodle)}} | ||
+ | Esta avaliação visa verificar se você conhece a metodologia de projeto de filtros digitais FIR: (a) Projeto de filtros com Janela Fixas e Ajustáveis; (b) Projeto de filtros com o algoritmo de Parks-McCleallan; Nesta avaliação é solicitado que cada equipe realize os mesmo dois projeto de filtros da atividade AE2. | ||
+ | :*O primeiro filtro deve ser realizado utilizando uma janela fixa calculando os valores dos coeficientes da série de Fourier, os valores do vetor da janela podem ser obtidos usando as funções do Matlab. O filtro também deve ser projetado usando uma das janelas ajustáveis. | ||
+ | :*O segundo filtro deve ser realizado utilizando uma janela fixa e uma ajustável, podendo ser utilizado diretamente funções do Matlab que projetem o filtro. Neste filtro também deve ser feito o projeto usando o algoritmo de Parks-McCleallan. | ||
+ | :* Para ambos filtros deve indicada a ordem do filtro, o valor de polos e zeros. Procure obter em cada caso a menor ordem que possibilite ter uma resposta de frequência que atende a sua especificação. | ||
+ | :* Deve ser apresentado de forma gráfica a resposta em frequência dos filtros (ganho em dB e fase e atraso de grupo) dos Filtro digital H(z). | ||
+ | :* Apresente o diagrama dos pólos e zeros do filtro H(z) | ||
+ | :* Utilize a mesma escala em dB para os 2 (ou 3 filtros). 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 conforme ilustrado nas figuras da atividade AE2. | ||
+ | :* 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 e metodologia utilizada devem estar documentados. | ||
+ | ::* O "Publish" pode ser utilizado, mas o arquivo entregue deve ser PDF. | ||
+ | :* Envie o relatório em pdf e os arquivos ".m" utilizados na plataforma [http://moodlenovo.sj.ifsc.edu.br/mod/assign/view.php?id=2757]. | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | {{collapse top | AE4 - Realização de Filtro Digitais FIR e IIR (Entrega e prazos ver Moodle)}} | ||
+ | :1. Objetivo projetar filtros que tem a a mesma especificação de magnitude usando diferentes tipos de filtro digital, sendo um do tipo IIR e outro do tipo FIR. Estabelecer uma comparação entre esses filtros e escrever um artigo mostrando as vantagens do filtro escolhido sobre o outro. | ||
+ | :2. É permitido (incentivado) o uso de ferramentas como o FDAtool e funções como o fdesing para o projeto do filtro. | ||
+ | :3. Cada equipe deverá realizar o projeto de um filtro (LP ou HP) e um filtro (BP ou BS), com as especificações dadas na AE2 e AE3. Note que nas atividades AE2 e AE3 os projetos dos filtros foram feitos com precisão infinita (ponto flutuante - 64 bits). Nesta etapa os filtros projetados deverão ser REALIZADOS utilizando no mínimo as seguintes estruturas: | ||
+ | ::* IIR - Forma direta I, II (ou as transpostas correspondentes). | ||
+ | ::* IIR - Em seções de segunda ordem (SOS). | ||
+ | ::* FIR - Forma direta(ou transposta) | ||
+ | ::* FIR - Forma (anti)simétrica. | ||
+ | :4. A segunda etapa do projeto será com precisão finita (usando ponto fixo), devendo o aluno buscar minimizar a área necessária, considerando tanto a ordem do filtro, como o número de bits necessário. Para fins de simplificação, considere que a área de hardware (AHw) necessária para implementar um filtro corresponde a: | ||
+ | :: <math> AHw = max((2 x N_{multiplicadores} + N_{somadores}), N_{atrasos})*N_{bits}. </math> | ||
+ | :: Note que para manter o filtro dentro das especificações talvez seja necessário reprojetar o filtro. | ||
+ | :: Mostre de modo simplificado como o filtro é realizado em cada caso. | ||
+ | :: Indique o valor dos coeficientes após a quantização. | ||
+ | :: Utilize gráficos sobrepostos para comparar a realização dos filtros com diferentes estruturas e quantizações. | ||
+ | :: Utilize uma tabela para resumir os resultados (hardware, ordem, atraso de grupo, número de bits) e compare a implementação usando FIR e IIR. | ||
+ | :5. Escreva um relatório mostrando os resultados obtidos e envie o relatório em pdf e os arquivos ".m" utilizados na plataforma [http://moodlenovo.sj.ifsc.edu.br/mod/assign/view.php?id=2757] | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | ===ATUAL=== | ||
+ | {{collapse top | expand = true | AE5 - Projeto de um Detector de DTMF (Entrega e prazos ver Moodle)}} | ||
+ | |||
+ | * Projeto de um receptor DTMF. | ||
+ | :* cada equipe deverá projetar os discriminadores de frequências correspondente a duas linhas e duas colunas do sistema DTMF. | ||
+ | {| class="wikitable" border="1" cellpadding="3" cellspacing="0" style="text-align:left; font-size:100%" bgcolor="#efefef" | ||
+ | ! scope="col" width=25% align="left"| Equipe | ||
+ | ! scope="col" width=25% align="center"| Linhas | ||
+ | ! scope="col" width=25% align="center"| Colunas | ||
+ | ! scope="col" width=25% align="center"| Teclas | ||
+ | |- | ||
+ | | Equipe 1 || L1, L4 || C2, C3 || 2, 3, 0, # | ||
+ | |- | ||
+ | | Equipe 2 || L2, L4 || C1, C2 || 4, 5, *, 0 | ||
+ | |- | ||
+ | | Equipe 3 || L1, L3 || C1, C3 || 1, 3, 7, 9 | ||
+ | |- | ||
+ | | Equipe 4 || L1, L2 || C2, C3 || 2, 3, 5, 6 | ||
+ | |- | ||
+ | | Equipe 5 || L3, L4 || C1, C2 || 7, 8, *, 0 | ||
+ | |- | ||
+ | | Equipe 6 || L2, L3 || C1, C3 || 4, 6, 7, 9 | ||
+ | |- | ||
+ | | Equipe 7 || L2, L4 || C2, C3 || 5, 6, 0, # | ||
+ | |} | ||
+ | |||
+ | :* As especificações do discriminador de frequência, mostrado na figura, são: | ||
+ | <center> [[Arquivo:DiscriminadorDTMF.png]]</center> | ||
+ | De acordo com [http://www.etsi.org/deliver/etsi_es/201200_201299/20123503/01.01.01_50/es_20123503v010101m.pdf ETSI ES 201 235-3 - Specification of Dual Tone Multi-Frequency (DTMF) Transmitters and Receivers; Part 3: Receivers] as características dos componentes do receptor são: | ||
+ | <code> | ||
+ | — low-pass filter F <= 960 Hz; | ||
+ | — high-pass filter F >= 1190 Hz; | ||
+ | — two threshold comparators; | ||
+ | — eight channel filters (two pole filters: -1,5 dB band pass limits at the nominal frequency ± (1,5%+ 2 Hz)); | ||
+ | — eight rectifiers; | ||
+ | — eight single pole (RC) filters, time constant \tau = 4 a 5 ms. | ||
+ | The thresholds and decision logic are regulated in order not to recognize character signals with a level below -30 dBm | ||
+ | and to recognize valid character signals with a level in the range of -4 dBm to -30 dBm. | ||
+ | </syntaxhighlight> | ||
+ | ::* A frequência de amostragem ''f_s'' do sinal de entrada no sistema mostrado acima é de 8 kHz. | ||
+ | ::* O circuito retificador deve se implementado pela função '''abs'''. | ||
+ | ::* Como sinais de entrada devem com frequência de amostragem de 48kHz e serão utilizados: | ||
+ | :::*1) Os 4 Sinal de DTMF correspondentes as 4 teclas indicadas para a equipe, com duração de 1 segundo | ||
+ | :::*2) Um sinal DTMF correspondente a sequencia de teclas "123456789*0#" com duração de tom de 65ms e pausa de 65ms para cada tecla. (ver [http://www.etsi.org/deliver/etsi_es/201200_201299/20123502/01.01.01_60/es_20123502v010101p.pdf ETSI ES 201 235-2 - Specification of Dual Tone Multi-Frequency (DTMF) Transmitters and Receivers; Part 2: Transmitters]) | ||
+ | :::*3) Os sinais do item (1) e (2) somados a um ruído branco. | ||
+ | ::* A seleção do sinal de entrada e adição do ruido pode ser feita através de chaves manuais. | ||
+ | ::* Neste projeto os sinais de entrada a serem utilizados deverão ser gerados com frequência de amostragem de 48 kHz. Antes de realizar o processamento indicado no diagrama do receptor DTMF, deve ser feita uma filtragem passa-baixa com um filtro de no mínimo 2 polos do tipo Butterworth ou Chebychev 1, com fc = 0.5*48000/6 = 4kHz, seguido de uma subamostragem para a nova frequência de = 8kHz. | ||
+ | ::* A contante de tempo <math> \Tau = RC </math> é equivalente a uma frequência de corte de <math> w_{c} = 1/(2\pi\Tau) </math> | ||
+ | ::* Após realizada a simulação do sistema detector DTMF, o sistema deverá ser convertido para VHDL utilizando o '''HDL coder'''. | ||
+ | ::* Para comprovar o funcionamento do sistema realize a simulação final do sistema no ModelSim. | ||
+ | :* 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 a metodologia utilizada devem estar documentados. Envie o relatório em pdf e os arquivos de projeto utilizando a plataforma Moodle. | ||
+ | ''::* (Opcional) As equipes que desejarem poderão programar o hardware de um kit FPGA para conferir o funcionamento do sistema. Sugere-se que a geração dos sinais DTMF seja feita utilizando um app gerador para Smartphone e usada a interface conversora A/D para capturar os sinais de entrada. '' | ||
+ | |||
+ | :* Ver as especificações DTMF em: | ||
+ | * [http://www.etsi.org/deliver/etsi_es/201200_201299/20123501/01.01.01_50/es_20123501v010101m.pdf ETSI ES 201 235-1 - Specification of Dual Tone Multi-Frequency (DTMF) Transmitters and Receivers; Part 1: General] | ||
+ | * [http://www.etsi.org/deliver/etsi_es/201200_201299/20123502/01.01.01_60/es_20123502v010101p.pdf ETSI ES 201 235-2 - Specification of Dual Tone Multi-Frequency (DTMF) Transmitters and Receivers; Part 2: Transmitters] | ||
+ | * [http://www.etsi.org/deliver/etsi_es/201200_201299/20123503/01.01.01_50/es_20123503v010101m.pdf ETSI ES 201 235-3 - Specification of Dual Tone Multi-Frequency (DTMF) Transmitters and Receivers; Part 3: Receivers] | ||
+ | * [http://www.etsi.org/deliver/etsi_es/201200_201299/20123504/01.01.01_50/es_20123504v010101m.pdf ETSI ES 201 235-4 - Specification of Dual Tone Multi-Frequency (DTMF) Transmitters and Receivers; Part 4: Receivers for use in Terminal Equipment for end-to-end signalling] | ||
+ | |||
+ | |||
{{collapse bottom}} | {{collapse bottom}} | ||
Edição atual tal como às 18h39min de 7 de julho de 2017
Registro on-line das aulas
Unidade 1
- Aula 1 (10 Fev)
- Revisão de Sinais e Sistemas no tempo discreto em Matlab:
- Resposta de sistemas LTI (Experimento 1.1)
- Relembrar o conceito de equação de diferenças de um sistema LTI discreto e resposta ao impulso.
- Resposta ao delta de Kronecker do sistema LTI discreto
- onde , e logo
% Exemplos e Experimentos baseados no livro:
% 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.
%% Experimento 1.1
alpha = 1.15; N = 256;
x = [1 zeros(1,N)];
y = filter(1,[1 -1/alpha],x);
stem(y);
- Amostragem de Sinais (Experimento 1.2)
- Relembrar teorema da amostragem. Efeito da amostragem abaixo da frequência de Nyquist. Aliasing.
- Notar que as amostras de um sinal (3 Hz) e um sinal (7 Hz) são idênticas quando amostrado com um sinal de 10 Hz.
% Exemplos e Experimentos baseados no livro:
% 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.
%% Experimento 1.2
fs = 10; % frequencia (Hz) de amostragem dos sinais
Ts = 1/fs; fase = 0;
time = 0:Ts:(1-Ts);
f1 = 3; % frequencia (Hz) do sinal s_1
f2 = 7; % frequencia (Hz) do sinal s_2
s_1 = cos(2*pi*f1*time+fase);
s_2 = cos(2*pi*f2*time+fase);
fsa = 1000; % frequência auxiliar de amostragem usada apenas para representação dos sinais originais
Tsa = 1/fsa;
time_aux = 0:Tsa:(1-Tsa);
figure(1);
stem(time,s_1,'ob');
hold on;
plot(time_aux, cos(2*pi*f1*time_aux+fase),'--k');
stem(time,s_2,'+r');
plot(time_aux, cos(2*pi*f2*time_aux+fase),'--m');
hold off;
legend('s_1 discreto','s_1 contínuo','s_2 discreto','s_2 contínuo')
- Uso do Matlab: Help, F9 executa o código destacado no Help. Programação com scripts .m, Execução de seções e variação de valores nos scripts,
- Ver no Matlab: zeros, ones, plot, stem, subplot, filter.
- Uso de gráficos no Matlab.
- Ver pag. 65 a 71 de [1]
- Ver também PDF Documentation for MATLAB. Principalmente MATLAB Primer.
- Aula 2 (13 Fev)
- Revisão de Sinais e Sistemas no tempo discreto em Matlab:
- Filtragem de Sinais (Experimentos 1.3, 2.1 e 2.2)
- Consulte a documentação do Matlab sobre
roots, poly, linspace, logspace
- Uso de residue, residuez, pretty, latex, freqs, freqz, syms, symfun, zplane.
- Ver também o Publish para a geração automática de relatórios em html, doc, pdf, latex ou ppt. Ver também Publishing MATLAB Code.
- Ver pag. 138 a 141 de [1]
Variação do Experimento 2.2 |
---|
% Exemplos e Experimentos baseados no livro:
% 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.
%% Experimento 2.2
% Resposta em frequencia usando a função freqz
N = 1;
num = [1 0 0 0];
den = poly([0.8 0.2])
%den = [1 0.6 -0.16];
% modo 1
%[H,w]=freqz(num,den,[0:pi/100:N*pi-pi/100]);
%plot(w/pi, abs(H));
% modo 2
%[H,w]=freqz(num,den);
%plot(w/pi, abs(H));
% modo 3
%[H,w]=freqz(num, den, 'whole');
%plot(w/pi, abs(H));
% modo 4
freqz(num, den, 'whole');
figure(2);
zplane(num,den);
%% Resposta em frequencia substituindo z -> e^(jw)
syms z
Hf(z) = symfun(z^2/(z-0.2)/(z+0.8),z);
pretty(Hf)
latex(Hf)
N = 1;
w = [0:pi/100:N*pi-pi/100];
plot(w/pi,abs(Hf(exp(1i*w))))
%title(['$' latex(Hf) '$'],'interpreter','latex')
text(0.2,2,['H(z) = ' '$$' latex(Hf) '$$'],'interpreter','latex')
xlabel(['w/' '$$' '\pi' '$$'],'interpreter','latex')
|
- Aula 3 (17 Fev)
- Revisão de Sinais e Sistemas no tempo discreto em Matlab:
- Filtragem de Sinais
Variação do Experimento 3.1 |
---|
%% Variação do Experimento 3.1 do livro:
% 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.
% FILE: Ex3_1.m
% Exemplificando as possiveis formas de realizar a filtragem de um sinal x(n)
clc; clear all; close all;
%% Definindo valores iniciais
Nh = 10; Nx = 20;
%Nh = 400; Nx = 10000;
x = ones(1,Nx);
% A resposta ao inpulso de um sistema h(n)
% no filtro FIR aos coeficientes b(n) = h(n)
h = [1:Nh]; b = h;
%% Filtrando o sinal e medindo tempos
% Filtragem utilizando a convolução
% NOTE: length(y) = length(x) + length(h) -1
tic; % iniciar a contagem do tempo
y1 = conv(x,h);
t(1) = toc; % terminar acontagem e mostrar tempo no console
% filtragem utilizando a equação recursiva
% NOTE: length(y) = length(x)
tic;
y2 = filter(b,1,x);
t(2) = toc;
% filtragem utilizando a equação recursiva
% aumentando o tamanho de x para que length(y3) = length(y1)
x3 = [x zeros(1,length(h)-1)];
tic;
y3 = filter(h,1,x3);
t(3) = toc;
length_y = length(x) + length(h) - 1;
% filtragem utilizando a FFT
% a y = IFFT(FFT(x)*FFT(h))
tic;
X = fft(x,length_y);
H = fft(h,length_y);
Y4 = X.*H;
y4 = ifft(Y4);
t(4) = toc;
% filtragem utilizando a função fftfilt
% a y = IFFT(FFT(x)*FFT(h))
tic
y5 = fftfilt(h,x3);
t(5) = toc;
disp('Comprimento do vetor de saída length(y)')
disp([' ' num2str([length(y1) length(y2) length(y3) length(y4) length(y5)])])
disp('Tempo usado na filtragem em micro segundos')
disp([' ' num2str(t*1e6) ' us'])
%% Plotando o gráfico
subplot(411);stem(y1);
hold on;
stem(y2,'xr');
stem(y3,'+m');
legend('y1', 'y2', 'y3')
hold off
subplot(412);stem(y1, 'ob');legend('y1')
subplot(413);stem(y2, 'xr'); hold on; stem(zeros(size(y1)),'.w');hold off; legend('y2')
subplot(414);stem(y3, '+m');legend('y3')
|
- Análise de Sinais (Experimento 3.2) - Análise de um sistema h[n] correspondente a um filtro passa-faixa, utilizando um sinal de entrada x[n] senoidal (ou um sinal r[n] de ruído branco). Análise da entrada x[n] e saída y[n] usando a fft.
Variação do Experimento 3.2 |
---|
%% Variação do Experimento 3.2 do livro:
% 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.
% FILE: Ex3_2.m
% Análise de sinais no domínio da frequência
fs = 200; % frequência de amostragem
f_sinal = 10; A_sinal = 1; % freqüência e amplitude do sinal
T = 1; % Duração do sinal
k_noise = 0.2; % Intensidade do ruído
snr = 0;
time = 0 : 1/fs : (T-1/fs);
L = length(time);
freq = time * fs/T;
% Sinal x(n) com amplitude A_sinal e frequencia de f_sinal (Hz)
x = A_sinal*sin(2*pi*f_sinal.*time);
% Adicionando um ruido com a função randn
noise = k_noise*randn(1,fs*T);
x1 = x + noise;
% Adicionando um ruido com a função awgn
x2 = awgn(x,snr);
% Obtendo o sinal no domínio da frequencia
X = abs(fft(x))/L;
X1 = abs(fft(x1))/L;
X2 = abs(fft(x2))/L;
% Obtendo os plots dos sinais no dominio do tempo e domínio da frequencia
figure(1);
subplot(211);plot(time,x, 'b', time,x1, 'g', time, x2, 'r');
legend('x(n)', 'x(n)+rand', 'x(n)awgn', 'Location','south')
xlabel('Tempo (seg)'); ylabel('Magnitude (linear)');
subplot(212);plot(freq, (abs(X)), 'b'); hold on ;plot(freq, (abs(X1)),'g');plot(freq,(abs(X2)),'r');
legend('X(f)', 'X(f)+rand', 'X(f)+awgn', 'Location','south'); hold off;
xlabel('Frequencia (Hz)'); ylabel('Magnitude (linear)');
|
- Filtros Digitais (Experimento 2.3)
- Aula 4 - 5 (20 - 24 Fev)
- Revisão de Sinais e Sistemas no tempo discreto em Matlab:
- Filtros Digitais
%% Experimento 2.3 - Filtros Digitais
% Exemplos e Experimentos baseados no livro:
% 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.
% FILE: Exp2_3.m
%% 1º filtro
p1 = 0.9*exp(1j*pi/4);
Z = [1 -1 ]'; P = [p1 p1']';
[num,den] = zp2tf(Z,P,1);
[h,w] = freqz(num,den);
figure(1); plot(w,abs(h)/max(abs(h)));
figure(2); zplane(num,den);
%% 2º filtro
z1 = exp(1j*pi/8);
z2 = exp(1j*3*pi/8);
p1 = 0.9*exp(1j*pi/4);
Z = [1 -1 z1 z1' z2 z2']';
P = [p1 p1' p1 p1' p1 p1']';
[num,den] = zp2tf(Z,P,1);
[h,w] = freqz(num,den);
figure(1); plot(w,abs(h)/max(abs(h)));
figure(2); zplane(num,den);
%% 3º filtro
z1 = exp(1j*pi/8);
z2 = exp(1j*3*pi/8);
p1 = 0.99*exp(1j*pi/4);
p2 = 0.9*exp(1j*pi/4 - 1j*pi/30);
p3 = 0.9*exp(1j*pi/4 + 1j*pi/30);
Z = [1 -1 z1 z1' z2 z2']';
P = [p1 p1' p2 p2' p3 p3']';
[num,den] = zp2tf(Z,P,1);
[h,w] = freqz(num,den);
figure(1); plot(w,abs(h)/max(abs(h)));
figure(2); zplane(num,den);
- Exercício - Sinal DTMF com ruído
- Verifique se o Matlab está reproduzindo corretamente o som.
%% Carregando o som
clear, close, clc
load handel;
%% Reproduzindo o som
sound(y,Fs)
% Reproduzindo o som
%soundsc(y,Fs)
% Reproduzindo o som
%player = audioplayer(y, Fs);
%play(player);
- Usando o Matlab (ou Audacity) para gerar um sinal DTMF correspondente a um número N e adicionar um ruido ao sinal. Opcionalmente utilize um sinal DTMF gravado
- Utilizar uma frequência de amostragem de 8000Hz de fazer a duração do sinal igual a 2 segundos.
- Para adicionar o ruído utilize a função y = awgn(x,snr), ou y = x + nivel*randn(n).
- Observe este sinal no domínio do tempo (DT) e domínio da frequência (DF).
%% Carregando o som
clear, close, clc
[y,Fs] = audioread('DTMF_8kHz.ogg');
%% Reproduzindo o som
sound(y,Fs)
%% Visualizando o som no DT
time = [0:length(y)-1]'/Fs;
plot(time',y'); xlabel('segundos');
xlim([0 time(end)]), ylim([-1 1]);
%% Visualizando o som no DF
Nfreq = length(y);
freq = linspace(0,2*pi,Nfreq)'*Fs/pi/2;
Y = fft(y,Nfreq)/Nfreq;
plot(freq,abs(Y)); xlabel('Hertz');
xlim([0 Fs/2]);
- Filtrar o sinal resultante mantendo apenas a frequência da linha (ou coluna)
- Mostrar os sinais no domínio do tempo e da frequência.
- x1,X1 - soma das duas senoides.
- x2,X1 - soma de x1 com o ruído branco (gaussiano)
- y,Y - sinal filtrado.
- Para a filtragem:
- faça a filtragem no domínio do tempo, usando a função filter posicionando o polo sobre a frequência que deseja passar, e coloque um zero sobre a frequência que deseja rejeitar.
- faça a filtragem no domínio da frequência, convertendo o sinal x1 para DF usando X1 = fft(x1), Y = X1.*H, y = ifft(Y), onde H é um vetor de zeros e uns que indica as frequências que devem passar e quais devem ser rejeitadas.
- VER (Experimento 3.1, Experimento 3.2, Experimento 2.3)
- Aula (3 Mar)
- 1ª defesas de TCC do Curso de Engenharia de Telecomunicações.
- Alunos assistiram a defesa no auditório das 10:00 as 12:35
Unidade 2
- Aula 7 (6 Mar)
- Filtros Analógicos:
- Função de transferência
- Resposta em frequência: para obter a resposta em frequência é necessário avaliar
- O projeto de filtros analógicos é realizado em 2 etapas:
- projeto de um filtro passa baixas (LP) protótipo normalizado com frequência de passagem
- transformação em frequência para o tipo de filtro (LP, HP, BP ou BS)
- Aula 8 e 9 (10 e 13 Mar)
- Projeto de filtros analógicos do tipo Butterworth
- A aproximação de magnitude de filtros analógicos pode ser realizado usando as aproximações de Butterworth, Chebyshev (tipo 1 ou 2) e Cauer.
- Projeto de filtros analógicos do tipo Butterworth, considerando: é a frequência de passagem do filtro LP, é a atenuação em dB na frequência de passagem, é a frequência de stopband do filtro, é a atenuação em dB na frequência de stopband, , , são as frequências de passagem e stopband do filtro protótipo.
- É necessário determinar a ordem do filtro:
- Em seguida obter os polos do filtro:
- Em seguida é necessário obter a função de transferência:
- , onde
- No caso de um filtro LP é necessário ainda obter a função de transferência do filtro especificado
- Ver pag. 186 a 204 de [2]
- Aula 10 (17 Mar)
- Projeto de filtros analógicos do tipo Chebyshev I.
- Determine a ordem mínima necessária:
- Em seguida obter os polos do filtro:
- , onde
- Ver pag. 204 a 208 de [2]
- Aula 11 (20 Mar)
- Filtros Analógicos:
- Uso das funções buttord, butter, cheb1ord, cheby1, cheb2ord, cheby2, ellipord, ellip para o projeto de filtros analógicos com Matlab (é necessário usar o parâmetro 's').
- Ler Comparison of Analog IIR Lowpass Filters em ellip
- Uso das funções freqs, "zplane", fvtool na análise da resposta em frequência de filtros analógicos.
- Exemplos de projeto de filtro passa-baixas com frequência de passagem de 16000 rad/s com atenuação máxima de 0.3 dB, frequência de rejeição de 20000 rad/s com atenuação mínima de 20 dB; e ganho em DC de 3 dB.
%% 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');
- Transformação de frequência de filtros analógicos
- (passa-baixas -> passa-baixas, passa-baixas -> passa-altas, passa-baixas -> passa-faixa, passa-baixas -> rejeita-faixa)
- Uso das funções semilogx, semilogy,logspace, linspace.
- Ver em IIR Filter Design,
- Funções para projeto do filtro protótipo analógico passa-baixas: besselap, buttap, cheb1ap, cheb2ap, ellipap
- Funções de transformação de frequencia: lp2bp, lp2bs, lp2hp, lp2lp
- Ver pag. 208 a 218 de [2]
- Aula 12 e 13 (24 e 27 Mar)
- Filtros Digitais: Filtros IIR: transformações do tempo contínuo no tempo discreto
- Aula 14 a 16 (31 Mar a 7 Abr)
- Filtros Digitais: Filtros IIR: Uso do Matlab.
-
- Ver em IIR Filter Design
- Uso das funções buttord, butter, cheb1ord, cheby1, cheb2ord, cheby2, ellipord, ellip para o projeto de filtros IIR digitais (sem o parâmetro 's').
- O projeto dos filtros digitais IIR baseados na transformada bilinear no Matlab é realizada em dois passos: (1) Determinação da ordem do filtro; (2) Determinação dos coeficientes do numerador e denominador de .
Unidade 3
- Aula 17 (10 Abr)
- Filtros Digitais: Filtros FIR
- Filtros de fase linear: simétricos e antisimétricos (Tipo 1, 2, 3 e 4)
- Filtros de fase linear: propriedades (respostas em frequencia possíveis, distribuição dos zeros em simetria quadrantal)
- Ver pag. 249 a 256 de [2]
- Ver FIR Filter Design
- Aula 18 (17 Abr)
-
- Projeto de FILTRO IIR
- Atividade a distância, com laboratório liberado para uso dos alunos para a realização da AE2.
- Aula 19 (24 Abr)
- Filtros Digitais: Filtros FIR:
- Coeficientes da série de Fourier de filtros ideias: LP, HP, BP, BS
- Passa-baixas (Low-pass)
-
- Passa-altas (High-pass)
-
- Passa-faixa (Band-pass)
-
- Rejeita-banda (Band-stop)
- Uso de funções de janelamento temporal no projeto de filtros digitais.
- Tipos de janelas temporais usadas no projeto de filtros digitais.
- Retangular
- Bartlett
- Hanning
- Hamming
- Blackman
- em todas as janelas quando
- onde é para par e para impar
- Filtros Digitais: Filtros FIR
- Projeto de filtro FIR utilizando janelas temporais
- Uso de janelas fixas no Matlab : rect, triang, bartlett, hann, hamming, blackman, blackmanharris, nuttall.
L = 64;
wvtool(rectwin(L), triang(L), bartlett(L), hann(L), hamming(L), blackman(L), blackmanharris(L), nuttallwin(L));
Tabela 5.1
Janela | |||
---|---|---|---|
Retangular | 13.3 | 20.33 | 0.92/M |
Triangular | 26.6 | 27.41 | |
Bartlett | 26.5 | 27.48 | |
Hann | 31.5 | 44.03 | 3.11/M |
Bartlett-Hanning | 35.9 | 40.77 | |
Hamming | 42.5 | 54.08 | 3.32/M |
Bohman | 46.0 | 51.84 | 7.01/M |
Parzen | 53.1 | 56.89 | |
Backman | 58.1 | 75.25 | 5.56/M |
Flat Top | 88.0 | 106.3 | |
Backman-Harris | 92.1 | 108.8 | |
Nutfall | 93.8 | 109.7 |
- Dados acima obtidos para um filtro passa baixas de ordem N = 64 com
- Ver pag. 256 a 265 de [2]
- (28 Abr)
-
- Adesão a Greve Geral
- Aula 21 (5 Mai)
- Filtros Digitais: Filtros FIR
- Projeto de filtro FIR utilizando janelas temporais fixas.
- Exemplo de projeto
Projetar um filtro passa baixas usando uma janela temporal fixa. wp = 0.2*pi; Ap = 0.2 dB; Gp = 0 dB ws = 0.3*pi; As = 60 dB;
- Use como uma estimativa inicial os valores da Tabela 5.1 pag. 268
- 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
- PASSO 3 - Calcule os coeficientes clp do filtro LP , calcule os valores da janela w e obtenha a resposta ao impulso do filtro h = clp * w.
- PASSO 4 - Verifique o valor real de Dwr = wAs-wAp, e faça a correção da ordem do filtro em função do desvio constatado. N2 = N*Dwr/Dw.
- PASSO 5 - Corrija o valor de projeto dos coeficientes Clp do filtro ideal, a janela e a resposta ao impulso.
- Repita o PASSO 3 até 5, até obter um filtro que atenda as especificações de Dw.
- PASSO 6 - Desloque a frequência de corte wc de modo a obter o valor correto de wp. wc2 = wp + (wp-wAp).
- Projeto de filtro FIR.
- Projete os dois filtros projetados anteriormente como IIR, utilizando 3 janelas diferentes. Compare os filtros obtidos com os filtros IIR.
- Use como uma estimativa inicial os valores da Tabela 5.1 pag. 268
- Aula 22 (8 Mai)
- Filtros Digitais: Filtros FIR
- Projeto de filtro FIR utilizando janelas temporais
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.
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"
fsamp = 8000;
fcuts = [1000 1500];
mags = [1 0];
devs = [0.01 0.01];
[n,Wn,beta,ftype] = kaiserord(fcuts,mags,devs,fsamp);
Com os parâmetros é possível projetar o filtro usando a função fir1, que utiliza o método da janela para o projeto do filtro.
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)
- Aula 23 (12 Mai)
- Filtros Digitais: Filtros FIR
%% Exemplo de Filtro wp1 = 0.1 \pi; ws1 = 0.2 \pi; ws2 = 0.6 \pi; wp2 = 0.8 \pi; Ap = 1 dB; Ar = 40 dB; </syntaxhighlight>
- Aula 24 (15 Mai)
%% Exemplo de Filtro
fp = 3000 Hz;
fr = 4000 Hz;
fs = 20000 Hz;
Ap = 1 dB;
Ar = 40 dB;
- Aula 25 (19 Mai)
- Atraso de grupo em filtros IIR e FIR no Matlab
- O atraso de grupo de um filtro é a medida da atraso médio do filtro em função da frequência do sinal de entrada. Ele é obtido pela primeira derivada da resposta de fase do filtro. Se a resposta em frequencia é , então o atraso de grupo é:
- onde é a fase de .
- Um filtro sem distorção de fase (Não causal) pode ser obtido ao passar uma sequencia x(n) por um filtro H1, tomando a saída do filtro revertida e passando novamente pelo mesmo filtro H1. A saída do último filtro revertida corresponde ao sinal x(n) filtro com fase zero. O filtro obtido desta forma tem as seguintes características:
- A Distorção de fase nula
- A função de transferência do filtro é igual a magnitude ao quadrada da função de transferência original do filtro H1.
- A ordem do filtro é o dobro da ordem do filtro H1.
- Exemplo de aplicação a filtragem de um sinal ECG com ruído Arquivo:Noisyecg.txt noisyecg.mat:
%% Carregando um sinal de ECG com ruído com duração de 4 segundos.
load noisyecg.mat
x = noisyECG_withTrend;
fa = 500; %% 2000 amostras em 4 segundos => 500 amostras por segundo.
t = [0:length(x)-1]*1/fa;
plot(t,x);
%% Projetando um filtro passa-baixa tipo IIR butter com f_passagem = 0.15 rad/s
d = designfilt('lowpassiir', ...
'PassbandFrequency',0.15,'StopbandFrequency',0.2, ...
'PassbandRipple',1,'StopbandAttenuation',60, ...
'DesignMethod','butter');
freqz(d)
%% Filtro de x revertido x e somando com x filtrado. OFF LINE
y = flip(filter(d,flip(filter(d,x))));
y1 = filter(d,x);
figure(2);
subplot(2,1,1)
plot(t, [y y1])
title('Filtered Waveforms')
legend('Zero-phase Filtering','Conventional Filtering')
subplot(2,1,2)
plot(t, [x y])
title('Original Waveform')
legend('noisy ecg ','fitered ecg')
- Verifique também o resultado da filtragem usando um filtro IIR (ellip, cheby1 ou cheby2) e filtros FIR (equiripple e de janela)
%% Projetando um filtro passa-baixa tipo FIR equiripple com f_passagem = 0.15 rad/s
d = designfilt('lowpassfir', ...
'PassbandFrequency',0.15,'StopbandFrequency',0.2, ...
'PassbandRipple',1,'StopbandAttenuation',60, ...
'DesignMethod','equiripple');
y = flip(filter(d,flip(filter(d,x))));
- Note que nos filtros FIR de fase linear o procedimento mais simples é adiantar o sinal de acordo com o atraso de grupo (metade da ordem do filtro), devendo-se tomar cuidado para arredondar a meia amostra nos filtros de ordem impar.
y1 = filter(d,x);
gd = grpdelay(d);
gd1 = ceil(gd(1));
y = [y1(gd1:end); zeros(gd1-1, 1)];
O cálculo do atraso de grupo pode ser realizado utilizando a função grpdelay ou diretamente pela definição da derivada do ângulo em relação a frequência:
%% Calculo do atraso de grupo usando a função grpdelay
[z,p,k] = butter(30,0.2);
sos = zp2sos(z,p,k);
[gd,w]=grpdelay(sos,128);
figure(1)
plot(w/pi,gd),grid on;
- Ler Gustafsson, F. "Determining the initial states in forward-backward filtering." IEEE® Transactions on Signal Processing. Vol. 44, April 1996, pp. 988–992, artigo que propos um técnica de minimizaçao dos transientes de inicio e fim do sistema linear.
Unidade 4
- Aula 26 (22 Mai)
- Realização de Filtros
- Realização de filtros FIR: Forma Direta.
- Realização de filtros FIR: 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.
- Realização de filtros FIR de fase linear: simétrico tipo I e II e antissimétrico tipo III e IV.
- Realização de Filtros FIR usando o FDATool
- Estudar estrutura de filtros disrcetos FIR no Matlab, Filter Realization Wizard - Reference, Filter Realization Wizard - User Guide.
- Ver pag. 303 a 312 de [2].
- Aula 27 (26 Mai)
-
- Realização de Filtros usando o comando realizemdl do 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');
- Realização de filtros FIR: Cascata, Polifase
- Vantagens do uso de filtro Polifase:
- 1) Quando o sinal será subamostrado (downsampling) de "D" amostras após a filtragem, a complexidade da implementação é reduzida de "D" vezes, pois apenas uma das "fases" precisa ser implementada.
- 2) Para reduzir o harware a ser implementado, é possível implementar apenas uma das "fases" do filtro e trocar "D" vezes os coeficientes.
- Realização de filtros IIR de 2ª ordem: Forma Direta I e II, e Forma Transposta I e II.
-
- Separando H(z) em dois blocos , e obtendo o sinal intermediário W(z) ou Y(z) dependendo da ordem dos blocos.
- Com o ordenamento dos blocos e em ordem direta teremos a Forma Direta I:
- Podemos obter a realização de na forma direta.
- Para obter a realização de , é necessário reescrever a saída em função de e das saídas anteriores e :
- Com o ordenamento dos blocos e em ordem reversa teremos a Forma Direta II:
- Considerando que os sinais no centro são idênticos podemos simplificar e obter a Forma Direta II (Canônica):
- 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.
- 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.
- Filtros Digitais: Ferramentas do Matlab para projeto
- Practical Introduction to Digital Filter Design
- Filter Design Gallery
- Função para projeto de filtros - designfilt
- Aula 27 (29 Mai)
- Filtros Digitais: Utilização de filtros FIR
- Utilizar o Audacity para gerar sinais de teste. Gere os seguintes sinais e analise seus espectrogramas:
- Um sinal DTMF com duração de 1 segundo com frequência de amostragem de 8 kHz, correspondente aos dígitos 1234567890 ('Dtmf.wav').
- Um sinal contendo ruído branco com duração de 5 segundo com frequência de amostragem de 8 kHz ('RuidoBranco.wav').
- Um sinal onda quadra com duração de 2 segundo com frequência de amostragem de 8 kHz e período de 2 ms ('Quadrada.wav').
Utilize o Matlab para gerar o seguinte sinal:
- Um sinal de varredura de Cosseno entre 0 Hz e 4 kHz com duração de 1 segundo.
Fs = 8000;
t = 0:1/Fs:1-1/Fs;
x = chirp(t,0,1,4000);
spectrogram(x, blackman(128), 120, 200, Fs,'yaxis')
audiowrite('Chirp0-4kHz.wav',x,Fs)
sound(x,Fs) % Atenção remova o fone de ouvido antes de realizar este procedimento.
Utilizar o Matlab para projetar os seguintes filtros FIR e transmitir os sinais obtidos acima. Em todos os filtros considere a frequência de amostragem como 8 kHz, atenuação máxima na banda de passagem de 0,5 dB, e as bandas de transição como 400 Hz. Use a janela de Kaiser.
- Filtro passa-baixas com fc = 1,5 kHz e atenuação de 60 dB na rejeição;
- Filtro passa-altas com fc = 2,5 kHz e atenuação de 30 dB na rejeição;
- Filtro passa faixa com fc1 = 1,5 kHz e fc2 = 2,5 kHz e atenuação de 80 dB na rejeição;
- Filtro rejeita faixa com fc1 = 1,9 kHz e fc2 = 2,1 kHz e atenuação de 80 dB na rejeição;
Após obter os filtros, transmita cada um dos sinais gerados no Audacity através do filtro e verifique o resultado obtido analisando os sinal obtidos comparando o espectrograma com a resposta em magnitude do filtro.
[x, Fs] = audioread('Chirp0-4kHz.wav'); % Leitura do sinal
t = (0:length(x)-1)/Fs; % Vetor de tempo
b = fir1(48,[2000 2100]/Fs); % Filtro Hamming com ordem 48 passa faixa
sound(x,Fs) % Atenção remova o fone de ouvido antes de realizar este procedimento.
y = filter(b,1,x);
sound(y,Fs) % Atenção remova o fone de ouvido antes de realizar este procedimento.
subplot(311); spectrogram(x, blackman(128), 100, 200, Fs)
subplot(312); spectrogram(y, blackman(128), 100, 200, Fs)
[Hw, w] = freqz(b,1,2000);
subplot(313); plot(w/pi*Fs/2,20*log10(abs(Hw))); ylim([-100,0]);
- Ver as funções audioread, audiowrite, chirp, spectrogram, filter do Matlab.
- Aula 29 (2 Jun)
- Filtros Digitais: Quantização
x=-0.2;
% Word length = 8, fraction length = 7
q=quantizer([8,7]);
xq=quantize(q,x);
binxq=num2bin(q,xq)
% Word length = 16, fraction length = 15
q1=quantizer([16 15]);
xq1 = quantize(q1,x);
binxq1=num2bin(q1,xq1)
Unidade 5 - PROJETO FINAL
- Aula 30 (5 Jun)
- Apresentação do projeto Final
- Descrição do projeto AE5 - Projeto de um Detector de DTMF
- Aula 31 (9 Jun)
-
- Uso do Simulink
- Uso dos blocos de simulação sinewave, scope e Spectrum Analyzer.
- Outros blocos mux, demux, sum, product.
- Create Simple Model [2]
- Aula 32 (12 Jun)
-
- Uso do Simulink
- Tipos de Solver (Choose a Solver).
- Diferença entre processamento por amostra e processamento por quadro (Sample- and Frame-Based Concepts).
- Exemplos:
- Filtragem - frame based
- Modulações Analógicas
- Amostragem de sinais
- Digital Filter Design Block, [3], [4]
- É importante ler informações complementares sobre o Solver Pane, Model Simulation, Types of Solvers, Solvers for Discrete-Event Systems.
- É importante ler informações complementares sobre, Tempo de amostragem (Time Sample), View Sample Time Information, Vector Concatenate, Matrix Concatenate
Para configurar o Simulink para sistemas discretos execute o comando dspstartup.m antes de abrir um novo modelo.
- Aula 33 (19 Jun)
- Aula de projeto (implementação da AE5)
- Aula 34 (23 Jun)
-
- Uso do HDL Coder
- Exemplo simples.
- Inicialmente construa a biblioteca de blocos suportados pelo HDLcoder
hdllib Show Blocks Supported for HDL Code Generation
- Construa o modelo mostrado na figura abaixo. (sugestão de frequência do sinal de 100Hz, e frequência de amostragem deve ser de 1000Hz)
- coloque o modelo em um subsistema e conecte a saída a um Time Scope
- Salve o modelo como teste_sin_HDLcoder, e em seguida faça o ajuste automático das configurações usando o comando.
hdlsetup('teste_sin_HDLcoder')
- Execute o HDLcoder
- Siga o fluxo do HDLcoder passo a passo e corrija eventuais problemas conforme indicado nas mensagens de ERRO.
- Será necessário mudar o tipo de dado do bloco seno e constante para fix(16).
- Após ter concluído com sucesso o fluxo de codificação HDL, vá até a pasta onde os arquivos VHDL foram gerados e observe que devem ser sido gerados os seguintes arquivos (Subsystem_tb_pkg.vhd Subsystem_tb.vhd Subsystem.vhd) na pasta
cd hdl_prj/hdlsrc/teste_sin_HDLcoder ls *.vhd
- Use o ModelSim para compilar os arquivos e em seguida simular
vsim &
- No ModelSim execute os seguintes arquivos .do:
Subsystem_compile.do Subsystem_tb_compile.do Subsystem_tb_sim.do
- Observe que o sinal gerado pelo código VHDL é igual ao sinal calculado pelo Simulink.
- Observe que no arquivo de testbench, existe uma instrução de ASSERT conferindo se os dois sinais são iguais:
IF Out1_testFailure = '0' THEN
ASSERT FALSE
REPORT "**************TEST COMPLETED (PASSED)**************"
SEVERITY NOTE;
ELSE
ASSERT FALSE
REPORT "**************TEST COMPLETED (FAILED)**************"
SEVERITY NOTE;
END IF;
- Exemplo mais complexo
- Abra o modelo
sfir_fixed
- ajuste as configurações
hdlsetup('sfir_fixed')
- Siga o tutorial HDL Code Generation from a Simulink Model
- Aula 35 a 37 (26 Jun a 3 Jul)
- Implementação do projeto final.
Avaliações
- Entrega dos diversos trabalhos ao longo do semestre.
- Projeto Final. O projeto é avaliado nos quesitos:
- 1) Implementação do Sistema,
- 2) Documentação,
- 3) Avaliação Global do aluno no projeto.
Neste tópico serão listadas as atividades avaliativas que os alunos da disciplina deverão realizar ao longo do curso.
AE2 - Projeto de Filtros Digitais IIR (Entrega e prazos ver Moodle) | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Esta avaliação visa verificar se você conhece a metodologia de projeto de filtros digitais IIR: (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, BP, BS, conforme o tipo de filtro desejado; (c) transformação do filtro analógico em filtro digital H(s) -> H(z) utilizando a transformação "Bilinear" ou pela transformação "Invariante ao Impulso". Nesta avaliação é solicitado que cada equipe realize o projeto de dois filtros.
|
AE3 - Projeto de Filtros Digitais FIR (Entrega e prazos ver Moodle) |
---|
Esta avaliação visa verificar se você conhece a metodologia de projeto de filtros digitais FIR: (a) Projeto de filtros com Janela Fixas e Ajustáveis; (b) Projeto de filtros com o algoritmo de Parks-McCleallan; Nesta avaliação é solicitado que cada equipe realize os mesmo dois projeto de filtros da atividade AE2.
|
AE4 - Realização de Filtro Digitais FIR e IIR (Entrega e prazos ver Moodle) |
---|
|
ATUAL
AE5 - Projeto de um Detector de DTMF (Entrega e prazos ver Moodle) | ||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
De acordo com ETSI ES 201 235-3 - Specification of Dual Tone Multi-Frequency (DTMF) Transmitters and Receivers; Part 3: Receivers as características dos componentes do receptor são:
|
Referências Bibliográficas
- ↑ 1,0 1,1 1,2 1,3 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
- ↑ LATHI, Bhagwandas P. Sinais e Sistemas Lineares. 2. ed. Porto Alegre: Artmed-Bookman, 2007. 856 p. ISBN 978-8560031139