'How to average FFT(vector) values in c++?
I have vectors that shows calculated FFT values. I also try to calculate average values of FFT but face with some container errors. How can I calculate average of the vectors for seconds/blocks?
Here is my code;
int numberOfSamples = 0;
int numberOfBlocks = 10;
std::vector<double> fftSpectrum;
VectorOutputChannel fftOut;
VectorOutputChannel fftAverage;
void DemonProcessorModule::calculateFft(const std::vector<Sample>& inputSignal)
{
for (const auto& sample : inputSignal)
{
fft.timeDomain[numberOfSamples] = window[numberOfSamples] * sample.value;
++numberOfSamples;
if (numberOfSamples == m_fftLength)
{
numberOfSamples = 0;
fft.calculate();
for (size_t i = 0; i < fftSpectrum.size(); ++i)
{
fftSpectrum[i] = std::abs(fft.frequencyDomain[i]);
}
fftOut.addVector(fftSpectrum);
}
}
}
void FFT::calculate()
{
....
float average = accumulate(fftSpectrum.begin(), fftSpectrum.end(), 0.0 /
fftSpectrum.size());
fftAverage.addVector(average);
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
