-         

Ergebnis 1 bis 5 von 5

Thema: IIR

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    31.03.2009
    Beiträge
    76

    IIR

    Anzeige

    hallo, ich mache gerade ein porgramm mit bandpassfiltern. und zwar soll einfach eine LED leuchten wenn ein bandpass aktiv ist.
    das programm sieht so aus, dass 100 eingehende werte aufgenommen und verarbeitet werden. und zwar ist die filtergleichung:

    y0 = x0 – x2 – ([a2*y1] >> 16) – ([a3*y2] >> 16)

    aber jetzt meine frage. wann ist denn der bandpass aktiv, also wann ist denn der frequenzbereich vom bandpass gleich dem eingangssignal?

    ist das dann x0=y0???

  2. #2
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    "aktiv" ist der bandpass eigentlich immer. Wenn das Eingassignal im richtigen Frequenzbereich nichts hat, kommt halt wenig bei raus, also kleine Werte für y0. Wenn die Richtige Frequenz dabei ist gibts größere Werte für y0.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    31.03.2009
    Beiträge
    76
    würde dass dan klappen mit x0=y0 oder würdest du eher machen if y0>??? aber was sind denn die ??? was sind denn so die werte??

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    20.11.2006
    Ort
    Hermeskeil
    Alter
    40
    Beiträge
    27
    Hallo Asuru11,

    versuch es mal folgender maßen.

    If y0 > (x0 * x) then LED = 1

    Mit dem Wert x kannst Du dann die Empfindlichkeit der LED verstellen. Der Werte für x ist dabei etwas zwischen 0 und 1

    LG
    PIDI

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    31.03.2009
    Beiträge
    76
    danke schön. super!!!

    habe jetzt noch ein programm geschrieben um zu überprüfen ob meine Schaltung überhaupt funktioniert. und zwar nehme ich einen bandpass mit realtiv großer bandbreite und wenn dann output[n] größer als 0 ist, bedeutet es ja, dass ein Signal eingegangen ist...

    Code:
    #include <inttypes.h>
    #include "asuro.h"
    
    void bpfilter(int8_t *input,int8_t *output, uint16_t *length, int32_t koeff)
    {
    
    int32_t a2;                                       	/* a2 als Integervariable festlegen*/
    int32_t a3;                                       	/* a3 als Integervariable festlegen*/
    int32_t GAIN_FRAC;                                	/* GAIN_FRAC als Integervariable festlegen*/
    int32_t x0,x1,x2;                                 	/* x0,x1,x2 als Integervariable festlegen*/
    int32_t y0,y1,y2;                                 	/* y0,y1,y2 Integervariable festlegen*/
    uint16_t n;                                       	/* n Integervariable festlegen*/
    uint16_t i;                                       	/* i als Integervariable festlegen*/
    
    
    x1=0;                                             		/* Wert für x1 festlegen*/
    x2=0;                                             		/* Wert für x2 festlegen*/
    y0=0;                                             		/* Wert für y0 festlegen*/
    y1=0;                                             		/* Wert für y1 festlegen*/
    y2=0;                                             		/* Wert für y2 festlegen*/
    x0=1;                                             		/* Wert für x0 festlegen*/
    length=100;		                          				/* Wert für length festlegen = Wert der Signallänge*/
    a2=3;
    a3=2;
    GAIN_FRAC=1;
    
     for (n=0;n<length;n++)
     { 
      x0=input;                                	            /* x0 als Eingang festlegen*/
      y0=x0-x2-((a2*y1)>>16)-((a3*y2)>>16);    	            /* Gleichung um y0 zu berechnen*/		   
      x2=x1;
      x1=x0;
      y2=y1;
      y1=y0;
    
      output[n]=((y0*GAIN_FRAC)>>16);          	            /* Gleichung um Ausgang zu berechnen*/
    
        if (output[n]>0)                                    /* wenn ein Signal erkannt wird, ist output[n] immer größer 0*/
        {
               DDRB|=(1<<PB1);								/*Setze PB_1 auf output*/
    		   PORTB|=(1<<PB1);							    /*Setze PB_1 auf 1 --> KontrollLED leuchtet*/
    		   Sleep(100);
    		   PORTB&=~(1<<PB1);
        }
     }
    }
    blos habe ich jetzt n error drin:

    c:/winavr-20080610/bin/../lib/gcc/avr/4.3.0/../../../../avr/lib/avr4/crtm8.o.init9+0x0): undefined reference to `main'


    was ist falsch??

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •