1 #include <../../nrnconf.h> 6 #define _USE_MATH_DEFINES 21 #define myfabs std::fabs 31 static inline double SQUARE(
double a) {
return a*a; }
43 nrngsl_fft_real_radix2_transform(data, 1, n);
45 nrngsl_fft_halfcomplex_radix2_inverse(data, 1, n);
59 if (n < 2) {
return; }
61 for (i=1; i < n2; ++
i) {
73 if (n < 2) {
return; }
75 for (i=1; i < n2; ++
i) {
77 y[n-
i] = -x[2*i+1]*xn2;
82 int isign,
double* ans)
89 for (i=1;i<=(m-1)/2;i++) {
90 respns[n-
i]=respns[m-
i];
92 for (i=(m+1)/2;i < n-(m-1)/2;i++) {
97 ans[0] = data[0]*respns[0];
98 for (i=1; i < n2; ++
i) {
100 ans[
i] = data[
i]*respns[
i] - data[n-
i]*respns[n-
i];
101 ans[n-
i] = data[
i]*respns[n-
i] + data[n-
i]*respns[
i];
102 }
else if (isign == -1) {
104 hoc_execerror(
"Deconvolving at response zero in nrn_convlv", 0);
107 ans[
i] = (data[
i]*respns[
i] + data[n-
i]*respns[n-
i])/scl;
108 ans[
i]=(data[
i]*respns[n-
i] - data[n-
i]*respns[
i])/scl;
113 ans[n2] = data[n2]*respns[n2];
128 for (
int i=1;
i < n2; ++
i) {
129 z[
i] = x[
i]*y[
i] + x[n-
i]*y[n-
i];
131 z[n-
i] = y[
i]*x[n-
i] - y[n-
i]*x[
i];
143 #define WINDOW(j,a,b) (1.0-myfabs((((j)-1)-(a))*(b))) 149 double a, ainv, wfac,
x_;
153 for (j=0;j<=setsize-1;j++) psd[j]=0.0;
164 printf(
"setsize %d, numsegpairs %d\n", setsize, numsegpairs);
165 printf(
"=============\n");
166 printf(
"window values\n");
168 printf(
"initial wfac %f\n", wfac);
172 fftv = (
double *)malloc((
size_t) (n*
sizeof(double)));
175 for (k=1;k<=numsegpairs*2;k++) {
178 printf(
"==============\n");
179 printf(
"segment %d\n", k);
183 for (j=0; j<
n; j++) fftv[j] = data[cx++];
185 for (j=0; j<
n; j++)
printf(
"datum %d %f\n", j, fftv[j]);
186 printf(
"--------------\n");
192 for (j=1; j<=
n;j++) fftv[j-1]*=
WINDOW(j,a,1/a);
198 for (j=0; j<
n;j++)
printf(
"%f ",fftv[j]);
203 psd[0] +=
SQUARE(fftv[0]);
204 for (j=1; j<setsize; j++) {
209 wfac = 1 / (wfac*n*numsegpairs);
210 for (j=0; j<setsize; j++) psd[j] *= wfac;
214 printf(
"1/wfac for all but DC = %f\n", 1./wfac);
215 printf(
"1/wfac for DC = %f\n", 2./wfac);
216 printf(
"final results--\n");
217 for (j=0; j<setsize;j++)
printf(
"%d %f\n",j, psd[j]);
void nrn_spctrm(double *data, double *psd, int setsize, int numsegpairs)
void nrn_gsl2nrc(double *x, double *y, unsigned long n)
void nrngsl_realft(double *data, unsigned long n, int direction)
static philox4x32_key_t k
int const size_t const size_t n
void hoc_execerror(const char *, const char *)
void nrn_convlv(double *data, unsigned long n, double *respns, unsigned long m, int isign, double *ans)
void nrn_nrc2gsl(double *x, double *y, unsigned long n)
static double SQUARE(double a)
void nrn_correl(double *x, double *y, unsigned long n, double *z)