Commit 9e84786b authored by henryjandrew's avatar henryjandrew
Browse files

Merge branch 'ma_2019/andrew' of https://git.rwth-aachen.de/ita/ITADSP into ma_2019/andrew

parents 6258e877 f0b9f44b
......@@ -20,7 +20,6 @@
#define IW_ITA_BIQUAD
#include <ITADSPDefinitions.h>
#include <vector>
//! Implements digital biquad component for IIR filtering
/**
......@@ -48,6 +47,14 @@ public:
float a2; //!< Numerator 3
CParams();
//! Set parameter old school
/**
* @param[in] Filter parameters coefficients in order: g, b0, b1, b2, a1, a2
*
* @note Double check order.
*/
void SetParameters( const float params[] );
} oParams;
CITABiquad();
......@@ -100,7 +107,7 @@ public:
void Process( const float* pfInputData, float* pfOutputData, const int iNumSamples, const float fOutputGain1, const float fOutputGain2, const int iOutputMode );
private:
std::vector< float > m_vfAccumulators; //!< Accumulators
float z[ 2 ]; //!< Accumulators
};
#endif // IW_ITA_BIQUAD
......@@ -3,7 +3,7 @@
*
* ITA core libs
* (c) Copyright Institute of Technical Acoustics (ITA)
* RWTH Aachen University, Germany, 2015-2018
* RWTH Aachen University, Germany, 2015-2017
*
* ----------------------------------------------------------------
* ____ __________ _______
......@@ -21,40 +21,43 @@
#include <ITADSPDefinitions.h>
#include <ITAThirdOctaveFilterbank.h>
#include <ITAThirdOctaveMagnitudeSpectrum.h>
#include <ITABiquad.h>
#include <ITASampleBuffer.h>
#include <vector>
#include <tbb/concurrent_queue.h>
//! Third octave magnitude filtering using Biquads (IIR filter)
//! Terzfilterbank mittels Biquads (IIR Filter)
/**
* Diese Klasse realisiert eine Terzfilterbank (#CVAThirdOctaveFilterbank) mit der Methode der kaskadierten
* Biquads (#CVABiquad) für Verstärkungsfaktoren eines Terzbank-Betragsspektrums (#CVAThirdOctaveMagnitudes).
*
*/
class ITA_DSP_API CITAThirdOctaveFilterbankIIR : public CITAThirdOctaveFilterbank
{
public:
//! Constructor
//! Konstruktor mit Samplerate und Blocklänge
/**
* @param[in] dSampleRate Samplingrate
* @param[in] iBlockLength Block length
* \param dSamplerate Samplingrate
* \param iBlocklength Blocklänge
*/
CITAThirdOctaveFilterbankIIR( const double dSampleRate, const int iBlockLength );
virtual inline ~CITAThirdOctaveFilterbankIIR() {};
//! Destruktor
virtual ~CITAThirdOctaveFilterbankIIR();
//! Filterlatenz in Samples zurückgeben
int GetLatency() const;
//! Set magnitudes (in decibel) of filter bank
//! Verstärkungen (Gains) setzen
/**
* @param[in] oMagnitudes Filter magnitudes (dB)
* @param[in] bSmoothChangeover If true, switching is smoothed
* \param oGains Verstärkungsfaktoren
* \param bSmoothChangeover Wenn true, dann überblenden (default), sonst sofort internen Gain umschalten
*/
void SetMagnitudes( const ITABase::CThirdOctaveGainMagnitudeSpectrum& oMagnitudes, const bool bSmoothChangeover = true );
void SetGains( const ITABase::CThirdOctaveGainMagnitudeSpectrum& oGains, const bool bSmoothChangeover = true );
void SetMagnitudes( const ITABase::CThirdOctaveGainMagnitudeSpectrum& oGains, const bool bSmoothChangeover = true );
//! Clear all internal accumulators
//! Alle internen Zustände zurücksetzen (Akkumulatoren der Biquads)
void Clear();
//! Verarbeite Samples (Filtern)
......@@ -66,10 +69,10 @@ public:
private:
//! Interne Datenklasse für das Verarbeiten eines neuen Gain Datensatzes
class MagnitudeUpdate
class GainUpdate
{
public:
ITABase::CThirdOctaveGainMagnitudeSpectrum oMags; //! New magnitudes
ITABase::CThirdOctaveGainMagnitudeSpectrum oGains; //!< Gain-Daten
int iBlendSamples; //!< Anzahl Samples zum Überblenden
};
......@@ -77,11 +80,11 @@ private:
int m_iBlockLength; //!< Blocklänge
int m_nBandsInternal; //!< Anzahl der internen Bänder
int m_nBiquadsPerBand; //!< Anzahl von Biqads pro Band
std::vector< CITABiquad > m_vBiquads; //!< Biquads, access: [Band][BiquadNummer]
tbb::strict_ppl::concurrent_queue< CITAThirdOctaveFilterbankIIR::MagnitudeUpdate > m_vMagnitudesQueue; //!< Liste von neuen Verstärkungsfaktoren
ITABase::CThirdOctaveGainMagnitudeSpectrum m_oMagnitudesInternal; //!< Interne Verstärkungsfaktoren
ITASampleBuffer m_sfTempFilterBuf; //!< Intermediate buffer for filter
ITASampleBuffer m_pfTempOutputBuf; //!< Intermediate buffer for output assembly
std::vector< CITABiquad > m_vBiquads; //!< Biquads, Zugriff: [Band][BiquadNummer]
tbb::strict_ppl::concurrent_queue< GainUpdate > m_qGains; //!< Liste von neuen Verstärkungsfaktoren
ITABase::CThirdOctaveGainMagnitudeSpectrum m_oGainsInternal; //!< Interne Verstärkungsfaktoren
float* m_pfTempFilterBuf; //!< Zwischenpuffer für Filter
float* m_pfTempOutputBuf; //!< Zwischenpuffer für Ausgabe
};
#endif // IW_ITA_THIRD_OCTAVE_FILTERBANK_IIR
......@@ -9,8 +9,7 @@ CITABiquad::CITABiquad()
void CITABiquad::ClearAccumulators()
{
m_vfAccumulators.push_back( 0.0f );
m_vfAccumulators.push_back( 0.0f );
z[ 0 ] = z[ 1 ] = 0;
}
void CITABiquad::Process( const float* pfInputData, float* pfOutputData, const int iNumSamples )
......@@ -19,8 +18,8 @@ void CITABiquad::Process( const float* pfInputData, float* pfOutputData, const i
float z0, z1, z2;
// Restore accumulators from last process call
z1 = m_vfAccumulators[ 0 ];
z2 = m_vfAccumulators[ 1 ];
z1 = z[ 0 ];
z2 = z[ 1 ];
for( int i = 0; i < iNumSamples; i++ )
{
......@@ -36,8 +35,8 @@ void CITABiquad::Process( const float* pfInputData, float* pfOutputData, const i
}
// Store accumulators for next process call
m_vfAccumulators[ 0 ] = z1;
m_vfAccumulators[ 1 ] = z2;
z[ 0 ] = z1;
z[ 1 ] = z2;
return;
}
......@@ -47,8 +46,8 @@ void CITABiquad::Process( const float* pfInputData, float* pfOutputData, const i
// Local accumulators
float z0, z1, z2;
z1 = m_vfAccumulators[ 0 ];
z2 = m_vfAccumulators[ 1 ];
z1 = z[ 0 ];
z2 = z[ 1 ];
if( iOutputMode == ITABase::MixingMethod::ADD )
{
......@@ -80,8 +79,8 @@ void CITABiquad::Process( const float* pfInputData, float* pfOutputData, const i
}
// Store accumulators
m_vfAccumulators[ 0 ] = z1;
m_vfAccumulators[ 1 ] = z2;
z[ 0 ] = z1;
z[ 1 ] = z2;
return;
}
......@@ -93,8 +92,8 @@ void CITABiquad::Process( const float* pfInputData, float* out, const int iNumSa
// Local accumulators
float z0, z1, z2;
z1 = m_vfAccumulators[ 0 ];
z2 = m_vfAccumulators[ 1 ];
z1 = z[ 0 ];
z2 = z[ 1 ];
// Factor for linear gain
const float fLinearGainFactor = ( fOutputGain2 - fOutputGain1 ) / float( iNumSamples );
......@@ -134,8 +133,8 @@ void CITABiquad::Process( const float* pfInputData, float* out, const int iNumSa
}
// Store accumulators
m_vfAccumulators[ 0 ] = z1;
m_vfAccumulators[ 1 ] = z2;
z[ 0 ] = z1;
z[ 1 ] = z2;
}
CITABiquad::CParams::CParams()
......@@ -147,3 +146,13 @@ CITABiquad::CParams::CParams()
, b2( 0 )
{
}
void CITABiquad::CParams::SetParameters( const float params[] )
{
g = params[ 0 ];
b0 = params[ 1 ];
b1 = params[ 2 ];
b2 = params[ 3 ];
a1 = params[ 4 ];
a2 = params[ 5 ];
}
/*
* ----------------------------------------------------------------
*
* ITA core libs
* (c) Copyright Institute of Technical Acoustics (ITA)
* RWTH Aachen University, Germany, 2015-2017
*
* ----------------------------------------------------------------
* ____ __________ _______
* // / //__ ___/ // _ |
* // / // / // /_| |
* // / // / // ___ |
* //__/ //__/ //__/ |__|
*
* ----------------------------------------------------------------
*
*/
/* This file has been generated by the ita_dsp_design_filsters.m Matlab script */
#ifndef IW_ITA_DSP_THIRD_OCTAVE_FILTERBANK_IIR_COEFFICIENTS
#define IW_ITA_DSP_THIRD_OCTAVE_FILTERBANK_IIR_COEFFICIENTS
#include <vector>
namespace ITADSPThirdOctaveFilterbankIIR
{
const int ITA_BIQUAD_FILTER_NUM_BANDS = 30;
const int ITA_BIQUAD_FILTER_NUM_BIQUADS_PER_BAND = 5; // num sections
const double dSamplingFrequency = 44100.00; // Hz
const int iOrdner = 10;
const int iNumFrequencies = 31;
const std::vector< float > vfFrequencies =
{
20.0f, // Hz
25.0f, // Hz
31.5f, // Hz
40.0f, // Hz
50.0f, // Hz
62.5f, // Hz
80.0f, // Hz
100.0f, // Hz
125.0f, // Hz
155.0f, // Hz
200.0f, // Hz
250.0f, // Hz
315.0f, // Hz
400.0f, // Hz
500.0f, // Hz
630.0f, // Hz
800.0f, // Hz
1000.0f, // Hz
1250.0f, // Hz
1600.0f, // Hz
2000.0f, // Hz
2500.0f, // Hz
3150.0f, // Hz
4000.0f, // Hz
5000.0f, // Hz
6350.0f, // Hz
8000.0f, // Hz
10000.0f, // Hz
12500.0f, // Hz
16000.0f, // Hz
20000.0f, // Hz
};
// 3-dim vector access: FrequencyBand ; Biquad ; Param = { ScaleValue [1], sosMatrix [2-6] }
const std::vector< std::vector< std::vector< float > > > vvvfSOSMatrixCoefficients =
{
{
// Band 20.0 Hz sos matrix
{ 0.000002f, 1.000000f, 2.000000f, 1.000000f, 1.000000f, -1.999101f, 0.999109f, },
{ 0.000002f, 1.000000f, 2.000000f, 1.000000f, 1.000000f, -1.997408f, 0.997416f, },
{ 0.000002f, 1.000000f, 2.000000f, 1.000000f, 1.000000f, -1.995970f, 0.995978f, },
{ 0.000002f, 1.000000f, 2.000000f, 1.000000f, 1.000000f, -1.994927f, 0.994935f, },
{ 0.000002f, 1.000000f, 2.000000f, 1.000000f, 1.000000f, -1.994379f, 0.994387f, },
},
{
// Band 25.0 Hz sos matrix
{ 0.000819f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.999366f, 0.999386f, },
{ 0.000819f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.999594f, 0.999602f, },
{ 0.000819f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.998479f, 0.998496f, },
{ 0.000819f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.998845f, 0.998855f, },
{ 0.000819f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.998350f, 0.998363f, },
},
{
// Band 31.5 Hz sos matrix
{ 0.001068f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.999162f, 0.999194f, },
{ 0.001068f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.999472f, 0.999485f, },
{ 0.001068f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.998003f, 0.998030f, },
{ 0.001068f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.998500f, 0.998515f, },
{ 0.001067f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.997845f, 0.997865f, },
},
{
// Band 40.0 Hz sos matrix
{ 0.001317f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.998960f, 0.999009f, },
{ 0.001317f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.999342f, 0.999362f, },
{ 0.001316f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.997534f, 0.997576f, },
{ 0.001316f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.998140f, 0.998164f, },
{ 0.001316f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.997336f, 0.997368f, },
},
{
// Band 50.0 Hz sos matrix
{ 0.001602f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.998725f, 0.998802f, },
{ 0.001602f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.999184f, 0.999217f, },
{ 0.001601f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.996999f, 0.997065f, },
{ 0.001601f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.997716f, 0.997755f, },
{ 0.001600f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.996749f, 0.996799f, },
},
{
// Band 62.5 Hz sos matrix
{ 0.002136f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.998262f, 0.998389f, },
{ 0.002136f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.998919f, 0.998971f, },
{ 0.002133f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.995956f, 0.996064f, },
{ 0.002133f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.996971f, 0.997033f, },
{ 0.002133f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.995654f, 0.995735f, },
},
{
// Band 80.0 Hz sos matrix
{ 0.002669f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.997788f, 0.997987f, },
{ 0.002669f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.998633f, 0.998714f, },
{ 0.002666f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.994914f, 0.995082f, },
{ 0.002666f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.996197f, 0.996292f, },
{ 0.002664f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.994545f, 0.994671f, },
},
{
// Band 100.0 Hz sos matrix
{ 0.003203f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.997296f, 0.997606f, },
{ 0.003203f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.998303f, 0.998435f, },
{ 0.003197f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.993874f, 0.994139f, },
{ 0.003197f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.995359f, 0.995514f, },
{ 0.003195f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.993407f, 0.993609f, },
},
{
// Band 125.0 Hz sos matrix
{ 0.003913f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.996607f, 0.997084f, },
{ 0.003913f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.997872f, 0.998079f, },
{ 0.003906f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.992449f, 0.992857f, },
{ 0.003906f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.994263f, 0.994505f, },
{ 0.003903f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.991881f, 0.992194f, },
},
{
// Band 155.0 Hz sos matrix
{ 0.005334f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.995185f, 0.995978f, },
{ 0.005334f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.997106f, 0.997430f, },
{ 0.005320f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.989518f, 0.990188f, },
{ 0.005320f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.992217f, 0.992598f, },
{ 0.005315f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.988866f, 0.989371f, },
},
{
// Band 200.0 Hz sos matrix
{ 0.006753f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.993655f, 0.994893f, },
{ 0.006753f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.996263f, 0.996760f, },
{ 0.006731f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.986519f, 0.987561f, },
{ 0.006731f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.990073f, 0.990660f, },
{ 0.006722f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.985774f, 0.986556f, },
},
{
// Band 250.0 Hz sos matrix
{ 0.008172f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.991910f, 0.993876f, },
{ 0.008172f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.995197f, 0.996025f, },
{ 0.008139f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.983391f, 0.985059f, },
{ 0.008139f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.987640f, 0.988608f, },
{ 0.008126f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.982480f, 0.983748f, },
},
{
// Band 315.0 Hz sos matrix
{ 0.010650f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.988808f, 0.991973f, },
{ 0.010650f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.993572f, 0.994865f, },
{ 0.010594f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.977807f, 0.980474f, },
{ 0.010594f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.983731f, 0.985249f, },
{ 0.010573f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.976846f, 0.978854f, },
},
{
// Band 400.0 Hz sos matrix
{ 0.013125f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.985198f, 0.990140f, },
{ 0.013125f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.991590f, 0.993641f, },
{ 0.013040f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.971855f, 0.976025f, },
{ 0.013040f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.979387f, 0.981786f, },
{ 0.013008f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.970828f, 0.973983f, },
},
{
// Band 500.0 Hz sos matrix
{ 0.016302f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.979956f, 0.987794f, },
{ 0.016302f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.988761f, 0.992063f, },
{ 0.016171f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.963724f, 0.970344f, },
{ 0.016171f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.973493f, 0.977341f, },
{ 0.016122f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.962725f, 0.967756f, },
},
{
// Band 630.0 Hz sos matrix
{ 0.021230f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.971419f, 0.984019f, },
{ 0.021230f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.984596f, 0.989753f, },
{ 0.021010f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.950775f, 0.961335f, },
{ 0.021010f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.964679f, 0.970705f, },
{ 0.020927f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.950200f, 0.958145f, },
},
{
// Band 800.0 Hz sos matrix
{ 0.026143f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.960746f, 0.980393f, },
{ 0.026143f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.979143f, 0.987315f, },
{ 0.025811f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.936168f, 0.952635f, },
{ 0.025811f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.954380f, 0.963883f, },
{ 0.025687f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.936176f, 0.948626f, },
},
{
// Band 1000.0 Hz sos matrix
{ 0.031739f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.945730f, 0.976358f, },
{ 0.031739f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.971302f, 0.984446f, },
{ 0.031252f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.917207f, 0.942941f, },
{ 0.031252f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.940822f, 0.955989f, },
{ 0.031072f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.918215f, 0.937857f, },
},
{
// Band 1250.0 Hz sos matrix
{ 0.042177f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.918513f, 0.968362f, },
{ 0.042177f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.959086f, 0.979580f, },
{ 0.041326f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.882866f, 0.924209f, },
{ 0.041326f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.918462f, 0.942185f, },
{ 0.041015f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.886889f, 0.917971f, },
},
{
// Band 1600.0 Hz sos matrix
{ 0.052544f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.883270f, 0.960674f, },
{ 0.052544f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.942602f, 0.974511f, },
{ 0.051238f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.842334f, 0.906218f, },
{ 0.051238f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.891421f, 0.928185f, },
{ 0.050764f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.850457f, 0.898471f, },
},
{
// Band 2000.0 Hz sos matrix
{ 0.062841f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.833339f, 0.953510f, },
{ 0.062841f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.917025f, 0.969022f, },
{ 0.060993f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.789784f, 0.889300f, },
{ 0.060993f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.854477f, 0.913628f, },
{ 0.060329f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.803454f, 0.879342f, },
},
{
// Band 2500.0 Hz sos matrix
{ 0.079844f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.752679f, 0.941055f, },
{ 0.079844f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.879925f, 0.960653f, },
{ 0.076914f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.706218f, 0.860665f, },
{ 0.076914f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.799621f, 0.890988f, },
{ 0.075877f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.731055f, 0.848245f, },
},
{
// Band 3150.0 Hz sos matrix
{ 0.103322f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.626000f, 0.923923f, },
{ 0.103322f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.824196f, 0.949195f, },
{ 0.098535f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.581184f, 0.821887f, },
{ 0.098535f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.719613f, 0.860324f, },
{ 0.096874f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.625316f, 0.806252f, },
},
{
// Band 4000.0 Hz sos matrix
{ 0.126418f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.453124f, 0.908199f, },
{ 0.126418f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.741078f, 0.936993f, },
{ 0.119424f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.420470f, 0.786153f, },
{ 0.119424f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.611560f, 0.829135f, },
{ 0.117043f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.489466f, 0.765913f, },
},
{
// Band 5000.0 Hz sos matrix
{ 0.158763f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.179163f, 0.886868f, },
{ 0.158763f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.609822f, 0.919682f, },
{ 0.148101f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.447005f, 0.785879f, },
{ 0.148101f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.174879f, 0.737998f, },
{ 0.144561f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.284482f, 0.710877f, },
},
{
// Band 6350.0 Hz sos matrix
{ 0.199686f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -0.796288f, 0.861586f, },
{ 0.199686f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.425777f, 0.897063f, },
{ 0.183536f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.224617f, 0.731209f, },
{ 0.183536f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -0.843451f, 0.680681f, },
{ 0.178326f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.010579f, 0.643348f, },
},
{
// Band 8000.0 Hz sos matrix
{ 0.239376f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -0.290944f, 0.842143f, },
{ 0.239376f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -1.141474f, 0.871316f, },
{ 0.217132f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -0.909951f, 0.673736f, },
{ 0.217132f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -0.413487f, 0.633071f, },
{ 0.210136f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -0.645680f, 0.579727f, },
},
{
// Band 10000.0 Hz sos matrix
{ 0.289489f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, 0.355865f, 0.823971f, },
{ 0.289489f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -0.745157f, 0.834995f, },
{ 0.258678f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -0.492985f, 0.597368f, },
{ 0.258678f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, 0.135349f, 0.582248f, },
{ 0.249262f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -0.174336f, 0.501476f, },
},
{
// Band 12500.0 Hz sos matrix
{ 0.373293f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, 1.161744f, 0.813023f, },
{ 0.373293f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, -0.226640f, 0.764884f, },
{ 0.326657f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, 0.834287f, 0.526520f, },
{ 0.326657f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, 0.024728f, 0.459508f, },
{ 0.312956f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, 0.419294f, 0.374088f, },
},
{
// Band 16000.0 Hz sos matrix
{ 0.451712f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, 0.372812f, 0.651489f, },
{ 0.451712f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, 1.798158f, 0.880660f, },
{ 0.389515f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, 1.547760f, 0.646690f, },
{ 0.389515f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, 0.470276f, 0.263182f, },
{ 0.371736f, 1.000000f, 0.000000f, -1.000000f, 1.000000f, 0.989237f, 0.256529f, },
},
{
// Band 20000.0 Hz sos matrix
{ 0.020263f, 1.000000f, -2.000000f, 1.000000f, 1.000000f, 1.832743f, 0.913795f, },
{ 0.018728f, 1.000000f, -2.000000f, 1.000000f, 1.000000f, 1.693870f, 0.768781f, },
{ 0.017594f, 1.000000f, -2.000000f, 1.000000f, 1.000000f, 1.591300f, 0.661675f, },
{ 0.016852f, 1.000000f, -2.000000f, 1.000000f, 1.000000f, 1.524242f, 0.591651f, },
{ 0.016487f, 1.000000f, -2.000000f, 1.000000f, 1.000000f, 1.491205f, 0.557153f, },
},
};