git-svn-id: http://moon:8086/svn/software/trunk/libsrc/iir@1 b431acfa-c32f-4a4a-93f1-934dc6c82436
69 lines
2.0 KiB
Plaintext
Executable File
69 lines
2.0 KiB
Plaintext
Executable File
/******************************************************************************/
|
|
|
|
/******************************************************************************/
|
|
#define pi 3.1415926535897932384626433832795
|
|
|
|
#define IIR_FILTERTYPE_UNKNOWN 0x00000000
|
|
#define IIR_FILTERTYPE_LOWPASS 0x00000001
|
|
#define IIR_FILTERTYPE_HIGHPASS 0x00000002
|
|
#define IIR_FILTERTYPE_BANDPASS 0x00000003
|
|
#define IIR_FILTERTYPE_BANDSTOP 0x00000004
|
|
|
|
/******************************************************************************/
|
|
typedef struct _sComplex
|
|
{
|
|
double pRealData, pImagData;
|
|
} Complex;
|
|
|
|
class CIIRCoeff
|
|
{
|
|
public:
|
|
CIIRCoeff(unsigned Na=0, unsigned Nb=0)
|
|
{
|
|
Init(Na, Nb);
|
|
}
|
|
~CIIRCoeff()
|
|
{
|
|
if(m_pak!=0)
|
|
delete [] m_pak;
|
|
|
|
if(m_pbk!=0)
|
|
delete [] m_pbk;
|
|
}
|
|
void Init(unsigned Na=0, unsigned Nb=0)
|
|
{
|
|
m_pak= 0;
|
|
m_pbk= 0;
|
|
m_Na = Na;
|
|
m_Nb = Nb;
|
|
m_aScale = 1.0;
|
|
m_bScale = 1.0;
|
|
|
|
if(Na!=0)
|
|
m_pak = new double[Na+1];
|
|
|
|
if(Nb!=0)
|
|
m_pbk = new double[Nb+1];
|
|
}
|
|
|
|
double *m_pak, m_aScale;
|
|
unsigned m_Na;
|
|
double *m_pbk, m_bScale;
|
|
unsigned m_Nb;
|
|
};
|
|
|
|
/******************************************************************************/
|
|
int IIRCalcPartFilterCoeff1(CIIRCoeff *pCoeff, double fg, double fa, double Qi, unsigned filterType);
|
|
int IIRCalcPartFilterCoeff2(CIIRCoeff *pCoeff, double fg, double fa, double Qi, unsigned filterType);
|
|
int IIRCalcFilterCoeff(double fg, double fa, double Qi, unsigned N, CIIRCoeff *pCoeff, unsigned filterType);
|
|
double IIRBilTrans(double fg, double fa);
|
|
double IIRCalcQp(unsigned p, unsigned N);
|
|
unsigned IIRMulPolynom(double *pA, unsigned orderA, double *pB, unsigned orderB, double *pProduct);
|
|
void IIR(double *xn, double *yn, CIIRCoeff *pCoeff, unsigned numPoints);
|
|
void IIRPrintCoeff(FILE *pFile, CIIRCoeff *pCoeff, unsigned N);
|
|
void ScaleCoeff(CIIRCoeff *pCoeff);
|
|
double MinMag(double val1, double val2);
|
|
double MaxMag(double val1, double val2);
|
|
|
|
/******************************************************************************/
|