Escolar Documentos
Profissional Documentos
Cultura Documentos
Implementao
Seguindo a mesma linha de raciocnio do programa da FFT e aproveitando o cdigo relativo a aquisio e transmisso dos dados, rapidamente foi possvel chegar-se ao filtro FIR. Atravs das facilidades disponibilizadas pela instruo MAC do DSP o filtro passou a ser o mero clculo de um produto escalar em duas linhas de cdigo. As constantes que determinam o filtro foram estrategicamente especificadas de modo a facilitar sua modificao e assim transformar em instantes um filtro passa-baixa e um passa-faixa, por exemplo.
Listagem do programa
inicio ordemFiltro numCoeficientes equ equ $2 equ $100 equ $40 ;ordem do filtro ordemFiltro+1 ;numero de coeficientes do filtro ;inicio do buffer de dados dados ;Endereco de entrada para a tabela ; de coeficientes do filtro
dados equ tabelaCoeficientes org jmp org jsr jsr jsr jsr p:0 inicio p:$000c ssi_rx_isr ssi_rx_isr ssi_tx_isr ssi_tx_isr
receive data receive data with exception transmit data transmit with exception
;----------------------------------------------------------------------; Gera tabela de coeficientes do filtro na memoria Y ;----------------------------------------------------------------------org y:tabelaCoeficientes ;coeficientes do filtro dc 0.9999999999 ;armazena os coeficientes obedecendo dc 0.0 ; a ordem do mais significativo dc 0.0 ; para o menos significativo ;************************************ ;* nao esqueca de ajustar o valor * ;* da constante ordemFiltro que * ;* identifica a ordem do polinomio * ;* usado na filtragem * ;************************************
RA RA 955135
;-------------------------------------------------------------------------; Inicio do programa ;-------------------------------------------------------------------------org p:inicio movep movep ori movec move move move include TONE_OUTPUT TONE_INPUT #$261009,x:PLL #0000,x:BCR #3,mr #0,sp #0,omr #$40,r3 #-1,m3 'ada_init.asm' EQU EQU HEADPHONE_EN+LINEOUT_EN+(4*LEFT_ATTN)+(4*RIGHT_ATTN) MIC_IN_SELECT+(15*MONITOR_ATTN) ;these labels are defined in the ;ada_init.asm program ;mask interrupts ;clear hardware stack pointer ;operating mode 0 ; initialise stack pointer ; linear addressing
;----------------------------------------------------------------------; Leitura de dados ;----------------------------------------------------------------------move move move move loop_filtro jset jclr move move move move move move #2,x:SSISR,* #2,x:SSISR,* x:RX_BUFF_BASE,a #TONE_OUTPUT,y0 y0,x:TX_BUFF_BASE+2 #TONE_INPUT,y0 y0,x:TX_BUFF_BASE+3 a,x:(r0) ;wait for frame sync to pass ;wait for frame sync ;receive left ;set up control words #dados,r0 #ordemFiltro,m0 #ordemFiltro,m1 #-1,m4 ;Atribui o endereco do buffer ; esquerdo a r0 ;seta incremento circular com modulo ; definido por ordemFiltro para r0 ;seta incremento circular com modulo ; definido por ordemFiltro para r1 ;seta incremento convencional para m4
;armazena o sinal do canal esquerdo ; na area de dados do buffer circular ;----------------------------------------------------------------------; Filtro ;----------------------------------------------------------------------move #tabelaCoeficientes,r4 ;atribui a r4 o endereco relativo ao ; inicio da tabela de coeficientes move r0,r1 ;atribui ao ponteiro auxiliar r1 o ; valor de r0 que aponta o ultimo ; dado adquirido e que foi armazenado ; no buffer circular de dados move (r0)+ ;incrementa r0 para esperar o proximo ; dado a ser adquirido clr a ;zera o acumulado que ira armazenar ; o resultado da filtragem do move #numCoeficientes,loop_convolucao x:(r1)-,x0 y:(r4)+,y0 ;carrega os dados para os
Vincius Wellington Diolice Felix da Silva RA RA 955135 2
;----------------------------------------------------------------------; Envia resultados para a saida de audio da placa ;----------------------------------------------------------------------jset #2,x:SSISR,* ;wait for frame sync to pass jclr #2,x:SSISR,* ;wait for frame sync move move move move move move jmp a,x:TX_BUFF_BASE a,x:TX_BUFF_BASE+1 #TONE_OUTPUT,y0 y0,x:TX_BUFF_BASE+2 #TONE_INPUT,y0 y0,x:TX_BUFF_BASE+3 loop_filtro ;transmit left ;transmit right ;set up control words
Procedimento
Para realizar o levantamento da curva de resposta do filtro FIR, utilizou-se um gerador de funes e um analisador de sinais dinmicos (ASD). Usando a funo Peak Hold do ASD, realizou-se um levantamento da variao da amplitude de sada do gerador de funes em relao a freqncia, verificando-se que poderia ser desprezada. Em seguida, levantou-se a curva de resposta de freqncia da placa de DSP. Com o MATLAB calculou-se os coeficientes para o filtro, foram escolhidos quatro filtros: Passa-Baixas de 6 ordem e freqncia de corte de 12kHz Passa-Altas de 6 ordem e freqncia de corte de 12kHz Passa-Baixas de 18 ordem e freqncia de corte de 12kHz Passa-Altas de 18 ordem e freqncia de corte de 12kHz
Implementou-se e mediu-se a resposta em freqncia do filtro FIR, comparandose em seguida com a curva calculada no MATLAB.
RA RA 955135
Possui uma resposta bem plana de 100Hz a 21KHz (figura 1a e 1b). Na figura 1a e 1b pode-se observar de uma forma geral a resposta em freqncia da placa.
RA RA 955135
Resposta em dB da Placa
figura 1a
figura 1b
Pode-se observar com uma maior preciso a resposta dos filtros da placa de DSP para as baixas freqncias(figuras 2a e 2b) e para as altas freqncias(figuras 3a e 3b). Resposta Linear da Placa Resposta em dB da Placa (parte baixa) (parte baixa)
figura 3a
figura 3b
Vincius Wellington Diolice Felix da Silva RA RA 955135 5
Filtro Passa-Baixas 6 e 18 ordem As curvas medidas(figuras 4a, 4b, 5a e 5b) e as calculadas no MATLAB esto coerentes, sendo bastante prximas com exceo do ganho que diferencia devido a atenuao existente no programa do filtro. Na freqncia de corte tem aproximadamente 6dB de atenuao como era esperado. O filtro de 6a ordem possui uma curva mais suave que o de 18. Alm disso, no filtro de 18a ordem pode-se perceber a variao caracterstica dos filtros FIR na regio de rejeio. Resposta Linear do Filtro Passa-Baixas(6a Ordem) Resposta em dB do Filtro Passa-Baixas(6a Ordem)
figura 4a
figura 4b
figura 5a
figura 5b
RA RA 955135
Filtro Passa-Altas 6 e 18 ordem As curvas medidas (figuras 6a, 6b, 7a e 7b) e calculadas no MATLAB diferem-se um pouco, pois o filtro implementado sofre influncia do sistema de filtro(s) analgico(s) existente(s) na placa do DSP, poderia-se compensar isto introduzindo-se uma distoro que anula-se o efeito da placa. Mas onde a resposta da placa plana a resposta do filtro FIR coerente, com apenas o ganho diferente do calculado, ou seja, o grfico est deslocado verticalmente em relao quele esperado.
figura 6a
figura 6b
figura 7a
figura 7b
RA RA 955135
Os filtros Passa-Baixas sofreram pouca influncia da filtro(s) da placa, pois a freqncia de corte inferior bem prxima a zero, no caso do passa-altas os filtro(s) analgico(s) comeam a atuar prximos a 21KHz. Observa-se que os filtros de 18 ordem possuem curvas bem mais abruptas que os de 6 ordem, ou seja, pode-se utilizando-se simples filtros analgicos de entrada e sada implementar-se filtros de ordem bastante elevada e at modific-los trocando apenas o programa.
Concluso
O filtro digital utilizando DSP demonstrou possuir grande flexibilidade, alm de em alguns casos ficar mais compacto que o analgico. A flexibilidade ocorre devido a utilizao de um mesmo hardware para a implementao de diversos tipos de filtro, apenas modificando o software. Para filtros de ordem elevada necessita-se muitas vezes de muitos componentes analgicos e de valores elevados tornando-se difcil sua implementao como no caso das baixas freqncias e os valores a serem utilizados. Alm disso, necessita-se em certas aplicaes de preciso dos componentes, e tambm de ajustes constantes, os filtros digital so mais robustos em relao a variao do valor de seus componentes, no necessitando praticamente de ajustes. Com isso, em determinados casos o filtro digital permiti uma maior compactao.
RA RA 955135