X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=libctsim%2Fprocsignal.cpp;h=949e686163f084aaf779475ada170baaa8768d83;hb=64c9743370f5c2f03bfc8866c54dd84ed306a614;hp=86501abc043b5571d8f87b81afd8aeb52aa7bd59;hpb=516c8b2394cea4e5e5382cd163537c9983269960;p=ctsim.git diff --git a/libctsim/procsignal.cpp b/libctsim/procsignal.cpp index 86501ab..949e686 100644 --- a/libctsim/procsignal.cpp +++ b/libctsim/procsignal.cpp @@ -9,7 +9,7 @@ ** This is part of the CTSim program ** Copyright (C) 1983-2000 Kevin Rosenberg ** -** $Id: procsignal.cpp,v 1.16 2001/01/12 04:28:37 kevin Exp $ +** $Id: procsignal.cpp,v 1.18 2001/01/12 14:21:06 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 @@ -364,6 +364,8 @@ ProcessSignal::init (const int idFilter, const int idFilterMethod, double dBandw } #endif +// #define PRE_JAN_2001 1 +#ifdef PRE_JAN_2001 if (m_idGeometry == Scanner::GEOMETRY_EQUILINEAR) { for (i = 0; i < m_nFilterPoints; i++) adSpatialFilter[i] *= 0.5; @@ -384,19 +386,41 @@ ProcessSignal::init (const int idFilter, const int idFilterMethod, double dBandw m_adFilter = new double [m_nFilterPoints]; std::complex* acInverseFilter = new std::complex [m_nFilterPoints]; -#define PRE_JAN_2001 1 -#ifdef PRE_JAN_2001 finiteFourierTransform (adSpatialFilter, acInverseFilter, m_nFilterPoints, BACKWARD); delete adSpatialFilter; for (i = 0; i < m_nFilterPoints; i++) m_adFilter[i] = std::abs (acInverseFilter[i]) * m_dSignalInc; delete acInverseFilter; #else + for (i = nSpatialPoints; i < m_nFilterPoints; i++) + adSpatialFilter[i] = 0; + +// for (i = 0; i < m_nFilterPoints; i++) +// adSpatialFilter[i] /= m_dSignalInc; + + std::complex* acInverseFilter = new std::complex [m_nFilterPoints]; finiteFourierTransform (adSpatialFilter, acInverseFilter, m_nFilterPoints, FORWARD); delete adSpatialFilter; + m_adFilter = new double [m_nFilterPoints]; for (i = 0; i < m_nFilterPoints; i++) m_adFilter[i] = std::abs(acInverseFilter[i]); delete acInverseFilter; + + if (m_idGeometry == Scanner::GEOMETRY_EQUILINEAR) { + for (i = 0; i < m_nFilterPoints; i++) + m_adFilter[i] *= 0.5; + } else if (m_idGeometry == Scanner::GEOMETRY_EQUIANGULAR) { + for (i = 0; i < m_nFilterPoints; i++) { + int iDetFromZero = i - ((m_nFilterPoints - 1) / 2); + double sinScale = sin (iDetFromZero * m_dSignalInc); + if (fabs(sinScale) < 1E-7) + sinScale = 1; + else + sinScale = (iDetFromZero * m_dSignalInc) / sinScale; + double dScale = 0.5 * sinScale * sinScale; + m_adFilter[i] *= dScale; + } + } #endif #ifdef HAVE_SGP