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/IIRInterpolator.hh"
00032
00033
00034 clIIRInterpolator::clIIRInterpolator ()
00035 {
00036 }
00037
00038
00039 clIIRInterpolator::~clIIRInterpolator ()
00040 {
00041 Uninitialize();
00042 }
00043
00044
00045 void clIIRInterpolator::Uninitialize ()
00046 {
00047 IntBuf.Free();
00048 clIIRMultiRate::Uninitialize();
00049 }
00050
00051
00052 void clIIRInterpolator::Put (const float *fpSrcData, long lSrcCount)
00053 {
00054 long lWorkCount;
00055 float *fpIntBuf;
00056
00057 lWorkCount = lSrcCount * lFactor;
00058 fpIntBuf = (float *) IntBuf.Size(lWorkCount * sizeof(float));
00059 DSP.Interpolate(fpIntBuf, fpSrcData, lFactor, lSrcCount);
00060 Process(fpIntBuf, lWorkCount);
00061 OutBuf.Put(fpIntBuf, lWorkCount);
00062 }
00063
00064
00065 void clIIRInterpolator::Put (const double *dpSrcData, long lSrcCount)
00066 {
00067 long lWorkCount;
00068 double *dpIntBuf;
00069
00070 lWorkCount = lSrcCount * lFactor;
00071 dpIntBuf = (double *) IntBuf.Size(lWorkCount * sizeof(double));
00072 DSP.Interpolate(dpIntBuf, dpSrcData, lFactor, lSrcCount);
00073 Process(dpIntBuf, lWorkCount);
00074 OutBuf.Put(dpIntBuf, lWorkCount);
00075 }
00076
00077
00078 bool clIIRInterpolator::Get (float *fpDestData, long lDestCount)
00079 {
00080 return OutBuf.Get(fpDestData, lDestCount);
00081 }
00082
00083
00084 bool clIIRInterpolator::Get (double *dpDestData, long lDestCount)
00085 {
00086 return OutBuf.Get(dpDestData, lDestCount);
00087 }