|
发表于 2011-8-2 03:39:16
|
显示全部楼层
除了数学项目之外,基本也就没有用整数的了吧……
引用一段Ap的源代码- CPUComputation::CPUComputation ()
- 14 {
- 15 m_bInterleaved = false;
- 16 if ( m_bInterleaved )
- 17 {
- 18 m_pfInput =
- 19 (float *)fftwf_malloc ( 4 * sciFFTLength * sizeof ( float ) );
- 20 m_pfOutput =
- 21 (float *)fftwf_malloc ( 4 * sciFFTLength * sizeof ( float ) );
- 22 m_pfInputInv =
- 23 (float *)fftwf_malloc ( 4 * sciFFTLength * sizeof ( float ) );
- 24 m_pfOutputInv =
- 25 (float *)fftwf_malloc ( 4 * sciFFTLength * sizeof ( float ) );
- 26
- 27 m_fpForwardPlan = fftwf_plan_many_dft ( 1, &sciFFTLength, 2,
- 28 (fftwf_complex *)m_pfInput,
- 29 NULL, 2, 1,
- 30 (fftwf_complex *)m_pfOutput,
- 31 NULL, 2, 1,
- 32 FFTW_FORWARD, FFTW_MEASURE );
- 33 m_fpInversePlan = fftwf_plan_many_dft ( 1, &sciFFTLength, 2,
- 34 (fftwf_complex *)m_pfInputInv,
- 35 NULL, 2, 1,
- 36 (fftwf_complex *)m_pfOutputInv,
- 37 NULL, 2, 1,
- 38 FFTW_BACKWARD, FFTW_MEASURE );
- 39 }
- 40 else
- 41 {
- 42 m_pfInput =
- 43 (float *)fftwf_malloc ( 2 * sciFFTLength * sizeof ( float ) );
- 44 m_pfOutput =
- 45 (float *)fftwf_malloc ( 2 * sciFFTLength * sizeof ( float ) );
- 46 m_pfInputInv =
- 47 (float *)fftwf_malloc ( 2 * sciFFTLength * sizeof ( float ) );
- 48 m_pfOutputInv =
- 49 (float *)fftwf_malloc ( 2 * sciFFTLength * sizeof ( float ) );
- 50
- 51 m_fpForwardPlan = fftwf_plan_dft_1d ( sciFFTLength,
- 52 (fftwf_complex *)m_pfInput,
- 53 (fftwf_complex *)m_pfOutput,
- 54 FFTW_FORWARD, FFTW_MEASURE );
- 55 m_fpInversePlan = fftwf_plan_dft_1d ( sciFFTLength,
- 56 (fftwf_complex *)m_pfInputInv,
- 57 (fftwf_complex *)m_pfOutputInv,
- 58 FFTW_BACKWARD, FFTW_MEASURE );
- 59 }
- 60 }
- 61
- 62 CPUComputation::~CPUComputation ()
- 63 {
- 64 fftwf_destroy_plan ( m_fpForwardPlan );
- 65 fftwf_destroy_plan ( m_fpInversePlan );
- 66
- 67 fftwf_free ( m_pfInput );
- 68 fftwf_free ( m_pfOutput );
- 69 fftwf_free ( m_pfInputInv );
- 70 fftwf_free ( m_pfOutputInv );
- 71 }
- 72
- 73 float CPUComputation::Execute ( float *pfInput, float *pfOutput )
- 74 {
- 75
- 76 int i;
- 77
- 78 if ( m_bInterleaved )
- 79 {
- 80 for ( i = 0; i < sciFFTQuantity; i++ )
- 81 {
- 82 memcpy ( m_pfInput, pfInput + 4 * i * sciFFTLength,
- 83 4 * sciFFTLength * sizeof ( float ) );
- 84
- 85 fftwf_execute ( m_fpForwardPlan );
- 86
- 87 memcpy ( m_pfInputInv, m_pfOutput,
- 88 4 * sciFFTLength * sizeof ( float ) );
- 89
- 90 fftwf_execute ( m_fpInversePlan );
- 91
- 92 memcpy ( pfOutput + 4 * i * sciFFTLength, m_pfOutputInv,
- 93 4 * sciFFTLength * sizeof ( float ) );
- 94 }
- 95 }
- 96 else
- 97 {
- 98 for ( i = 0; i < 2 * sciFFTQuantity; i++ )
- 99 {
- 100 memcpy ( m_pfInput, pfInput + 2 * i * sciFFTLength,
- 101 2 * sciFFTLength * sizeof ( float ) );
- 102
- 103 fftwf_execute ( m_fpForwardPlan );
- 104 /*
- 105 memcpy ( m_pfInputInv, m_pfOutput,
- 106 2 * sciFFTLength * sizeof ( float ) );
- 107
- 108 fftwf_execute ( m_fpInversePlan );
- 109
- 110 memcpy ( pfOutput + 2 * i * sciFFTLength, m_pfOutputInv,
- 111 2 * sciFFTLength * sizeof ( float ) );
- 112 */
- 113
- 114 memcpy ( pfOutput + 2 * i * sciFFTLength, m_pfOutput,
- 115 2 * sciFFTLength * sizeof ( float ) );
- 116
- 117 }
- 118 }
复制代码 除了for循环之外就全是float了…… |
|