X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=libctsim%2Fconvolve.cpp;fp=libctsim%2Fconvolve.cpp;h=0000000000000000000000000000000000000000;hb=44ba9ce559d2d52cbd7bbea6bcd76242840fd3eb;hp=52abd9443189c29182f7766986578edfce6d4308;hpb=595e63c804284d460ce4d032c3848b75bc57186d;p=ctsim.git diff --git a/libctsim/convolve.cpp b/libctsim/convolve.cpp deleted file mode 100644 index 52abd94..0000000 --- a/libctsim/convolve.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/***************************************************************************** -** FILE IDENTIFICATION -** -** Name: Convolve.c Convolution functions -** Date Started: 13 Mar 86 -** -** This is part of the CTSim program -** Copyright (C) 1983-2000 Kevin Rosenberg -** -** 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 -** published by the Free Software Foundation. -** -** This program 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 -** GNU General Public License for more details. -** -** You should have received a copy of the GNU General Public License -** along with this program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -******************************************************************************/ - -#include "ct.h" - - -/* NAME - * convolve Discrete convolution of two functions - * - * SYNOPSIS - * r = convolve (f1, f2, dx, n, np, func_type) - * double r Convolved result - * double f1[], f2[] Functions to be convolved - * double dx Difference between successive x values - * int n Array index to center convolution about - * int np Number of points in f1 array - * int func_type EVEN or ODD or EVEN_AND_ODD function f2 - * - * NOTES - * f1 is the projection data, its indices range from 0 to np - 1. - * The index for f2, the filter, ranges from -(np-1) to (np-1). - * There are 3 ways to handle the negative vertices of f2: - * 1. If we know f2 is an EVEN function, then f2[-n] = f2[n]. - * All filters used in reconstruction are even. - * 2. If we know f2 is an ODD function, then f2[-n] = -f2[n] - * 3. If f2 is both ODD AND EVEN, then we must store the value of f2 - * for negative indices. Since f2 must range from -(np-1) to (np-1), - * if we add (np - 1) to f2's array index, then f2's index will - * range from 0 to 2 * (np - 1), and the origin, x = 0, will be - * stored at f2[np-1]. - */ - -double -convolve (const double f1[], const double f2[], const double dx, const int n, const int np, const FunctionSymmetry func_type) -{ - double sum = 0.0; - - if (func_type == FUNC_BOTH) { -#if UNOPTIMIZED_CONVOLUTION - for (int i = 0; i < np; i++) - sum += f1[i] * f2[n - i + (np - 1)]; -#else - f2 += n + (np - 1); - for (int i = 0; i < np; i++) - sum += *f1++ * *f2--; -#endif - } else if (func_type == FUNC_EVEN) { - for (int i = 0; i < np; i++) { - int k = abs (n - i); - sum += f1[i] * f2[k]; - } - } else if (func_type == FUNC_ODD) { - for (int i = 0; i < np; i++) { - int k = n - i; - if (k < 0) - sum -= f1[i] * f2[k]; - else - sum += f1[i] * f2[k]; - } - } else - sys_error (ERR_WARNING, "Illegal function type %d [convolve]", func_type); - - return (sum * dx); -}