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