00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include <stdio.h>
00024 #ifdef USE_INTEL_MATH
00025 #include <mathimf.h>
00026 #else
00027 #include <math.h>
00028 #endif
00029 #include <float.h>
00030
00031 #include "dsp/IIRDecimator.hh"
00032
00033
00034 clIIRDecimator::clIIRDecimator ()
00035 {
00036 }
00037
00038
00039 clIIRDecimator::~clIIRDecimator ()
00040 {
00041 Uninitialize();
00042 }
00043
00044
00045 void clIIRDecimator::Uninitialize ()
00046 {
00047 DecBuf.Free();
00048 clIIRMultiRate::Uninitialize();
00049 }
00050
00051
00052 void clIIRDecimator::Put (const float *fpSrcData, long lSrcCount)
00053 {
00054 InBuf.Put(fpSrcData, lSrcCount);
00055 }
00056
00057
00058 void clIIRDecimator::Put (const double *dpSrcData, long lSrcCount)
00059 {
00060 InBuf.Put(dpSrcData, lSrcCount);
00061 }
00062
00063
00064 bool clIIRDecimator::Get (float *fpDestData, long lDestCount)
00065 {
00066 long lWorkCount;
00067 float *fpDecBuf;
00068
00069 lWorkCount = lDestCount * lFactor;
00070 fpDecBuf = (float *) DecBuf.Size(lWorkCount * sizeof(float));
00071 if (!InBuf.Get(fpDecBuf, lWorkCount))
00072 return false;
00073 Process(fpDecBuf, lWorkCount);
00074 DSP.Decimate(fpDestData, fpDecBuf, lFactor, lWorkCount);
00075 return true;
00076 }
00077
00078
00079 bool clIIRDecimator::Get (double *dpDestData, long lDestCount)
00080 {
00081 long lWorkCount;
00082 double *dpDecBuf;
00083
00084 lWorkCount = lDestCount * lFactor;
00085 dpDecBuf = (double *) DecBuf.Size(lWorkCount * sizeof(double));
00086 if (!InBuf.Get(dpDecBuf, lWorkCount))
00087 return false;
00088 Process(dpDecBuf, lWorkCount);
00089 DSP.Decimate(dpDestData, dpDecBuf, lFactor, lWorkCount);
00090 return true;
00091 }