| 73 | } |
| 74 | |
| 75 | void FFTFrame::multiply(const FFTFrame & frame) |
| 76 | { |
| 77 | FFTFrame & frame1 = *this; |
| 78 | FFTFrame & frame2 = const_cast<FFTFrame &>(frame); |
| 79 | |
| 80 | float * realP1 = frame1.realData(); |
| 81 | float * imagP1 = frame1.imagData(); |
| 82 | const float * realP2 = frame2.realData(); |
| 83 | const float * imagP2 = frame2.imagData(); |
| 84 | |
| 85 | unsigned halfSize = fftSize() / 2; |
| 86 | float real0 = realP1[0]; |
| 87 | float imag0 = imagP1[0]; |
| 88 | VectorMath::zvmul(realP1, imagP1, realP2, imagP2, realP1, imagP1, halfSize); |
| 89 | |
| 90 | // Multiply the packed DC/nyquist component |
| 91 | realP1[0] = real0 * realP2[0]; |
| 92 | imagP1[0] = imag0 * imagP2[0]; |
| 93 | } |
| 94 | |
| 95 | void FFTFrame::computeForwardFFT(const float * data) |
| 96 | { |