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