You are on page 1of 12

Universidade Federal de Uberlndia UFU Faculdade de Engenharia Eltrica FEELT Programa de PsGraduao em Engenharia Eltrica

Trabalho de Introduo a Processadores Digitais de Sinais Filtro Digital FIR

Professor: Aluno:

Ernane Coelho Fabrcio Alves Borges

Uberlndia, Setembro de 2011.

Sumrio
1. 2. 3. 4. Objetivo ................................................................................................................................. 3 Projeto do filtro digital FIR .................................................................................................... 3 Implementao do filtro no Code Composer Studio 3.1 ..................................................... 10 Concluso ............................................................................................................................ 12

1. Objetivo
O objetivo deste trabalho o projeto de um filtro digital do tipo FIR e sua implementao no Code Composer Studio 3.1 (CCS), que um ambiente de desenvlovimento integrado para DSPs da Texas Instruments. Como esta aplicao no DSP no contemplar uma aquisio de sinais externos, o software MATLAB ser utilizado para gerar os dados de entrada (uma onda distorcida) e o projeto do filtro digital. Estes devero ser aplicados ao CCS para implementao no DSP, visualizao dos resultados e validao da estratgia do filtro FIR.

2. Projeto do filtro digital FIR


Primeiramente o filtro foi projetado e implementado no software MATLAB. Foi gerada uma onda senoidal composta por uma componente fundamental e duas harmnicas, sendo estas de stima e nona ordens. Todos os pontos desta onda gerada foram salvos em um arquivo .DAT para que este possa ser lido como dado de entrada pelo simulador do Code Composer. O trecho do cdigo que gera a onda no MATLAB demonstrado abaixo bem como o grfico da onda gerada.
%frequncia da fundamental f=60; T=1/f; %perodo w=2*pi*f; %frequncia angular da fundamental fs=10000; %frequncia de amostragem. A frequncia de amostragem dever ser no mnimo 2x a frequncia da maior harmnica. Ts=1/fs; %perodo de amostragem nump= ceil (T/Ts); %nmero de pontos amostrados em um perodo N=nump*5; %nmero de pontos vezes o numero de perodos que queremos ter de onda (numero total de pontos da onda) t=0; %% Loop para gerar o vetor x que a onda com 7 e 9 harmnica for i=1:N, x(i)=0.75*sin(w*t)+0.2*sin(7*w*t)-0.15*sin(9*w*t); t=t+Ts; tempo(i)=t; end

1.5

0.5

-0.5

-1

-1.5

100

200

300

400

500

600

700

800

900

Figura 1. Forma de onda gerada com 7 e 9 harmnica.

Depois de gerada a onda, os pontos so salvos em um arquivo denominado seno_float.dat para que este possa ser usado pelo Code Composer como dados de entrada.
%% grava arquivo para poder ser usado posteriormente no DSP (em float) fid = fopen('seno_float.dat','wt'); fprintf(fid,'1651 4 0 0 0 \n'); %imprime cabealho para o code composer fprintf(fid,'%d\n',x); fclose(fid);

Para dimensionar o filtro FIR pode-se utilizar vrios mtodos, porm nesta aplicao utilizaremos o aplicativo do MATLAB fdatool. Esta ferramenta amigvel, grfica e possui parmetros de entrada que so definidos pelo projetista. Estes dados foram definidos como a frequncia de amostragem fs = 10k, frequncia de banda passante Fpass = 60Hz, frequncia da banda de corte Fstop = 406Hz, amplitude passante em dB Apass = 1dB, e magnitude de corte Astop = 39dB.

Figura 2. Projeto do filtro na ferramenta Fdatool.

O programa gerou um filtro FIR de ordem 40 e seus coeficientes so extrados para implementao do mesmo digitalmente. A alta ordem deste filtro devido proximidade das frequncias da banda passante e da banda de corte, o que exige uma atenuao expressiva do filtro para mitigar a primeira frequncia harmnica presente no sinal de entrada.

Figura 3. Interface do Fdatool para projeto do filtro FIR.

As figuras seguintes mostram que a atenuao nas frequncias de stima e nona harmnicas bem expressiva por elas se encontrarem no vale de atenuao do filtro. Esta caracterstica desejvel e fez parte do projeto de atuao do filtro.

