tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

IIRFilter.h (2048B)


      1 // Copyright 2016 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef IIRFilter_h
      6 #define IIRFilter_h
      7 
      8 #include "nsTArray.h"
      9 
     10 typedef nsTArray<double> AudioDoubleArray;
     11 
     12 namespace blink {
     13 
     14 class IIRFilter final {
     15 public:
     16  // The maximum IIR filter order.  This also limits the number of feedforward
     17  // coefficients.  The maximum number of coefficients is 20 according to the
     18  // spec.
     19  const static size_t kMaxOrder = 19;
     20  IIRFilter(const AudioDoubleArray* feedforwardCoef,
     21            const AudioDoubleArray* feedbackCoef);
     22  ~IIRFilter();
     23 
     24  void process(const float* sourceP, float* destP, size_t framesToProcess);
     25 
     26  void reset();
     27 
     28  void getFrequencyResponse(int nFrequencies, const float* frequency,
     29                            float* magResponse, float* phaseResponse);
     30 
     31  bool buffersAreZero();
     32 
     33 private:
     34  // Filter memory
     35  //
     36  // For simplicity, we assume |m_xBuffer| and |m_yBuffer| have the same length,
     37  // and the length is a power of two.  Since the number of coefficients has a
     38  // fixed upper length, the size of xBuffer and yBuffer is fixed. |m_xBuffer|
     39  // holds the old input values and |m_yBuffer| holds the old output values
     40  // needed to compute the new output value.
     41  //
     42  // m_yBuffer[m_bufferIndex] holds the most recent output value, say, y[n].
     43  // Then m_yBuffer[m_bufferIndex - k] is y[n - k].  Similarly for m_xBuffer.
     44  //
     45  // To minimize roundoff, these arrays are double's instead of floats.
     46  AudioDoubleArray m_xBuffer;
     47  AudioDoubleArray m_yBuffer;
     48 
     49  // Index into the xBuffer and yBuffer arrays where the most current x and y
     50  // values should be stored.  xBuffer[bufferIndex] corresponds to x[n], the
     51  // current x input value and yBuffer[bufferIndex] is where y[n], the current
     52  // output value.
     53  int m_bufferIndex;
     54 
     55  // Coefficients of the IIR filter.
     56  const AudioDoubleArray* m_feedback;
     57  const AudioDoubleArray* m_feedforward;
     58 };
     59 
     60 }  // namespace blink
     61 
     62 #endif  // IIRFilter_h