00001 // **************************************************************************** 00002 // This file is part of the Integrating Vision Toolkit (IVT). 00003 // 00004 // The IVT is maintained by the Karlsruhe Institute of Technology (KIT) 00005 // (www.kit.edu) in cooperation with the company Keyetech (www.keyetech.de). 00006 // 00007 // Copyright (C) 2014 Karlsruhe Institute of Technology (KIT). 00008 // All rights reserved. 00009 // 00010 // Redistribution and use in source and binary forms, with or without 00011 // modification, are permitted provided that the following conditions are met: 00012 // 00013 // 1. Redistributions of source code must retain the above copyright 00014 // notice, this list of conditions and the following disclaimer. 00015 // 00016 // 2. Redistributions in binary form must reproduce the above copyright 00017 // notice, this list of conditions and the following disclaimer in the 00018 // documentation and/or other materials provided with the distribution. 00019 // 00020 // 3. Neither the name of the KIT nor the names of its contributors may be 00021 // used to endorse or promote products derived from this software 00022 // without specific prior written permission. 00023 // 00024 // THIS SOFTWARE IS PROVIDED BY THE KIT AND CONTRIBUTORS “AS IS” AND ANY 00025 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 00026 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 00027 // DISCLAIMED. IN NO EVENT SHALL THE KIT OR CONTRIBUTORS BE LIABLE FOR ANY 00028 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 00029 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 00030 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 00031 // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00032 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 00033 // THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00034 // **************************************************************************** 00035 // **************************************************************************** 00036 // Filename: Normalizer.cpp 00037 // Author: Pedram Azad 00038 // Date: 2005 00039 // **************************************************************************** 00040 00041 00042 // **************************************************************************** 00043 // Includes 00044 // **************************************************************************** 00045 00046 #include <new> // for explicitly using correct new/delete operators on VC DSPs 00047 00048 #include "Normalizer.h" 00049 00050 #include <float.h> 00051 00052 00053 00054 // **************************************************************************** 00055 // Functions 00056 // **************************************************************************** 00057 00058 void Normalizer::NormalizeLength(float *pInput, int nInputLength, float *pOutput, int nOutputLength) 00059 { 00060 const float factor = float(nInputLength) / nOutputLength; 00061 00062 int i; 00063 const int last_i = int((nInputLength - 1) / factor); 00064 00065 for (i = 0; i <= last_i; i++) 00066 { 00067 const int offset = int(i * factor); 00068 const float w = i * factor - offset; 00069 00070 pOutput[i] = (1 - w) * pInput[offset] + w * pInput[offset + 1]; 00071 } 00072 00073 for (i = last_i + 1; i < nOutputLength; i++) 00074 pOutput[i] = pInput[nInputLength - 1]; 00075 } 00076 00077 00078 void Normalizer::NormalizeAmplitude(float *pData, int nLength) 00079 { 00080 float min = FLT_MAX, max = -FLT_MAX; 00081 int i; 00082 00083 if (nLength < 2) 00084 return; 00085 00086 for (i = 0; i < nLength; i++) 00087 { 00088 if (pData[i] > max) 00089 max = pData[i]; 00090 00091 if (pData[i] < min) 00092 min = pData[i]; 00093 } 00094 00095 const float factor = 100.0f / (max - min); 00096 00097 for (i = 0; i < nLength; i++) 00098 pData[i] = (pData[i] - min) * factor; 00099 } 00100 00101 void Normalizer::NormalizeStartingPoint(float *pData, int nLength) 00102 { 00103 if (nLength < 2) 00104 return; 00105 00106 const float first = pData[0]; 00107 00108 for (int i = 0; i < nLength; i++) 00109 pData[i] -= first; 00110 }