Figura 4. Atenuao em dB da frequncia de stima harmnica (420 Hz).

Figura 5. Atenuao em dB da frequncia de nona harmnica (540 Hz).

A figura abaixo representa as curvas ideal e real do filtro FIR gerado. Observa-se que a curva real est bem prxima da ideal, o que representa uma ao desejada do filtro projetado.
1.4 curva ideal curva real

1.2

0.8

0.6

0.4

0.2

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

Figura 6. Curvas real e ideal do filtro FIR gerado.

Os coeficientes do filtro FIR de ordem 40 que ser utilizado foram alocados no vetor b de tamanho 41. Este vetor demonstrado abaixo:
b= [0.00826183661261409 0.00534677877169939 0.00875491763240740 0.0107569080283339 0.0152666657407029 0.0177233430165056 0.0228412709129467 0.0254259489084970 0.0303917980019217 0.0326819683536402 0.0366304144562180 0.0382113574859615 0.0404057736645068 0.0409680235716572 0.0409680235716572 0.0404057736645068 0.0382113574859615 0.0366304144562180 0.0326819683536402 0.0303917980019217 0.0254259489084970 0.0228412709129467 0.0177233430165056 0.0152666657407029 0.0107569080283339 0.00875491763240740 0.00534677877169939 0.00826183661261409]; 0.00694600461491117 0.0129381223708205 0.0202571135443323 0.0279553775221055 0.0347760573563094 0.0394809925112221 0.0411568320462748 0.0394809925112221 0.0347760573563094 0.0279553775221055 0.0202571135443323 0.0129381223708205 0.00694600461491117

Para realizar a implementao do filtro FIR projetado, foi utilizada a equao de diferenas com coeficientes constantes clssica dos sistemas discretos, sendo que o termo do filtro recursivo zero.

Para a = 0, ou seja, filtro FIR:

Onde b so os coeficientes do filtro projetado e X a entrada de dados em que o filtro ser aplicado. O filtro FIR ou filtro recursivo possui as caractersticas de estabilidade na sada se a entrada tambm for sempre estvel, exige maior peso computacional se comparado ao FIR e apresenta resposta finita, ou seja, um resultado ao impulso em tempo finito. Abaixo pode-se exemplificar o funcionamento de um filtro FIR de terceira ordem e sua resposta a um impulso:

Figura 7. Diagrama de blocos do filtro FIR.

Figura 8. Resposta ao impulso de um filtro FIR.

Abaixo tem-se o cdigo feito no MATLAB responsvel pela ao do filtro no sinal de entrada, ou seja, aplicao da frmula do filtro FIR demonstrada anteriormente.
%N = (numero total de pontos da onda gerada) for i=1:N, yo= 0; if i < ordem+1 M = i; else M = ordem+1; end for k=1:M, yo = yo + b(k) * x(i-k+1); end yf(i)=yo; end

O resultado final foi satisfatrio, o qual o filtro mitigou as harmnicas, restando apenas um sinal de ordem fundamental 60Hz. Esta onda filtrada apresentou aspecto bem senoidal e com um pequeno defasamento ou atraso, sendo este intrnseco aos filtros digitais, devido elevada ordem do filtro proposto.

1.5 fir in fir out 1

0.5

-0.5

-1

-1.5

0.01

0.02

0.03

0.04

0.05

0.06

0.07

0.08

0.09

Figura 9. Sinal da onda gerada (azul) com harmnicas e sinal de sada da onda filtrada (verde).

A figura abaixo demonstra o espectro em frequncia da onda gerada e tambm o espectro da onda filtrada. Pode-se observar que no primeiro quadro a onda apresenta a componente fundamental mais duas harmnicas, de stima (420 Hz) e nona (540 Hz) ordem. J o segundo quadro, este representando a onda filtrada, apresenta apenas a frequncia fundamental, o que demonstra que o filtro mitigou as harmnicas como esperado.

0.8 Amplitude Y 0.6 0.4 0.2 0

500

1000 1500 Frequencia (Hz)

2000

2500

0.8 Amplitude Yf 0.6 0.4 0.2 0

500

1000 1500 Frequencia (Hz)

2000

2500

