/*********************************************************************** qwindowfunction.cpp - Source file for QWindowFunction, QWindowFunctionManager, QRectangularFunction, QHammingFunction, QHannFunction Template classes necessary for applying a window function to a discrete set of samples. ************************************************************************ This file is part of QRealFourier. QRealFourier is free software: you can redistribute it and/or modify it under the terms of the Lesser GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Foobar is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU General Public License for more details. You should have received a copy of the Lesser GNU General Public License along with Foobar. If not, see . ************************************************************************ Copyright © 2012 - 2013 Christoph Stallmann, University of Pretoria Developer: Christoph Stallmann University of Pretoria Department of Computer Science http://www.visore.org http://sourceforge.net/projects/qrealfourier http://github.com/visore/QRealFourier qrealfourier@visore.org qrealfourier@gmail.com ***********************************************************************/ #include "qwindowfunction.h" /*********************************************************************** QWindowFunction ***********************************************************************/ template void QWindowFunction::apply(T *data, int size) { for(int i = 0; i < size; ++i) { data[i] *= mWindow[i]; } } template void QWindowFunction::create(int size) { if(size != mWindow.size()) { mWindow.clear(); mWindow.resize(size); fillWindow(size); } } template void QWindowFunction::fillWindow(int size) { for(int i = 0; i < size; ++i) { mWindow[i] = calculate(i, size); } } template class QWindowFunction; template class QWindowFunction; template class QWindowFunction; template class QWindowFunction; template class QWindowFunction; /*********************************************************************** QWindowFunctionManager ***********************************************************************/ template QWindowFunction* QWindowFunctionManager::createFunction(QString functionName) { functionName = functionName.trimmed().toLower().replace("function", ""); if(functionName == "hamming") { return new QHammingFunction; } else if(functionName == "hann") { return new QHannFunction; } return NULL; } template QStringList QWindowFunctionManager::functions() { QStringList result; result << "Rectangular" << "Hamming" << "Hann"; return result; } template class QWindowFunctionManager; template class QWindowFunctionManager; template class QWindowFunctionManager; template class QWindowFunctionManager; template class QWindowFunctionManager; /*********************************************************************** QRectangularFunction ***********************************************************************/ template T QRectangularFunction::calculate(int currentSample, int totalSamples) { (void) currentSample; (void) totalSamples; return 1.0; } template class QRectangularFunction; template class QRectangularFunction; template class QRectangularFunction; template class QRectangularFunction; template class QRectangularFunction; /*********************************************************************** QHammingFunction ***********************************************************************/ template T QHammingFunction::calculate(int currentSample, int totalSamples) { return 0.54 + (0.46 * qCos((2 * M_PI * currentSample) / (totalSamples - 1))); } template class QHammingFunction; template class QHammingFunction; template class QHammingFunction; template class QHammingFunction; template class QHammingFunction; /*********************************************************************** QHannFunction ***********************************************************************/ template T QHannFunction::calculate(int currentSample, int totalSamples) { return 0.5 * (1 - qCos((2 * M_PI * currentSample) / (totalSamples - 1))); } template class QHannFunction; template class QHannFunction; template class QHannFunction; template class QHannFunction; template class QHannFunction;