/* * DFTProcessor.cpp * * Created on: 29.04.2011 * Author: sven */ #ifndef DFTPROCESSOR_H_ #include "DFTProcessor.h" #endif #ifndef _GLIBCXX_IOSTREAM #include #endif #ifndef _GLIBCXX_FSTREAM #include #endif #include #include #include #include const double PI = 3.14159265358979323846264338327950288419716939; const char* ORIG_FILENAME = "orig.wav"; const char* IDFT_FILENAME = "idft.wav"; DFTProcessor::DFTProcessor(DFTAppParameters& params) :mParams(params) ,mNumDftSamples(mParams.getNumSamples() / 2) ,mInputData(mParams.getNumSamples()) ,mRe(mNumDftSamples) ,mIm(mNumDftSamples) ,mIdft(mParams.getNumSamples()) { std::cout << "DFT processing " << mParams.getNumSamples() << " samples of" << mParams.getInputFilename() << std::endl; std::ifstream inFile; std::ofstream origFile; std::ofstream idftFile; inFile.open(mParams.getInputFilename().c_str(), std::ios::in | std::ios::binary); origFile.open(ORIG_FILENAME, std::ios::out | std::ios::binary); idftFile.open(IDFT_FILENAME, std::ios::out | std::ios::binary); int dataStartOffset = 0x2C; char header[dataStartOffset]; inFile.read(&header[0],dataStartOffset); memcpy(&mSampleRate,((&header[0])+0x18),4); origFile.write((char*) &header[0],dataStartOffset); idftFile.write((char*) &header[0],dataStartOffset); short data; std::cout << "Original file:" << std::endl; for (unsigned i=0;i::const_iterator specIter; for(specIter = mSpectrum.begin() ; specIter != mSpectrum.end() ; specIter++) { const SpectralData& actSpec = *specIter; if (specIter != mSpectrum.begin()) { csvFile << std::endl; } csvFile << actSpec.mFreq << ";"; csvFile << std::setprecision (12) << std::fixed << actSpec.mAmplitude; csvFile << ";"; csvFile << std::setprecision (12) << std::fixed << actSpec.mPhase; } csvFile.close(); } void DFTProcessor::startGnuPlot() { int i = system("gnuplot spectrum.plt -p"); if (i != 0) { std::cerr << "Error starting gnuplot: " << i << std::endl; } }