Ist es möglich, den Bessel-Filter zu überschreiten?

  • Ich habe versucht, den Bessel-Filter aus hier , aber im Falle eines großen Datensatzes habe ich Überschwingen. Da ich weiß, dass ein Bessel-Filter nicht übersteuern sollte, ist dieser Code falsch oder mache ich etwas anderes falsch?

     // Sample rate : 1e9
    // Cut off Frequency : 50e6
    
    int s=50000;
    double[] sample = new double[s];
    
    for(int i=s/2; i<s; i++) {
      sample[i] = 1.0;
    }
    
    for (int i = 0; i<sample.length; i++) {
        xv[0] = xv[1];
        xv[1] = xv[2];
        xv[2] = xv[3]; 
        xv[3] = sample[i] / GAIN;
        yv[0] = yv[1]; 
        yv[1] = yv[2]; 
        yv[2] = yv[3]; 
        yv[3] = (xv[0] + xv[3]) + 3 * (xv[1] + xv[2])
              + (  0.3402988787 * yv[0]) 
              + ( -1.4152725242 * yv[1])
              + (  2.0223552191 * yv[2]);
        filteredValue[i] = yv[3];
    }
     

    Alle Koeffizienten wurden basierend auf der Quelle auf der angegebenen Website berechnet. Dies könnte unübersichtlich sein, da sie auch für Chebyshev- und Butterworth-Filter verwendet werden.

    13 February 2017
    Stephen Rauchuser902383
1 answer
  • Es ist nicht genau klar, was Sie mit Überschwingen meinen. Definieren wir es als "beim Filtern einer Rechteckwelle sollte der Maximalwert des Ausgangs den Dauerzustand des Maximalwerts der Rechteckwelle nicht überschreiten".

    In diesem Fall Ihre Aussage "Wie ich weiß, sollte der Bessel-Filter keine Überschreitung haben", ist falsch. Ein Bessel-Filter wird tatsächlich übersteuern. Einige Filter erster Ordnung überschreiten nicht (butterworth, chebychev, ...), aber jeder Filter der Ordnung & gt; 1 überschreitet.

    17 August 2012
    vzczc