/***********************************************************************
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;