Springen naar inhoud

Digitale filter programmeren


  • Log in om te kunnen reageren

#1

velgrem1989

    velgrem1989


  • >100 berichten
  • 228 berichten
  • Ervaren gebruiker

Geplaatst op 21 mei 2013 - 18:01

Voor het programmeren van een digitale filter probeer ik volgend principe toe te passen:

ik bepaal de overdrachtsfunctie van de filter , ik zet deze om in een differentievergelijking die er uit ziet als:

y[n] = a0*x[n]+a1*x[n-1]+... -b1*y[n-1] - ...

De overdrachtsfunctie blijkt te kloppen (controle via matlab), dus de differentievergelijking normaal ook. Ik probeer dit dan te implementeren op volgende manier:


t = 0:6.25e-06:1000*6.25e-06;
x_t = 5*sin(14900*2*pi*t).^2;
y_t = zeros(size(t));
temp1 = zeros(size(t));
temp2 = zeros(size(t));


for i = 7 : size(t,2)
temp1(i) = x_t(i)*a0 + x_t(i-1)*a1 +...
temp2(i) = (( y_t(i-1)*b1 +...
y_t(i)= temp1(i)-temp2(i);
end

Dit blijkt echter niet te kloppen, ziet iemand waarom ? Veel dank !

Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

Xenion

    Xenion


  • >1k berichten
  • 2606 berichten
  • Moderator

Geplaatst op 21 mei 2013 - 22:31

Je y_t vector van 1 tot 6 is helemaal 0. Dat klopt niet want je hebt wel degelijk een input signaal en een deel van de filter impuls respons zou toch al geactiveerd moeten worden.

Je weet toch dat er in MATLAB een filter commando bestaat waar je gewoon de a en b coëfficiënten kan invullen? Als je het per se zelf wil doen, dan raad ik je aan om niet te veel vectorieel te willen doen, maar meer element per element met loopjes die de grenzen van je vectoren checken.

#3

velgrem1989

    velgrem1989


  • >100 berichten
  • 228 berichten
  • Ervaren gebruiker

Geplaatst op 21 mei 2013 - 23:03

Je y_t vector van 1 tot 6 is helemaal 0.

Die fout heb ik intussen gecorrigeerd maar met een gelijkaardig foutief resultaat. De bedoeling is om dit algoritme op een FPGA te laten draaien, matlab gebruik ik om het algoritme te testen, maar er staat duidelijk iets fout in, het signaal na filter explodeert namelijk naar oneindig.

Veranderd door velgrem1989, 21 mei 2013 - 23:04


#4

EvilBro

    EvilBro


  • >5k berichten
  • 6703 berichten
  • VIP

Geplaatst op 22 mei 2013 - 08:12

Dus je vraagt ons om het gedrag van je filter te verklaren zonder de daadwerkelijke waarden van je filter te geven... wordt lastig....

#5

Xenion

    Xenion


  • >1k berichten
  • 2606 berichten
  • Moderator

Geplaatst op 22 mei 2013 - 09:20

Zoals EvilBro zegt geef je inderdaad ook best de filtercoëfficiënten en de exacte code. Het kan vanalles zijn: je gebruikt de coefficienten in de verkeerde volgorde, het filter is instabiel, ...

Heb je het filter commando al geprobeerd om de waarden van je filter te controleren? Wat daar uitkomt is normaal wel correct ;)





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures