Mudanças entre as edições de "PSD29007-Engtelecom(2020-2) - Prof. Marcos Moecke"
(9 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
Linha 728: | Linha 728: | ||
:*passa-baixas (<math> \Omega_p= 1 </math>) -> passa-faixa (<math> \omega_0 </math> e <math> B </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> | + | ::*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> | + | ::*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> | :: 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>) | :*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> | + | ::*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> | + | ::*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> | :: onde <math> B = \omega_{p2} - \omega_{p1}</math> e <math> \omega_0 = \sqrt{\omega_{p2} \omega_{p1}}</math> | ||
Linha 879: | Linha 879: | ||
:*passa-baixas (<math> \Omega_p= 1 </math>) -> passa-faixa (<math> \lambda_0 </math> e <math> B </math>) | :*passa-baixas (<math> \Omega_p= 1 </math>) -> passa-faixa (<math> \lambda_0 </math> e <math> B </math>) | ||
− | ::*Substituição de variáveis <math> p = \frac{s^2 + \lambda_0^2} {B s}</math> | + | ::*Substituição de variáveis <math> p = \frac{s^2 + \lambda_0^2} {B \ s}</math> |
− | ::*Cálculo do protótipo com <math> \Omega_s = \Bigg|\frac{-\lambda_s^2 + \lambda_0^2} {B \lambda_s}\Bigg|</math> | + | ::*Cálculo do protótipo com <math> \Omega_s = \Bigg|\frac{-\lambda_s^2 + \lambda_0^2} {B \ \lambda_s}\Bigg|</math> |
:: onde <math> B = \lambda_{p2} - \lambda_{p1}</math> e <math> \lambda_0 = \sqrt{\lambda_{p2} \lambda_{p1}}</math> | :: onde <math> B = \lambda_{p2} - \lambda_{p1}</math> e <math> \lambda_0 = \sqrt{\lambda_{p2} \lambda_{p1}}</math> | ||
:*passa-baixas (<math> \Omega_p= 1 </math>) -> rejeita-faixa (<math> \lambda_0 </math> e <math> B </math>) | :*passa-baixas (<math> \Omega_p= 1 </math>) -> rejeita-faixa (<math> \lambda_0 </math> e <math> B </math>) | ||
− | ::*Substituição de variáveis <math> p = \frac {B s} {s^2 + \lambda_0^2}</math> | + | ::*Substituição de variáveis <math> p = \frac {B \ s} {s^2 + \lambda_0^2}</math> |
− | ::*Cálculo do protótipo com <math> \Omega_s = \Bigg| \frac {B \lambda_s} {-\lambda_s^2 + \lambda_0^2}\Bigg|</math> | + | ::*Cálculo do protótipo com <math> \Omega_s = \Bigg| \frac {B \ \lambda_s} {-\lambda_s^2 + \lambda_0^2}\Bigg|</math> |
:: onde <math> B = \lambda_{p2} - \lambda_{p1}</math> e <math> \lambda_0 = \sqrt{\lambda_{p2} \lambda_{p1}}</math> | :: onde <math> B = \lambda_{p2} - \lambda_{p1}</math> e <math> \lambda_0 = \sqrt{\lambda_{p2} \lambda_{p1}}</math> | ||
::*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 949: | Linha 949: | ||
*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> | *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{ | + | *Determinação de <math> Hz(z) </math> substituindo <math>s=2\frac{z - 1}{z + 1}</math>, onde <math> fa = 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. | *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. | ||
Linha 1 958: | Linha 1 958: | ||
;Aula 30 (1 abr) | ;Aula 30 (1 abr) | ||
− | |||
− | |||
*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]), ou [[Conceitos de Sistemas baseados em amostras e quadros]]. | *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]), ou [[Conceitos de Sistemas baseados em amostras e quadros]]. | ||
*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. | *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. | ||
Linha 1 974: | Linha 1 972: | ||
;Qual solver utilizar em DSP?: | ;Qual solver utilizar em DSP?: | ||
*Para escolher e configurar o tipo de solver que o simulador irá utilizar, selecione [Simulation > Model Configuration Parâmeters], e escolha o solver. Normalmente o melhor opção de solver para sistemas discretos com uma única taxa de amostragem é [Type: Fixed-setup] e [Solver: discrete] | *Para escolher e configurar o tipo de solver que o simulador irá utilizar, selecione [Simulation > Model Configuration Parâmeters], e escolha o solver. Normalmente o melhor opção de solver para sistemas discretos com uma única taxa de amostragem é [Type: Fixed-setup] e [Solver: discrete] | ||
+ | ;Como ativar o Profiler?: | ||
+ | *Para comparar o desempenho de um sistema para processamento por amostras, e para diferentes tamanhos de quadros, é possível utilizar o '''Profiler'''. Para a medição dos tempos foi utilizado sempre o mesmo computador, e ativado o '''[https://www.mathworks.com/help/simulink/ug/how-profiler-captures-performance-data.html Profiler]''' ['''Analysis > Performance Tools > Show Profiler Report''']. Faça uma simulação de alguns segundos, e se quiser use a média de N simulações. Normalmente a primeira deve ser descartada. | ||
;Como organizar o modelo?: | ;Como organizar o modelo?: | ||
Linha 2 012: | Linha 2 012: | ||
{{collapse bottom}} | {{collapse bottom}} | ||
− | + | ||
+ | ;Aula 31 (6 abr) | ||
*Passos adicionais para converter de Matlab/Simulink para HDL. | *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-checking-model-compatibility.html Basic Guidelines for Modeling HDL Algorithm in Simulink] | ||
Linha 2 023: | Linha 2 024: | ||
:*[https://www.mathworks.com/help/hdlcoder/gs/create-hdl-compatible-simulink-model.html Create Simulink Model for HDL Code Generation] | :*[https://www.mathworks.com/help/hdlcoder/gs/create-hdl-compatible-simulink-model.html Create Simulink Model for HDL Code Generation] | ||
− | {{fig|5. | + | {{fig|5.6|Divisão HDL_DUT e testbench|ContadorHDLCoder.png|800 px|}} |
− | {{fig|5. | + | {{fig|5.7|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. | *'''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') | hdlsetup('nome_modelo') | ||
Linha 2 042: | Linha 2 043: | ||
do HDL_DUT_tb_sim.do | do HDL_DUT_tb_sim.do | ||
− | {{fig|5. | + | {{fig|5.8|Subsistema HDL_DUT simulado no Simulink|DUT_ContadorSimulink.png|800 px|}} |
− | {{fig|5. | + | {{fig|5.9|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. | *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)************** | ** Note: **************TEST COMPLETED (PASSED)************** | ||
+ | |||
+ | ===Orientação sobre o Projeto Final=== | ||
+ | ;Aula 32 (8 abr): | ||
+ | *Orientação sobre o projeto final. | ||
+ | |||
+ | {{collapse top | Dicas sobre uso de alguns blocos do Simulink}} | ||
+ | |||
+ | 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 1 - Definir os parâmetros que serão utilizados nos blocos usando o Model Explorer | ||
+ | |||
+ | fa = 8000 % para Sampling frequency, e usar 1/fa para o Sample time. | ||
+ | spf = 1 (ou 16 ou 256 ou ...) % Samples per frame; | ||
+ | v1 = 0.2 % Sine amplitude; | ||
+ | f1 = 500 % Sine frequency; | ||
+ | G = 0.05 % Gain; | ||
+ | |||
+ | ;PASSO 2 - Construir 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|D.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: 1/fa | ||
+ | ;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: 1/fa | ||
+ | ;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: 1/fa | ||
+ | ;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 3 - Construir o circuito com os receptores ('''sink''') de sinal: | ||
+ | * Insira os blocos que deseja utilizar para receptores (ver o diagrama de blocos) | ||
+ | {{fig|D.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}} | ||
+ | |||
+ | ;PASSO 4 - Desenvolver o sistema entre estes blocos: | ||
+ | O ideal é antes de inserir qualquer sistema verificar se a conexão direta das fontes com os receptores está funcionando. | ||
+ | |||
+ | {{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. | ||
+ | *Para medir o tempo de simulação ative o '''Profiler'''. | ||
+ | |||
+ | *Exemplo de modelo de um sistema e resultados da simulação | ||
+ | |||
+ | {{fig|D.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|D.4| Análise no DT com fonte de ruído randomico |DTnoiseFilterPSD1.png|400 px|}} | ||
+ | {{fig|D.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|D.6| Análise no DT com fonte de chirp |DTchirpFilterPSD1.png|400 px|}} | ||
+ | {{fig|D.7| Análise no DF com fonte de chirp |DFchirpFilterPSD1.png|400 px|}} | ||
+ | |||
+ | {{collapse bottom}} | ||
+ | |||
+ | {{collapse top | Dicas sobre o uso do HDL Coder com Filtros digitais}} | ||
+ | ;PASSO 1 - Criar um subsistema DUT da parte que se deseja converter em HDL. | ||
+ | ;PASSO 2 - Configurar todos os blocos dentro desse DUT como processamento por amostra. Configurar também as entradas de sinal como | ||
+ | ;PASSO 3 - Use o '''Filter Realization Wizard''' para realizar os filtros usando a quantização em ponto fixo. | ||
+ | ;PASSO 4 - Faça a conversão para HDL. Veja detalhes em [Limitações do HDL coder]. | ||
+ | |||
+ | {{collapse bottom}} | ||
+ | |||
+ | ;Atividades do projeto final: | ||
+ | *Implementar um modelo de entrada e saída que permita testar o sistema de processamento de sinais (DUT) a ser inserido entre eles. | ||
+ | *O DUT deverá ser composto de no mínimo 4 filtros, projetados conforme já realizado nas atividades AE1 e AE2. | ||
+ | :*1 filtro IIR HP ou LP (usando aproximação de Chebychev tipo 1 ou Butterworth) | ||
+ | :*1 filtro IIR BS ou BP (usando aproximação de Chebychev tipo 2 ou Eliptico) | ||
+ | :*1 filtro FIR HP ou LP (algoritmo de Park-McCleallan ou janela fixa ou janela ajustável) | ||
+ | :*1 filtro FIR BS ou BP (algoritmo de Park-McCleallan ou janela fixa ou janela ajustável) | ||
+ | :*A frequência de amostragem e frequências de passagem e rejeição, assim como os ganhos, e as conexões entre o sinal de entrada e a(s) saída(s) fica a critério do aluno. | ||
+ | *O sistema deverá ser simulado no Simulink, mostrando claramente que o sistema realiza a função desejada, através da analise no domínio do tempo (DT) e no domínio da frequencia (DF). | ||
+ | *Após realizadas as simulações os filtros usados deverão ser agrupados em um subsistema para gerar o código VHDL do sistema DUT e também o testbench para este DUT. | ||
+ | *Para a geração do VHDL a partir do Simulink, siga o procedimento indicado em aula, mas também confira o link [Limitações do HDL coder]. | ||
+ | ;Entregas: | ||
+ | *Um arquivo comprimido (.zip .rar .tgz .gz) contendo o modelo no Simulink, o DUT em VHDL com o testbench | ||
+ | *Um relatório contendo a descrição do sistema e os resultados obtidos, com análise de cada figura inserida. | ||
+ | |||
{{collapse bottom}} | {{collapse bottom}} | ||
==Referências== | ==Referências== | ||
<references/> | <references/> |
Edição atual tal como às 15h14min de 26 de abril de 2021
Unidade 1 - Introdução
Unidade 1 - Introdução | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
profile on
profile viewer Execute no Matlab o código abaixo, e analise os 3 filtros implementados através dos seus zeros e polos. Busque tirar conclusões sobre a influência da posição dos polos e zeros (ver o gráfico do plano z) e correlacione com a resposta de frequência em magnitude (gráfico do freqz).
|
Unidade 2 - Filtros IIR
Unidade 2 - Filtros IIR | |||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Na sequência será mostrado como inicialmente projetar o filtro LP protótipo, e depois as transformações em frequência.
%%Definição do filtro
% Definindo os coeficientes do filtro
b = [1 1]; % Numerador
a = [1 1 5]; % Denominador
% Calculando os zeros (raízes do numerador) e pólos (raízes do denominador)
% Método 1 - usando a função tf2zp
[z1,p1,k]=tf2zp(b,a)
% Método 2 - obtendo as raízes
z2 = roots(b);
p2 = roots(a);
zplane(b,a);
%% Obtendo a resposta em frequência
% substitituindo a variável complexa s por jw usando a função freqz
freqs(b,a);
% Usando cálculo simbólico e plotando o gráfico com semilogx
syms s w
H(s) = (s+1)/(s^2 + s + 5);
pretty(H(1j*w))
latex(H(1j*w))
%%
ws = logspace(-2, 1, 1000);
h = H(1j*ws);
subplot(211)
plot(ws,abs(h)); grid on;
%semilogx(ws,abs(h)); grid on;
subplot(212)
plot(ws,angle(h)/pi*180); grid on;
%semilogx(ws,angle(h)/pi*180); grid on;
Os projetos de filtro Butterworth com função de transferência utilizam os polinômios de Butterworth mostrados na tabela a seguir:
Para o projeto dos filtros do tipo Chebyshev, são utilizados os polinômios de Chebyshev de primeira ordem, os quais são definidos pela equação trigonométrica: Os dois primeiros polinômios são facilmente calculados como: O cálculo dos demais termos pode ser feita pela relação recursiva: Portanto o polinômio de grau 2 pode ser obtido por Assim os primeiros nove polinômios de Chebyshev de primeira ordem podem ser obtidos: Esses polinômios mostram um comportamento oscilatório entre . Figura 2.1 - Os primeiros cinco polinômios de Chebyshev de primeira ordem no domínio
Figura 2.2 - Resposta de magnitude de filtro protótipo Chebyshev
Para o projeto de filtros analógicos é necessário fazer as transformações de frequência indicadas abaixo, as quais devem ser consideradas no momento da determinação dos parâmetros do filtro protótipo LP.
%% Projeto de filtro passa-alta (HP) usando funções do Matlab
Wp = 150; % rad/s
Ws = 40; % rad/s
Rp = 3; % dB
Rs = 60; % dB
[n,Wn] = buttord(Wp,Ws,Rp,Rs,'s')
[b,a] = butter(n,Wn,'high','s');
[h,w] = freqs(b,a,logspace(1,3,1000));
semilogx(w,20*log10(abs(h)));grid on;
hold on; plot([Wp Wn Ws],[-Rp -3 -Rs],'x'); hold off;
title(sprintf('Filtro HP Butterworth, n = %d',n))
%% Projeto de filtro passa-faixa (BP) usando funções do Matlab
Wp = [100 200]; % rad/s
Ws = [50 250]; % rad/s
Rp = 3; % dB
Rs = 40; % dB
[n,Wn] = buttord(Wp,Ws,Rp,Rs,'s');
[b,a] = butter(n,Wn,'s');
freqs(b,a,logspace(1,3,1000))
title(sprintf('Filtro BP Butterworth, n = %d',n))
%% Projeto de filtro passa-baixas usando funções do Matlab
%% Especificações do filtro
Wp =16000; Ws = 20000; Ap = 0.3; As = 20; G0= 3;
% Para analisar o filtro projetado, use fvtool(b,a) para observar plano s, resposta em magnitude, fase e atraso de grupo
%% Butterworth
[n,Wn] = buttord(Wp, Ws, Ap, As,'s')
[b,a] = butter(n,Wn, 's');
%% Chebyshev I
n = cheb1ord(Wp, Ws, Ap, As,'s')
[b,a] = cheby1(n,Ap, Wp, 's');
%% Chebyshev II
n = cheb2ord(Wp, Ws, Ap, As,'s')
[b,a] = cheby2(n,As, Ws, 's');
%% Elliptic - Cauer
[n, Wn] = ellipord(Wp, Ws, Ap, As,'s')
[b,a] = ellip(n,Ap,As, Wn, 's');
fa = 200;
fN = fa/2;
wo = 60/fN; bw = 10/fN;
[b,a] = iirnotch(wo,bw);
fvtool(b,a);
syms z;
N(z) = poly2sym(b,z);
D(z) = poly2sym(a,z);
H(z) = N(z)/D(z);
pretty(vpa(H(z),3))
fa = 8000;
fN = fa/2;
wo = 941/fN; bw = 100/fN;
[b,a] = iirpeak(wo,bw);
fvtool(b,a);
syms z;
N(z) = poly2sym(b,z);
D(z) = poly2sym(a,z);
H(z) = N(z)/D(z);
pretty(vpa(H(z),3))
fa = 8000; fN = fa/2;
fo = 1000; bw = 20/fN;
[b,a] = iircomb(fa/fo,bw,'peak'); % ou use a flag 'notch'
fvtool(b,a);
syms z;
N(z) = poly2sym(b,z);
D(z) = poly2sym(a,z);
H(z) = N(z)/D(z);
pretty(vpa(H(z),3))
|
Unidade 3 - Filtros FIR
Unidade 3 - Filtros FIR | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
A função de transferência de transferência de um filtro digital FIR filtro FIR causal de ordem n mostrado acima pode ser descrito também através da equação de diferenças: Pode-se notar que a saída do filtro FIR é uma soma ponderada dos N valores mais recentes das entradas A realização desse filtro pode ser feita através de algoritmos de software ou circuitos digitais usando por exemplo a estrutura: 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 - Filtros de fase linear
Considere 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.
Considere 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.
Considere 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.
Considere 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.
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 . 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:
Usando 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 .
Diferentemente do que se espera, a função sinc(x) é diferente de sin(x)/x, sendo igual a sin(pi*x)/(pi*x). Veja o help do próprio Matlab. sinc Sin(pi*x)/(pi*x) function. sinc(X) returns a matrix whose elements are the sinc of the elements of X, i.e. y = sin(pi*x)/(pi*x) if x ~= 0 = 1 if x == 0 where x is an element of the input matrix and y is the resultant output element. % Example of a sinc function for a linearly spaced vector: t = linspace(-5,5); y = sinc(t); plot(t,y); xlabel('Time (sec)');ylabel('Amplitude'); title('Sinc Function') See also square, sin, cos, chirp, diric, gauspuls, pulstran, rectpuls, and tripuls. Reference page in Help browser doc sinc
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;
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.
Dados acima obtidos para um filtro passa baixas de ordem N = 64 com , mas podem ser utilizados para estimativa de atenuação e ordem em outros filtros.
No Matlab, além das funções que calculam as janelas, já mencionadas anteriormente, também tem a função fir1 que implementa os passos descritos anteriormente, calculando os coeficientes da série de Fourier dos filtros ideais LP, HP, BP ou BS, e aplica a janela indicada. O uso dessa função simplifica o projeto. 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)
Projetar os filtros LP, HP e BP de acordo com as especificações dadas para o projeto de filtro IIR na AE1 - Projeto de Filtro Analógico e Filtro Digital IIR, considerando uma frequência de amostragem fa > que 2 * fmax especificada. Faça seu projeto usando 3 janelas fixas diferentes. Compare os filtros FIR obtidos com os filtros IIR, considerando, resposta em frequência, fase, atraso de grupo, estabilidade, procedimento de projeto, exatidão dos cálculos x ajuste de parâmetros, duração da resposta ao impulso.
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])
%% Projetar o filtro passa baixas
fp = 1200 Hz;
fs = 1380 Hz;
fa = 8000 Hz;
Ap = 1 dB;
Ar = 50 dB;
%% Projetar o filtro passa altas
fs = 1200 Hz;
fp = 1380 Hz;
fa = 8000 Hz;
Ap = 1 dB;
Ar = 50 dB;
%% 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;
%% 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;
|
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
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
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');
|
Unidade 5 - Projeto Final
Unidade 5 - Projeto Final | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Uso do Simulink para processamento de sinais
Figura 5.1 - Definição de Parâmetros no Simulink
edit hdlsetup.m
Figura 5.6 - Divisão HDL_DUT e testbench Figura 5.7 - 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.8 - Subsistema HDL_DUT simulado no Simulink Figura 5.9 - Subsistema HDL_DUT simulado no Modelsim
** Note: **************TEST COMPLETED (PASSED)************** Orientação sobre o Projeto Final
|
Referências
- ↑ 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 2,9 SHENOI, B. A. Introduction to Digital Signal Processing and Filter Design. 1.ed. New Jersey: John Wiley-Interscience, 2006. 440 p. ISBN 978-0471464822