Figura 10. Espectro em frequncia da onda gerada e da onda filtrada.

3. Implementao do filtro no Code Composer Studio 3.1


A implementao do filtro dimensionado anteriormente no DSP feita atravs do simulador do eZdsp F2812 no Code Composer Studio 3.1. O cdigo fonte da implementao do filtro foi feito em linguagem C, no qual este executa as mesmas funes daquele feito no MATLAB. Um probe point inserido no incio do cdigo carrega os pontos do documento gerado pelo programa feito no MATALB seno_float.dat, sendo este a onda gerada com harmnicos, ou os dados de entrada. Estes pontos so inseridos no vetor in_onda[BUFSIZE] . O vetor out_onda[BUFSIZE] contem os dados de sada, ou os pontos da onda filtrada, que podem ser visualizados atravs do modo grfico em funo do tempo. Abaixo tem-se o cdigo do programa implementado no CCS 3.1. Nota-se no cdigo a ausncia de um comando que desabilite o watchdog do DSP. Este no foi implementado devido a utilizao do simulador do eZdsp F2812 presente no CCS. Em aplicaes reais na insero do cdigo no DSP, o watchdog dever ser desabilitado para as iteraes se completem totalmente.
#include <stdio.h> #include "volume.h" /* Global declarations */ float in_onda[BUFSIZE]; /* processing data buffers */ float out_onda[BUFSIZE]; int size = BUFSIZE; int N = 835; int ordem = 40; float b[41] = {0.00826183661261409,0.00534677877169939,0.00694600461491117, 0.00875491763240740,0.0107569080283339,0.0129381223708205,0.0152666657 407029, 0.0177233430165056,0.0202571135443323,0.0228412709129467,0.02542594890 84970, 0.0279553775221055,0.0303917980019217,0.0326819683536402,0.03477605735 63094, 0.0366304144562180,0.0382113574859615,0.0394809925112221,0.04040577366 45068, 0.0409680235716572,0.0411568320462748,0.0409680235716572,0.04040577366 45068, 0.0394809925112221,0.0382113574859615,0.0366304144562180,0.03477605735 63094, 0.0326819683536402,0.0303917980019217,0.0279553775221055,0.02542594890 84970, 0.0228412709129467,0.0202571135443323,0.0177233430165056,0.01526666574 07029, 0.0129381223708205,0.0107569080283339,0.00875491763240740,0.0069460046 1491117, 0.00534677877169939,0.00826183661261409}; int i = 0; float yo = 0; int M; int k=0; * ======== main ======== void main() { /* loop forever */

while(TRUE) { for (i=0; i<N; i++) { yo=0; if (i<ordem+1) { M = i; } else { M = ordem+1; } for (k=0; k<M; k++) { yo = yo + b [k] * in_onda[i-k]; } out_onda[i] = yo; } } }

Foram inseridos dois breakpoints no cdigo, sendo um no incio e outro no final do loop responsvel pela iterao do filtro, com o objetivo de encontrar o nmero de ciclos que o CCS leva para realizar uma iterao completa para calcular a onda de sada. O nmero de ciclos gastos para esta interao foi de 14.308 ciclos. O filtro realizou de forma satisfatria sua funo, o qual pode ser observado na figura abaixo, a qual uma visualizao grfica dos vetores de entrada e sada de dados. Observa-se que a entrada de dados (onda distorcida) foi carregada corretamente pelo programa e o filtro mitigou as harmnicas presentes, restando apenas a onda fundamental em 60Hz com um pequeno defasamento (vetor de dados de sada).

Figura 11. Onda distorcida e onda filtrada visualizada no Code Composer Studio 3.1.

4. Concluso
As metas deste trabalho foram cumpridas, podendo-se enumer-las abaixo: Gerao dos pontos de uma onda distorcida; Projeto do filtro FIR utilizando ferramentas no MATLAB para mitigar as harmnicas desejadas; Entendimento das operaes realizadas por um filtro digital recursivo seguindo a equao das diferenas; Teste do filtro digital projetado no MATLAB; Familiarizao com o ambiente e funcionamento do Code Composer Studio 3.1; Implementao do filtro digital no CCS 3.1; Validao dos resultados obtidos e avaliao da atuao do filtro;

You might also like