std::vector<float> forwardRealFloat(const std::vector<float>& input)
{
size_t n = input.size();
size_t paddedSize = 1;
while (paddedSize < n)
paddedSize <<= 1;
PFFFT_Setup* setup = pffft_new_setup(paddedSize, PFFFT_REAL);
std::vector<float> inputPadded(paddedSize, 0.f);
std::copy(input.begin(), input.end(), inputPadded.begin());
std::vector<float> output(paddedSize);
std::vector<float> work(paddedSize);
pffft_transform_ordered(setup, inputPadded.data(), output.data(), work.data(), PFFFT_FORWARD);
size_t validLength = (n % 2 == 0) ? n / 2 : (n + 1) / 2;
std::vector<float> validOutput;
for (int i = 0; i < output.size(); i += 2) {
validOutput.push_back(sqrt(output[i] * output[i]+output[i + 1] *output[i+1]));
}
pffft_destroy_setup(setup);
return validOutput;
}
input 输入的数据
output 计算后的数据
input和output 数据长度一样,但是实际计算后的数据长度仅为input的一半,output 实际上分为实部和虚部,两两组合成一个,