1 / 27

Laboratório 4

Laboratório 4. Sistemas embarcados Período 2010.2. Roteiro. Representação numérica em ponto-flutuante Projeto de um filtro digital usando aritmética de ponto-flutuante Aritmética de ponto-fixo Projeto de um filtro digital usando aritmética de ponto-fixo. Objetivo.

aleta
Download Presentation

Laboratório 4

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Laboratório 4 Sistemas embarcados Período 2010.2

  2. Roteiro • Representação numérica em ponto-flutuante • Projeto de um filtro digital usando aritmética de ponto-flutuante • Aritmética de ponto-fixo • Projeto de um filtro digital usando aritmética de ponto-fixo

  3. Objetivo • Projetar e implementar um filtro digital para áudio em C para Linux Embarcado no core ARM da plataforma OMAP 161x.

  4. Metodologia de Desenvolvimento Formulação Matemática da Aplicação Projeto e verificação do Algoritmo numa linguagem de alto nível, e.g. MatLab, em ponto-flutuante e ponto-fixo Implementação em C em ponto-flutuante para PC, e.g. gcc Implementação em C em ponto-fixo para PC, e.g., gcc Cross-compilação para ARM, e.g. Scratchbox

  5. Ponto-flutuante • Padrão IEEE 754 para Floats: • Sinal: 0 = + e 1 = - • Combinações Sinal + Expoente + Significando

  6. Filtro Butterworth em ponto-flutuante • Especificação: • Frequência de corte: 300 Hz = 2*π*300 rad/s = 1885 rad/s • Passa-altas • 2ª ordem

  7. Filtro Butterworth em ponto-flutuante • Encontrando a função de transferência: • Na linha de comando: • [num,den] = butter(ordem,2*pi*fc,'high','s'); • Informações sobre o algoritmo: • Help do Matlab: Signal Processing Toolbox: butter • No Simulink: • DSP blockset / Filtering / Filter Designs

  8. Filtro Butterworth em ponto-flutuante • Encontrando a função de transferência: • Na linha de comando: • filtro_continuo = tf(num,den) s^2 ------------------------------- s^2 + 2666 s + 3.553e06

  9. Aproximando funções de transferência (FT) contínuas • Aproximação de Tustin: Uma FT discreta H(z) pode ser obtida repondo o argumento s na FT contínua G(s) por s' onde h é o período de amostragem. • Assim H(z) = G(s')

  10. Filtro Butterworth em ponto-flutuante • filtro_discreto = c2d(filtro_continuo,Ta,'tustin') 0.8471 z^2 - 1.694 z + 0.8471 --------------------------------------- z^2 - 1.671 z + 0.7177 Sampling time: 0.000125 • [numd,dend]=tfdata(filtro_discreto,'v') numd = [ 0.8471 -1.6942 0.8471 ] dend = [1.0000 -1.6707 0.7177 ]

  11. Filtro Butterworth em ponto-flutuante • Simulação: • Na linha de comando: • [yc,t] = lsim(filtro_continuo,u,t); • [yd,t] = lsim(filtro_discreto,u,t); • No simulink:

  12. Aritmética de ponto-fixo

  13. Aritmética de ponto-fixo • Mudando de Expoente

  14. Aritmética de ponto-fixo • Adição e Subtração Obs: Se os expoentes são diferentes a conversão para mesmo expoente deve ser feita antes da adição ou subtração.

  15. Aritmética de ponto-fixo • Multiplicação Para converter a resposta para o expoente r devemos efetuar um deslocamento como descrito abaixo: Exemplo: se p + q >= r :

  16. Aritmética de ponto-fixo • Divisão Para não perder precisão devemos efetuar a multiplicação porantes da divisão por m. • Exemplo: se

  17. Aritmética de ponto-fixo • Raiz Quadrada

  18. Aritmética de ponto-fixo • Conversão de ponto-flutuante para ponto-fixo

  19. Aritmética de ponto-fixo • Exemplo: • Para x1 = 0.001d • q1=log2(32767)-log2(.001) • q1 = 24.9657 => q1 = 24 • floor(x1*2^24) • x1 = 16777d => 4189h

  20. Aritmética de ponto-fixo • para x2 =7.12d • q2 =log2(32767)-log2(7.12) • q2 = 12.1681 => q2 = 12 • floor(x2*2^12) • x2d =29163 => 71EBh

  21. Aritmética de ponto-fixo • logo • x3 = x1*x2 => q3 = q1+q2 = 36 • x3 = 489267651d = 1D29A1C3h • se sabemos que esse número é representado corretamente em Q22 fazemos: • x3(Q22) = floor(x3/2^(36-22)) • x3(Q22) = 29862d = 74A6h e podemos armazená-lo na memória. • Para provar que o procedimento está correto fazemos: • Resultado esperado = x3(Q22)/2^22 = 0.00711965560913

  22. Filtro Butterworth em ponto-fixo • %qu = floor(log2(2^15 - 1)-log2(1)) = 14 • ud=floor(u*2^14); • %Do filtro projetado anteriormente: • numd = [0.8471 -1.6942 0.8471]; • dend = [1.0000 -1.6707 0.7177]; • %(q para num e den) = floor(log2(2^15 - 1)-log2(2)) = 13 • numd = round(numd*2^13); • dend = round(dend*2^13);

  23. Filtro Butterworth em ponto-fixo • Equação de recorrência

  24. Filtro Butterworth em ponto-fixo • %yd(k)/ud(k) = nund(q)/dend(q) => yd(k)dend(q) = ud(k)dend(q) • for k=10:length(t) • %Q13 * Q14 = Q27 • yd(k) = -1*( dend(2)*yd(k-1) + dend(3)*yd(k-2)) + numd(1)*ud(k) + numd(2)*ud(k-1) + numd(3)*ud(k-2); • %Q27 >> 13 = Q14 • yd(k) = round(yd(k)/2^13); • end

  25. Filtro Butterworth em ponto-fixo • No Simulink:

  26. Exemplo

  27. Sugestão de experimento • Repita o projeto do filtro do exemplo, dessa vez usando ´zoh´ como método de discretização. Como a função de transferência em tempo discreto é alterada? • Projete um filtro passa-baixas de nona ordem usando a metodologia proposta.

More Related