1 #include <../../nrnconf.h>
6 #define _USE_MATH_DEFINES
25 static inline double SQUARE(
double a) {
34 nrngsl_fft_real_radix2_transform(
data, 1,
n);
36 nrngsl_fft_halfcomplex_radix2_inverse(
data, 1,
n);
54 for (
i = 1;
i < n2; ++
i) {
56 y[2 *
i + 1] = -x[
n -
i];
70 for (
i = 1;
i < n2; ++
i) {
71 y[
i] = x[2 *
i] * xn2;
72 y[
n -
i] = -x[2 *
i + 1] * xn2;
87 for (
i = 1;
i <= (m - 1) / 2;
i++) {
88 respns[
n -
i] = respns[m -
i];
90 for (
i = (m + 1) / 2;
i <
n - (m - 1) / 2;
i++) {
95 ans[0] =
data[0] * respns[0];
96 for (
i = 1;
i < n2; ++
i) {
100 }
else if (isign == -1) {
102 hoc_execerror(
"Deconvolving at response zero in nrn_convlv", 0);
111 ans[n2] =
data[n2] * respns[n2];
120 void nrn_correl(
double* x,
double* y,
unsigned long n,
double* z) {
125 for (
int i = 1;
i < n2; ++
i) {
126 z[
i] = x[
i] * y[
i] + x[
n -
i] * y[
n -
i];
128 z[
n -
i] = y[
i] * x[
n -
i] - y[
n -
i] * x[
i];
130 z[n2] = x[n2] * y[n2];
140 #define WINDOW(j, a, b) (1.0 - myfabs((((j) -1) - (a)) * (b)))
145 double a, ainv, wfac,
x_;
149 for (
j = 0;
j <= setsize - 1;
j++)
158 for (
j = 1;
j <=
n;
j++)
162 printf(
"setsize %d, numsegpairs %d\n", setsize, numsegpairs);
163 printf(
"=============\n");
164 printf(
"window values\n");
165 for (
j = 1;
j <=
n;
j++)
167 printf(
"initial wfac %f\n", wfac);
171 fftv = (
double*) malloc((
size_t) (
n *
sizeof(double)));
174 for (
k = 1;
k <= numsegpairs * 2;
k++) {
176 printf(
"==============\n");
181 for (
j = 0;
j <
n;
j++)
182 fftv[
j] =
data[cx++];
184 for (
j = 0;
j <
n;
j++)
185 printf(
"datum %d %f\n",
j, fftv[
j]);
186 printf(
"--------------\n");
192 for (
j = 1;
j <=
n;
j++)
199 for (
j = 0;
j <
n;
j++)
205 psd[0] +=
SQUARE(fftv[0]);
206 for (
j = 1;
j < setsize;
j++) {
211 wfac = 1 / (wfac *
n * numsegpairs);
212 for (
j = 0;
j < setsize;
j++)
217 printf(
"1/wfac for all but DC = %f\n", 1. / wfac);
218 printf(
"1/wfac for DC = %f\n", 2. / wfac);
219 printf(
"final results--\n");
220 for (
j = 0;
j < setsize;
j++)
void nrngsl_realft(double *data, unsigned long n, int direction)
void nrn_correl(double *x, double *y, unsigned long n, double *z)
static double SQUARE(double a)
void nrn_nrc2gsl(double *x, double *y, unsigned long n)
void nrn_convlv(double *data, unsigned long n, double *respns, unsigned long m, int isign, double *ans)
void nrn_spctrm(double *data, double *psd, int setsize, int numsegpairs)
void nrn_gsl2nrc(double *x, double *y, unsigned long n)
void hoc_execerror(const char *s1, const char *s2)
int const size_t const size_t n
HOC interpreter function declarations (included by hocdec.h)