Forum: Mikrocontroller und Digitale Elektronik Probleme beim Filtern (PIC24FJ64GA004)


von G. S. (sido_dr)


Angehängte Dateien:

Lesenswert?

Guten Tag,ich versuche derzeit einen PIC24FJ64GA004 so zu programmieren, 
das er aus dem Signal dass ich ihm gebe eine FFT bildet.
Das Eingangssignal ist analog. Das Ganze soll sequenziel ablaufen. Erst 
wird das durch den ADC konvertierte Signal aufgezeichnet, dann wird es 
gefiltert, und danach die FFT gebildet.
Soweit die Theorie. Bis jetzt bin ich so weit dass mein Mikrocontroller 
das Signal das ich ihm gebe (aus der Audiobuchse von meinem Laptop) 
aufzeichnet.
Nach dem filtern erhalte ich nur noch falsche Werte (siehe Excel Datei). 
Weiss einer woran das liegen kann? Der Code zum Filter stammt von 
Winfilter.
Hier noch der Code zum Filter:
1
for( a=0; a>Laufnahme; a++ )
2
    {
3
      //shift the old samples
4
      for( d=2; d>0; d-- ) 
5
      {
6
        x[d] = x[d-1];
7
        y[d] = y[d-1];
8
      }
9
      //Calculate the new output
10
      x[0] = Sgn[a];
11
      y[0] = ACoef[0] * x[0];
12
      for( d=1; d<=2; d++ )
13
      {
14
        y[0] += ACoef[a] * x[a] - BCoef[a] * y[a];
15
      }
16
      SgnFilt[d] = y[0];
17
}

von Felix (Gast)


Lesenswert?

Morgen,
bist du dir mit dem Kopf der for-Schleife sicher?
1
for( a=0; a>Laufnahme; a++ )
2
...

a von Null aufwärts gezählt, als Durchlaufbedingung a größer Laufnahme?

von G.Siedow (Gast)


Lesenswert?

Stimmt, das war falsch, daran lag es aber nicht, ich habe es jetzt so 
geregelt indem ich das Filter nicht als Funktion sondern als Schleife im 
Hauptprogramm eingebaut habe. Scheinbar lag das Problem beim Übergeben 
von Variablen. Sieht jetzt zwar nicht sehr elegant aus, funktionniert 
aber.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.