X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=libctsim%2Ffilter.cpp;h=097a1f30e46a2722aba52ad00c188a6ed5676702;hb=ff9c2e8f6e126acbef08e0dfccc6ea112b44ca41;hp=941d905ea76512f78814763a11ce62bd5de2b02a;hpb=2a39ee3b125e3e2e68bbba2ac15a65039456ff7e;p=ctsim.git diff --git a/libctsim/filter.cpp b/libctsim/filter.cpp index 941d905..097a1f3 100644 --- a/libctsim/filter.cpp +++ b/libctsim/filter.cpp @@ -1,3 +1,4 @@ +#include "complex" /***************************************************************************** ** File IDENTIFICATION ** @@ -9,7 +10,7 @@ ** This is part of the CTSim program ** Copyright (C) 1983-2000 Kevin Rosenberg ** -** $Id: filter.cpp,v 1.26 2000/08/22 07:02:48 kevin Exp $ +** $Id: filter.cpp,v 1.30 2000/11/28 14:54:07 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 @@ -31,9 +32,9 @@ int SignalFilter::N_INTEGRAL=500; //static member const int SignalFilter::FILTER_INVALID = -1 ; const int SignalFilter::FILTER_ABS_BANDLIMIT = 0; // filter times |x = | -const int SignalFilter::FILTER_ABS_SINC = 1; -const int SignalFilter::FILTER_ABS_G_HAMMING = 2; -const int SignalFilter::FILTER_ABS_COSINE = 3; +const int SignalFilter::FILTER_ABS_G_HAMMING = 1; +const int SignalFilter::FILTER_ABS_COSINE = 2; +const int SignalFilter::FILTER_ABS_SINC = 3; const int SignalFilter::FILTER_SHEPP = 4; const int SignalFilter::FILTER_BANDLIMIT = 5; const int SignalFilter::FILTER_SINC = 6; @@ -43,9 +44,9 @@ const int SignalFilter::FILTER_TRIANGLE = 9; const char* SignalFilter::s_aszFilterName[] = { {"abs_bandlimit"}, - {"abs_sinc"}, {"abs_hamming"}, {"abs_cosine"}, + {"abs_sinc"}, {"shepp"}, {"bandlimit"}, {"sinc"}, @@ -56,9 +57,9 @@ const char* SignalFilter::s_aszFilterName[] = { const char* SignalFilter::s_aszFilterTitle[] = { {"Abs(w) * Bandlimit"}, - {"Abs(w) * Sinc"}, {"Abs(w) * Hamming"}, {"Abs(w) * Cosine"}, + {"Abs(w) * Sinc"}, {"Shepp"}, {"Bandlimit"}, {"Sinc"}, @@ -401,31 +402,31 @@ SignalFilter::frequencyResponse (int filterID, double bw, double u, double param switch (filterID) { case FILTER_BANDLIMIT: - if (fabs(au) > fabs(bw / 2) + F_EPSILON) + if (fabs(au) >= fabs(bw / 2) + F_EPSILON) q = 0.; else q = 1; break; case FILTER_ABS_BANDLIMIT: - if (fabs(au) > fabs(bw / 2) + F_EPSILON) + if (fabs(au) >= fabs(bw / 2) + F_EPSILON) q = 0.; else q = au; break; case FILTER_TRIANGLE: - if (fabs(au) > fabs(bw / 2) + F_EPSILON) + if (fabs(au) >= fabs(bw / 2) + F_EPSILON) q = 0; else q = 1 - au / bw; break; case FILTER_COSINE: - if (fabs(au) > fabs(bw / 2) + F_EPSILON) + if (fabs(au) >= fabs(bw / 2) + F_EPSILON) q = 0; else q = cos(PI * u / bw); break; case FILTER_ABS_COSINE: - if (fabs(au) > fabs(bw / 2) + F_EPSILON) + if (fabs(au) >= fabs(bw / 2) + F_EPSILON) q = 0; else q = au * cos(PI * u / bw); @@ -437,13 +438,13 @@ SignalFilter::frequencyResponse (int filterID, double bw, double u, double param q = au * bw * sinc (PI * bw * u, 1.); break; case FILTER_G_HAMMING: - if (fabs(au) > fabs(bw / 2) + F_EPSILON) + if (fabs(au) >= fabs(bw / 2) + F_EPSILON) q = 0; else q = param + (1 - param) * cos (TWOPI * u / bw); break; case FILTER_ABS_G_HAMMING: - if (fabs(au) > fabs(bw / 2) + F_EPSILON) + if (fabs(au) >= fabs(bw / 2) + F_EPSILON) q = 0; else q = au * (param + (1 - param) * cos(TWOPI * u / bw));