logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

TMS320 - filtr IIR - implementacja filtru

stargate1200 01 Cze 2010 20:13 2435 2
REKLAMA
  • #1 8143198
    stargate1200
    Poziom 10  
    Witam!
    Chciałbym zrealizować filtr IIR, oto współczynniki:
    
    // licznik
    float c[6]=
    {
    	6.3700e-006,
    	31.84e-006,
    	63.68e-006,
    	63.68e-006,
    	31.84e-006,	
    	6.3700e-006
    };
    
    //mianownik
    float d[6]=
    {
    	1.0000,
    	-4.7193,
    	9.0731,
    	-8.8773,
    	4.4193,
    	-0.8956
    };
    

    w każdym przerwaniu od MCBSP (port wejściowy) pobieram próbkę i przepuszczam ją przez filtr. Oto procedura w przerwaniu:
    
     x[m] = (float)probkar; // probka z wejscia, m -> indeks (poczatkowo 0)
        temp = 0;              // zmienna pomocnicza
        for (i=0; i<N; i++)   // N - ilosc wspolczynnikow a/b
        {
            temp += d[i] * y[(N+m-i-1)%N]; // implementacja struktury filtru
            temp += c[i] * x[(N+m-i-1)%N];
        }
        y[m]=temp;
        probkar = (short int)y[m]; // rzutowanie
        m=(m+1)%(N+1); // zwiekszanie indeksu
    

    program jednak nie działa; czy moglibyście polecić jakiś algorytm?
  • REKLAMA
  • #2 8149469
    And!
    Admin grupy Projektowanie
    Symulowałeś działanie filtra w odrębnym środowisku (Mathlab, GNUOctave itp) ?
    testując filtr w ten sposób ocenisz jego prawidłowe działanie,
    i będzie się można skupić na błędach wielkości struktur przepełnień itp.
    Czy to musi być IIR, może FIR będzie miał wystarczającą szybkość działania ?
  • #3 8157362
    stargate1200
    Poziom 10  
    Tak, założeniem jest IIR. Sądziłem, że w tak prostym programie wina może być sam algorytm - już teraz nieco go poprawiłem ale ciągle coś nie jest w porządku. Rzeczywiście przetestuję go najpierw w Matlabie.
REKLAMA