Filtro FIR Com PIC

download Filtro FIR Com PIC

of 25

Transcript of Filtro FIR Com PIC

  • 8/15/2019 Filtro FIR Com PIC

    1/25

    Página 1 de 25

    UNIVERVERSIDADE FEDERAL DE UBERLÂNDIA

    FACULDADE DE ENGENHARIA ELÉTRICA

    PÓS-GRADUAÇÃO EM ENGENHARIA DE COMPUTAÇÃO

    CONVÊNIO: UFU – CEFET-SP

    Nilton Costa [email protected] 

    www.costajr.pro.br 

    PROCESSAMENTO DIGITAL DE SINAIS

    LISTA DE EXERCÍCIOS: 1

    PROFESSOR: Dr. Dr. Ernane Antônio Alves Coelho.

    São Paulo, 25/8/2007.

  • 8/15/2019 Filtro FIR Com PIC

    2/25

    Página 2 de 25

    Data de Entrega: 26/08/2007Aluno: Nilton Costa Junior

    Lista de Exercícios 1

    Aplicações em Processamento Digital de SinaisProf. Ernane Coelho

    1. Conceitue os Filtros Digitais recursivos e não recursivos. Porque sãochamados de IIR e FIR, respectivamente? Para qual destes o princípio deoperação corresponde à convolução?R: Os filtros digitais recursivos, ou do tipo IIR (Infinit Impulse Response), sãoaqueles que possuem componentes de realimentação, produzindo um efeitomais intenso na curva de atuação do filtro, e com isto, reduzindo a ordem dofiltro. Porém, devido as componentes de realimentação, os filtros IIR podemse tornar instáveis e até chegar à oscilação natural se caso não forcorretamente calculado.Os filtros IIR são usados quando a questão da linearidade de fase não é umpré-requisito, e suas principais características são:•  Tem menos coeficientes;•  Lóbulos laterais menores;•  Ocupa menor memória;•  Menor esforço computacional.Já os filtros digitais não recursivos, ou do tipo FIR (Finit Impulse Response),são aqueles que não possuem realimentação (recursividade), a resposta aoimpulso é limitada e as saídas dependem apenas da entrada atual e dasanteriores, e com isto, a sua atuação é mais suave quando comparados comos filtros IIR.

    Portanto, os filtros FIR precisam trabalhar com ordens elevadas para

    obtenção de curvas mais definidas, consumindo recursos de processamentoe reduzindo a freqüência máxima de atuação. Porém, os filtros FIR nuncatendem a oscilar como acontece com os filtros IIR.O princípio da convolução se aplica em ambos os filtros, já que as amostrasdiscretizadas do sinal de entrada são convolidadas com os respectivoscoeficientes deslocados no tempo em ambos os filtros IIR e FIR.

  • 8/15/2019 Filtro FIR Com PIC

    3/25

    Página 3 de 25

    2. O que é aliasing? Quais as implicações da ausência do filtro anti-aliasingnum sistema de aquisição?R: Aliasing é o nome que se dá ao efeito decorrente de se amostrar de formainsuficiente um sinal contínuo qualquer, assim é o efeito indesejávelocasionado pela reamostragem de um sinal de alta frequência em baixas

    resoluções. O Aliasing (disfarce) ou dobramento espectral, ocorre quando ataxa de amostragem usada é menor que a taxa de Nyquist do sinal que seestá analisando.As implicações da ausência do filtro anti-aliasing são a geração decomponentes indesejáveis que se somam às componentes de mais baixafreqüência, ocasionando deformações na saída do filtro. Para se evitar queisto ocorra é necessário a instalação de um filtro analógico passa baixasantes do filtro digital, com freqüência de corte menor do que metade dafreqüência de Nyquist, ou seja: f(LPF anti-aliasing) = f(Nyquist)/2

    3. No código do exemplo do MatLab, altere o componente harmônico de 10

    para 13 e execute novamente. O que aconteceu com a performance do filtro?Como melhorar o desempenho da filtragem?R: A performance do filtro piorou em relação ao componente da 10ªharmônica devido a curva do filtro ser pior na 13ª harmônica.O desempenho do filtro pode melhorar alterando a freqüência de cortepassando de 100Hz para 300Hz, e com isso o desempenho do filtro melhorana 13ª harmônica. Uma outra possibilidade é aumentar o valor da ordem dofiltro até obter o desempenho esperado.

  • 8/15/2019 Filtro FIR Com PIC

    4/25

    Página 4 de 25

    Freqüência de corte original – 100Hz

    Freqüência de corte proposta – 200Hz

    4. Considerando o código desenvolvido no exemplo 3, implemente um filtro FIRrejeita-faixa. Os detalhes de especificação do filtro ficam a critério doprojetista.

  • 8/15/2019 Filtro FIR Com PIC

    5/25

    Página 5 de 25

  • 8/15/2019 Filtro FIR Com PIC

    6/25

    Página 6 de 25

    A proposta foi de rejeitar a 5ª harmônica (300Hz).As freqüências adotadas foram:

    •  Início do corte – freq. 100Hz•  Banda rejeitante de 250 a 350Hz•  Final do corte – freq. 500Hz

    5. Considerando o exemplo 1, implemente um filtro de média móvel de ordem20. Aplique um sinal de teste e faça a FFT do sinal de entrada e saída dofiltro.R: Conforme orientação, implementamos um filtro de média móvel de ordem20 no MATLAB a partir do código do exemplo 1, alterando a matriz doscoeficientes b para que cada um dos 21 coeficientes fosse uma fração “1/21”,eliminando assim a primeira etapa do filtro. Segue abaixo o código com asmodificações e o gráfico da resposta do filtro.

    % EXEMPLO 1% Projeto de um Filtro FIR passa-baixaclear all close all N=20 b=1/21*ones(1,21) [h,w] = freqz(b,1,512); plot(w/pi,abs(h)) legend('curva real') 

    % *********************** teste do filtro ******************************* 

    pontos=1024; fs=5000; %frequencia de amostragem Ts=1/fs; t=0; w1=2*pi*60; %frequencia fundamental do sinal de entrada for i=1:pontos, 

    y(i)=0.7*sin(w1*t)+ 0.2*sin(10*w1*t); %fundamental + 10 harmonico tempo(i)=t; t=t+Ts;yo= 0; if i < N+1 

    M = i; else 

    M = N+1; end for k = 1:M, 

    yo = yo + b(k) * y(i-k+1); end yf(i)=yo; 

    end %ou simplesmente aplica-se a funcao "filter" do MatLab:Y = FILTER(B,A,X) %h=filter(b,1,y); figure plot(tempo,y,tempo,yf) legend('fir in','fir out') 

  • 8/15/2019 Filtro FIR Com PIC

    7/25

    Página 7 de 25

    Y = fft(y); % calcula fft da entrada Yf= fft(yf); %calcula fft da saida %segunda metade de y contem os complexos conjugados Y_spec = abs(Y)/(pontos/2); % normaliza valor absoluto Yf_spec = abs(Yf)/(pontos/2); 

    figure subplot(2,1,1); %2graficos em 2linhas,1 coluna, primeiro o superior freq = (0:199)/(pontos*Ts); plot(freq,Y_spec(1:200)); grid on % desenha grid xlabel('Frequencia (Hz)'); ylabel('Amplitude Y');

    subplot(2,1,2); %seleciona plot para segundo grafico plot(freq,Yf_spec(1:200)); grid on % desenha grid xlabel('Frequencia (Hz)'); ylabel('Amplitude Yf');

    6. Considere a função de transferência de um filtro passa baixa de segundaordem:

    22

    2

    2)(

    nn

    n

    ssG

    ω ξω ω 

    ++

    =  

    onde ωn é a freqüência de corte e ξ é o fator de amortecimento. Especifiqueum dado ωn, ξ  e taxa de amostragem e converta a função do filtro do plano spara o plano z (função discreta). Escreva a respectiva equação de diferençaspara a implementação de tal filtro. Dica: utilize a função “c2dm” ou “c2d” doMatLab.

  • 8/15/2019 Filtro FIR Com PIC

    8/25

    Página 8 de 25

    R: Segue abaixo os passos executados no MATLAB para obtenção dosparâmetros do filtro IIR a partir de sua função de transferência

    •  wn: No nosso exemplo foi utilizada a freqüência de corte de 30Hz, dessemodo teremos a freqüência angular de:

    >> wn = 2 * pi *30

    wn =

    188.4956

    •  ts: Fizemos a freqüência de amostragem de 2500Hz e portanto teremos umataxa de amostragem de:

    >>Ts = 1/2500

    Ts =

    4.0000e-004 s

    •  Obtenção dos coeficientes da transformada de Laplace a partir da função detransferência, utilizando a função tf() e fazendo ξ = 0.7:>> g=tf(wn^2,[1 2*0.7*wn wn^2])

    Transfer function:

    3.553e004

    -------------------------s^2 + 263.9 s + 3.553e004

    •  Transformação da função de transferência de Laplace para parâmetros “Z”(discretização da função):

    >> h = c2d(g, Ts, 'zoh')

    Transfer function:

    0.002744 z + 0.002649----------------------------

    z^2 - 1.894 z + 0.8998

    Sampling time: 0.0004

    >>

    •  A partir dos parâmetros obtidos, passamos para a implementação do algoritmoescrevendo a equação de diferenças que será implementada no MATLAB:

    y(k)= 0.002744*x(k-1) + 0.002649*x(k-2) + 1.894*y(k-1) - 0.8998*y(k-2)

    Onde ωn = 188.4956 rd/s (corresponde a 30Hz) e fs = 2500Hz

    7. Gere um sinal com uma composição harmônica específica para teste do filtroda questão 6 desenhe a respectiva forma de onda de saída do filtro utilizandoo MatLab.

  • 8/15/2019 Filtro FIR Com PIC

    9/25

    Página 9 de 25

    Por exemplo, se a freqüência de corte for 100Hz, para verificar a operação dofiltro, injete componentes abaixo de 100Hz e em torno de 1 década acima. Asbaixas passarão e as altas serão atenuadas em torno de 100 vezes.

    R: Com o filtro implementado no MATLAB, conforme segue o código abaixo,geramos um sinal de teste de 300Hz correspondente a 10ª harmônica dafreqüência de corte (fc=30Hz) e verificamos no gráfico os níveis dos sinais deentrada e saída do filtro, que pela sua natureza de filtro passa baixa de 2ª ordemque tem uma taxa de atenuação de 40dB/dec, deveria atenuar este sinal deteste em 40dB. Constatamos que isto ocorreu de fato, conforme podemos ver nográfico e pelo cálculo da atenuação em decibéis dos valores obtidos.

    % EXERCICIO 7% Projeto de um Filtro para a questão 6clear all

    close allwn=2*pi*30; %frequencia fundamental do sinal de entradafs=2500;Ts=1/fs;

    g=tf(wn^2,[1 2*0.7*wn wn^2]);h=c2d(g,Ts,'zoh');

    % *********************** teste do filtro *******************************

    pontos=1024;t=0;y(1)=0;y(2)=0;x(1)=0;tempo(1)=0;for i=2:pontos,

    x(i)=0.8*sin(wn*t)+ 0.2*sin(10*wn*t); %fundamental + 10 harmonicotempo(i)=t;t=t+Ts;

    y(i+1)= 0.002744*x(i) + 0.002649*x(i-1) + 1.894*y(i) - 0.8998*y(i-1);

    endyk=y(1:1024)figureplot(tempo,x,tempo,yk)legend('sinalENT','sinalSAI')

  • 8/15/2019 Filtro FIR Com PIC

    10/25

    Página 10 de 25

    X = fft(x); % calcula fft da entradaY = fft(yk); %calcula fft da saida%segunda metade de y contem os complexos conjugadosX_spec = abs(X)/(pontos/2); % normaliza valor absolutoY_spec = abs(Y)/(pontos/2);

    figuresubplot(2,1,1);freq = (0:199)/(pontos*Ts);

    plot(freq,X_spec(1:200));grid on % desenha gridxlabel('Frequencia (Hz)');ylabel('Amplitude X');

    subplot(2,1,2); %seleciona plot para segundo grafico

    plot(freq,Y_spec(1:200));grid on % desenha gridxlabel('Frequencia (Hz)');ylabel('Amplitude Y');

    •  Atenuação do filtro: G = 20log (0.002019 / 0.1949) = -39.69dBFoi desenvolvida uma aplicação do filtro IIF passa baixa em PICC e realizadotestes no PROTEUS. Segue abaixo o código do filtro:

  • 8/15/2019 Filtro FIR Com PIC

    11/25

    Página 11 de 25

     /*

    Universidade Federal de UberlandiaFaculdade de Engenharia Eletrica

    Pos-Graduacao em Engenharia da ComputacaoProf.: Dr. Ernane Antônio Alves Coelho

    CEFET / UNED CUBATAO

    Alunos: Nilton Costa Junior

    ATIVIDADE 1 - EXERCICIO 7

     // DESENVOLVIMENTO DO FILTRO:Coeficientes obtidos no MATLAB a função: G=wn

    2/(S2 + 2*ξ*wn + wn^2) 

    Parametros utilizados no calculo:wn = 60Hzfs = 2500HzTs = 1/2500Hz

    Coeficientes obtidos:B(Z) Real Q14/ufix(8)1 0.01059 1742 0.00987 162

    A(Z) Real Q7/ufix(8)1 1.789 2292 -0.8097 -104

    Função de transferencia em parametros "z":Transfer function:0.01059 z + 0.00987

    ----------------------z^2 - 1.789 z + 0.8097

    Equacao de diferenças:y(z)=0.01059*x(z-1) + 0.00987*x(z-2) + 1.789*y(z-1) - 0.8097*y(z-2)*/

     // Programa do fitro passa baixa tipo "IIR" de 2a ordem#include "AD_inter.h"#include

  • 8/15/2019 Filtro FIR Com PIC

    12/25

    Página 12 de 25

    #BYTE portd = 0x08

    void main(){

    setup_adc_ports(AN0_AN1_AN2_AN4_VSS_VREF); //Define 4 ch A0 A1A2 A4,VRef+=A3setup_adc(ADC_CLOCK_DIV_32); // Para MCU em 20MHz clock/32

    Tad=1.6usset_adc_channel(0); //seleciona canal 0setup_psp(PSP_DISABLED);setup_spi(FALSE);setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32);//timer0, clk interno

    5Mhz/32=156kHzset_timer0(194); // 256-(156kHz/2.5kHz)=256-62=194 : fs=2.5KHz

    setup_timer_1(T1_DISABLED);setup_timer_2(T2_DISABLED,0,1);

    set_tris_b(0x00 ); // bits Port B are output (1-in/0-out)set_tris_d(0x00 );

    enable_interrupts(INT_TIMER0); //habilita interrupcao do timer 0enable_interrupts(GLOBAL); //habilita flag geral de interrupcao

    for(;;);

    }

    #int_timer0void timerzero(void){

    static int8 x[3];//array das variaveis de entrada "x"static int8 y[3];//array das variaveis de saida "y"

    const int8 b[2]={174,162}; //exceto b[2]=Q14/ufix(8)const int8 a[2]={229,104}; //exceto a[2]=Q7/ufix(8)

    set_timer0(194); // reinicia contagem do timer

    bit_set(portd,0); // inicio da medida de tempo de processamento

    x[2]=x[1]; // deslocamento no tempo de x

  • 8/15/2019 Filtro FIR Com PIC

    13/25

    Página 13 de 25

    x[1]=x[0];x[0]=read_adc(); // leitura atual do sinal de entrada

    y[0]=0; // zeramento da saida atualy[0]= (((int16)b[0]*x[1])>>14); //calculo dos fatores do filtro

    y[0]= y[0]+(((int16)b[1]*x[2])>>14);y[0]= y[0]+(((int16)a[0]*y[1])>>7);y[0]= y[0]-(((int16)a[1]*y[2])>>7);

    output_b(y[0]); //saida do filtro

    y[2]=y[1]; // deslocamento no tempo de yy[1]=y[0];

    bit_clear(portd,0); //fim da medida de tempo de processamento

    }8. O filtro digital correspondente a função no plano z obtida na questão 6 é IIR

    ou FIR?R: O filtro digital do exercício 6 é IIR, pois existem coeficientes B e A erealimentação do sinal de saída (recursividade).

    9. Implemente um código em linguagem C para o exercício 4. Utilizando umcompilador/simulador ( 8051 Intel, PIC, ARM, MSP430), verifique o tempo deexecução do código em questão para avaliar o impacto na definição da taxade amostragem. Sua implementação foi em ponto flutuante ou ponto fixo?Qual a diferença?

    Este exercício na verdade é para vcs perceberem a diferença entre ponto-fixoe ponto flutuante. A implementação em ponto flutuante é muito mais fácil.Coeficientes e variáveis em "float" permitem a multiplicação sem saturação ouperda de resolução e sem, principalmente, a necessidade de interferência doprogramador para a correção de representação.

    Em termos práticos, seria simplesmente traduzir o código do comando "for" doexemplo1 em Matlab para Linguagem C, o qual implementa a equação que gerao filtro digital. O problema é que tal código em float executado numa CPU ponto-fixo é extremamente lento. É possível a gente rodar no sistema do Proteus, masnuma freqüência muito baixa.

    O exercício 2 (segunda atividade) corresponde à implementação do exemplo 1em ponto fixo no 16F877 para rodar no sistema Proteus. Em ponto - fixo, comcoeficientes e variáveis em 8-bits, é possível executar em 1kHz no 16F877 com20Mhz de clock.

  • 8/15/2019 Filtro FIR Com PIC

    14/25

    Página 14 de 25

    Pensem a respeito e sábado a gente fecha questão neste tópico. Na medidaem que vcs se aprofundam no problema, percebem as dificuldades e aproveitammelhor as discussões de possíveis soluções.

    Resolução:

     // DESENVOLVIMENTO DO FILTRO:

     /*1) Dados do FILTRO REJEITA FAIXA (FRF) FIR do exercicio 4 da lista 1:

    Ordem do filtro FRF: N = 20Freq. de amostragem: fs = 5000HzFreq. de Nyquist: fny= 2500HzFreq. máxima in: fmax= 1250HzFreq. de corte inicial: fci= 100HzBanda de rejeicao: Brej= de 250Hz a 350Hz.

    Freq. de corte final: fcf= 500HzCoeficientes "b(z)":

    Coeficientes obtidos através do MATLAB com a funcao "b = firpm(N,f,a)"tendo: N=20

    f = [0 0.04 0.1 0.14 0.2 1]a = [1 1 0 0 1 1]

    B(Z) Real Q10/ufix(8) Q9/ufix(8) Q8/ufix(8)1 0,0372 38 19 102 0,1067 109 55 273 0,0426 44 22 114 0,0682 70 35 175 0,045 46 23 126 0,0254 26 13 77 -0,0069 -7 -4 -28 -0,0396 -41 -20 -109 -0,0694 -71 -36 -1810 -0,0897 -92 -46 -2311 0,903 925 462 23112 -0,0897 -92 -46 -2313 -0,0694 -71 -36 -1814 -0,0396 -41 -20 -1015 -0,0069 -7 -4 -216 0,0254 26 13 717 0,045 46 23 1218 0,0682 70 35 1719 0,0426 44 22 1120 0,1067 109 55 2721 0,0372 38 19 10

  • 8/15/2019 Filtro FIR Com PIC

    15/25

    Página 15 de 25

    A proposta inicial é de transformarmos os coeficientes de ponto flutuantepara ponto fixo sem sinal, utilizando a base de 8 bits.

    Como existem coeficientes negativos, os seus valores serão calculados em

    modulo e no final do calculo, o sinal será reposto simplificando o calculo dofiltro.

    Podemos observar também que a conversão dos coeficientes de pontoflutuante para ponto fixo na base 8 bits somente será possível em Q8/ufix(8)para todos os coeficientes, pois nas notações Q9/ufix(8) e Q10/ufix(8), ocoeficiente B[11] extrapola a base 8.

    Porém, na notação Q8/ufix(8) todos os componentes, exceto B(11), terãovalores reduzidos, prejudicado a precisão da conversão se caso usássemosQ8/ufix(8) para todos os coeficientes.

    A solução encontrada foi de usarmos a conversão em Q9/ufix(8) para todosos coeficientes B(Z), exceto B(11), que será convertido para ponto fixo comQ8/ufix(8).

    Desse modo, conseguimos conciliar uma relativa precisão com uma maiorvelocidade de processamento.

    Devido à limitação de velocidade de processamento do PIC 16F877 ser de5 MIPS, utilizaremos uma freqüência de amostragem de 1KHz, obtendo umafreqüência máxima de entrada de 250Hz.

    Abaixo seguem os dados do filtro recalculados:Ordem do filtro FRF: N = 20Freq. de amostragem: fs = 1000HzFreq. de Nyquist: fny= 500HzFreq. máxima in: fmax= 250HzFreq. de corte inicial: fci= 20HzBanda de rejeicao: Brej= de 50Hz a 70Hz.Freq. de corte final: fcf= 100HzCoeficientes "b(z)": Q9/Ufix(8). obs: somente b(11) usa Q8/Ufix(8)!

    PARAMETROS PRÁTICOS OBTIDOS NO SIMULADOR PROTEUS:Tempo de processamento: Tmin=905usFrequencia máxima possível: fmax=1105Hz

    */

     // Programa do fitro refeita faixa tipo "FIR"

  • 8/15/2019 Filtro FIR Com PIC

    16/25

    Página 16 de 25

    #include "AD_inter.h"#include

    #BYTE portd = 0x08

    void main(){

    setup_adc_ports(AN0_AN1_AN2_AN4_VSS_VREF); //Define 4 ch A0 A1A2 A4,VRef+=A3

    setup_adc(ADC_CLOCK_DIV_32); // Para MCU em 20MHz clock/32Tad=1.6us

    set_adc_channel(0); //seleciona canal 0setup_psp(PSP_DISABLED);setup_spi(FALSE);setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32);//timer0, clk interno

    5Mhz/32=156kHzset_timer0(100); // 256-(156kHz/1kHz)=256-156=100 : fs=1KHz

    setup_timer_1(T1_DISABLED);setup_timer_2(T2_DISABLED,0,1);

    set_tris_b(0x00 ); // bits Port B are output (1-in/0-out)set_tris_d(0x00 );

    enable_interrupts(INT_TIMER0); //habilita interrupcao do timer 0enable_interrupts(GLOBAL); //habilita flag geral de interrupcao

    for(;;);

    }

    #int_timer0void timerzero(void){

    static int8 x[21];//matriz das variaveis de entrada "x"

    int8 y=0; //variaveis de saida "y"

    const int8 b[21]={19,55,22,35,23,13,4, //coeficientes "b[k]" em20,36,46,231,46,36, //notacao Q9/ufix(8)20,4,13,23,35,22,55,19}; //exceto b[11]=Q8/ufix(8)

  • 8/15/2019 Filtro FIR Com PIC

    17/25

    Página 17 de 25

    set_timer0(100); // reinicia contagem do timer

    bit_set(portd,0); // inicio da medida de tempo de processamento

    x[20]=x[19]; // deslocamento no tempo das amostrasx[19]=x[18]; // do sinal de entradax[18]=x[17]; //...x[17]=x[16]; //...x[16]=x[15]; //...x[15]=x[14]; //...x[14]=x[13]; //...x[13]=x[12]; //...x[12]=x[11]; //...x[11]=x[10]; //...

    x[10]=x[9]; // deslocamento no tempo das amostrasx[9]=x[8]; // do sinal de entradax[8]=x[7]; //...x[7]=x[6]; //...x[6]=x[5]; //...x[5]=x[4]; //...x[4]=x[3]; //...x[3]=x[2]; //...x[2]=x[1]; //...x[1]=x[0]; //...

    x[0]=read_adc(); // leitura atual do sinal de entrada

    y= ((int16)b[0]*x[0])>>9; //produto das componentes do sinal de entraday= y+((int16)b[1]*x[1]>>9); //"x", discretizados no tempo, pelosy= y+((int16)b[2]*x[2]>>9); //respectivos coeficientes do filtro "bx"y= y+((int16)b[3]*x[3]>>9); //em ponto fixo. Correcao do resultadoy= y+((int16)b[4]*x[4]>>9); //obtido para a base "Q0" (>>7) e acumulacaoy= y+((int16)b[5]*x[5]>>9); //do resultado na variavel de saida "y".y= y-((int16)b[6]*x[6]>>9); //(-)reposicao do sinaly= y-((int16)b[7]*x[7]>>9); //(-)reposicao do sinaly= y-((int16)b[8]*x[8]>>9); //(-)reposicao do sinaly= y-((int16)b[9]*x[9]>>9); //(-)reposicao do sinaly= y+((int16)b[10]*x[10]>>8);// coeficiente em Q8/ufix(8)y= y-((int16)b[11]*x[11]>>9);//(-)reposicao do sinaly= y-((int16)b[12]*x[12]>>9);//(-)reposicao do sinaly= y-((int16)b[13]*x[13]>>9);//(-)reposicao do sinaly= y-((int16)b[14]*x[14]>>9);//(-)reposicao do sinaly= y+((int16)b[15]*x[15]>>9);//y= y+((int16)b[16]*x[16]>>9);//

  • 8/15/2019 Filtro FIR Com PIC

    18/25

    Página 18 de 25

    y= y+((int16)b[17]*x[17]>>9);//y= y+((int16)b[18]*x[18]>>9);//y= y+((int16)b[19]*x[19]>>9);//y= y+((int16)b[20]*x[20]>>9);//

    output_b(y); //saida do filtrobit_clear(portd,0); //fim da medida de tempo de processamento

    }

    •  Segue abaixo o esquema da aplicação do filtro realizada no Proteus eo levantamento da curva de saída do filtro realizada a partir degeração de sinais senoidais discretos de freqüências compreendidasna faixa de atuação do filtro

    Figura1: Esquema elétrico do filtro (sinal f=60Hz):

  • 8/15/2019 Filtro FIR Com PIC

    19/25

    Página 19 de 25

    Figura 2: tempo de amostragem=1ms; tempo de processamento=0,905ms

    Figura 3: Sinal de entrada/saída: f=10Hz; vin=7,5V / vout=8,1V; G= +0,67dB

  • 8/15/2019 Filtro FIR Com PIC

    20/25

    Página 20 de 25

    Figura 4: Sinal de entrada/saída: f=20Hz; vin=7,5V / vout=6,4V; G= -1,39dB

    Figura 5: Sinal de entrada/saída: f=30Hz; vin=7,5V / vout=4,25V; G= -4,93dB

  • 8/15/2019 Filtro FIR Com PIC

    21/25

    Página 21 de 25

    Figura 6: Sinal de entrada/saída: f=40Hz; vin=7,5V / vout=2,25V; G= -10,46dB 

    Figura 7: Sinal de entrada/saída: f=50Hz; vin=7,5V / vout=0,8V; G= -19,44dB

  • 8/15/2019 Filtro FIR Com PIC

    22/25

    Página 22 de 25

    Figura 8: Sinal de entrada/saída: f=60Hz; vin=7,5V / vout=0,4V; G= -25,46dB 

    Figura 9: Sinal de entrada/saída: f=70Hz; vin=7,5V / vout=1,25V; G= -15,56dB 

  • 8/15/2019 Filtro FIR Com PIC

    23/25

    Página 23 de 25

    Figura 10: Sinal de entrada/saída: f=80Hz; vin=7,5V / vout=2,65V; G= -9,04dB 

    Figura 11: Sinal de entrada/saída: f=90Hz; vin=7,5V / vout=4,5V; G= -4,44dB 

  • 8/15/2019 Filtro FIR Com PIC

    24/25

    Página 24 de 25

    Figura 12: Sinal de entrada/saída: f=100Hz; vin=7,5V / vout=6,7V; G= -0,98dB

    Figura 13: Sinal de entrada/saída: f=110Hz; vin=7,5V / vout=7,8V; G=+0,34dB

  • 8/15/2019 Filtro FIR Com PIC

    25/25

    Figura 14: Sinal de entrada/saída: f=120Hz; vin=7,5V / vout=8,3V; G=+0,88dB

    Figura 15: Curvas do filtro FIR - Rejeita Faixa:

    FILTRO FIR - REJEITA FAIXA

    -30

    -25-20

    -15

    -10

    -5

    0

    5

    10

    15

    10 20 30 40 50 60 70 80 90 100 110 120

    FREQUENCIA

          G      A      N      H      O

      Vin

    Vout

    Real(dB)

    Ideal(dB)