X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=libctsim%2Ffilter.cpp;h=84d2e7b4e080f877d9d162973d548e70131be084;hb=980bef9b95bef1ab728634181a5672088fd47066;hp=48ae6120cf6454a0c95171a2770ece3c798125dd;hpb=73d188fc0cf01163d61ecb0662b8a16a44b57eab;p=ctsim.git diff --git a/libctsim/filter.cpp b/libctsim/filter.cpp index 48ae612..84d2e7b 100644 --- a/libctsim/filter.cpp +++ b/libctsim/filter.cpp @@ -9,7 +9,7 @@ ** This is part of the CTSim program ** Copyright (C) 1983-2000 Kevin Rosenberg ** -** $Id: filter.cpp,v 1.21 2000/07/22 16:14:49 kevin Exp $ +** $Id: filter.cpp,v 1.23 2000/07/31 14:48:35 kevin Exp $ ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License (version 2) as @@ -136,10 +136,8 @@ const int SignalFilter::s_iDomainCount = sizeof(s_aszDomainName) / sizeof(const */ SignalFilter::SignalFilter (const char* filterName, const char* filterMethodName, double bw, double signalIncrement, int nSignalPoints, double param, const char* domainName, int zeropad = 0, int preinterpolationFactor = 1) + : m_vecFilter(NULL), m_vecFourierCosTable(NULL), m_vecFourierSinTable(NULL), m_fail(false) { - m_vecFilter = NULL; - m_vecFourierCosTable = NULL; - m_vecFourierSinTable = NULL; m_idFilter = convertFilterNameToID (filterName); if (m_idFilter == FILTER_INVALID) { m_fail = true; @@ -165,18 +163,17 @@ SignalFilter::SignalFilter (const char* filterName, const char* filterMethodName } SignalFilter::SignalFilter (const int filterID, const int filterMethodID, double bw, double signalIncrement, int nSignalPoints, double param, const int domainID, int zeropad = 0, int preinterpolationFactor = 1) + : m_vecFilter(NULL), m_vecFourierCosTable(NULL), m_vecFourierSinTable(NULL), m_fail(false) { init (filterID, filterMethodID, bw, signalIncrement, nSignalPoints, param, domainID, zeropad, preinterpolationFactor); } SignalFilter::SignalFilter (const char* filterName, const char* domainName, double bw, double param) + : m_vecFilter(NULL), m_vecFourierCosTable(NULL), m_vecFourierSinTable(NULL), m_fail(false) { m_bw = bw; m_nSignalPoints = 0; m_nFilterPoints = 0; - m_vecFilter = NULL; - m_vecFourierCosTable = NULL; - m_vecFourierSinTable = NULL; m_filterParam = param; m_idFilter = convertFilterNameToID (filterName); if (m_idFilter == FILTER_INVALID) { @@ -209,7 +206,6 @@ SignalFilter::init (const int filterID, const int filterMethodID, double bw, dou m_nameFilter = convertFilterIDToName (m_idFilter); m_nameDomain = convertDomainIDToName (m_idDomain); m_nameFilterMethod = convertFilterMethodIDToName (m_idFilterMethod); - m_fail = false; m_nSignalPoints = nSignalPoints; m_signalInc = signalIncrement; m_filterParam = filterParam; @@ -321,11 +317,16 @@ SignalFilter::init (const int filterID, const int filterMethodID, double bw, dou } else if (m_idDomain == DOMAIN_SPATIAL) { double x; int i; - for (x = m_filterMin, i = 0; i < m_nFilterPoints; x += m_filterInc, i++) + for (x = m_filterMin, i = 0; i < m_nFilterPoints; x += m_filterInc, i++) { if (haveAnalyticSpatial(m_idFilter)) m_vecFilter[i] = spatialResponseAnalytic (x, m_filterParam); else m_vecFilter[i] = spatialResponseCalc (x, m_filterParam); +#if LIMIT_BANDWIDTH_TRIAL + if (i < m_nFilterPoints / 4 || i > (m_nFilterPoints * 3) / 4) + m_vecFilter[i] = 0; +#endif + } } else { m_failMessage = "Illegal domain name "; m_failMessage += m_idDomain; @@ -363,10 +364,10 @@ SignalFilter::convertFilterNameToID (const char *filterName) int filterID = FILTER_INVALID; for (int i = 0; i < s_iFilterCount; i++) - if (strcasecmp (filterName, s_aszFilterName[i]) == 0) { - filterID = i; - break; - } + if (strcasecmp (filterName, s_aszFilterName[i]) == 0) { + filterID = i; + break; + } return (filterID); } @@ -413,7 +414,7 @@ SignalFilter::convertFilterMethodIDToName (const int fmID) static const char *name = ""; if (fmID >= 0 && fmID < s_iFilterMethodCount) - return (s_aszFilterName [fmID]); + return (s_aszFilterMethodName [fmID]); return (name); }