Esempio n. 1
0
File: fft.c Progetto: Red54/WaoN
/* prepare window for FFT
 * INPUT
 *  n : # of samples for FFT
 *  flag_window : 0 : no-window (default -- that is, other than 1 ~ 6)
 *                1 : parzen window
 *                2 : welch window
 *                3 : hanning window
 *                4 : hamming window
 *                5 : blackman window
 *                6 : steeper 30-dB/octave rolloff window
 * OUTPUT
 *  density factor as RETURN VALUE
 */
double
init_den (int n, char flag_window)
{
  double den;
  int i;

  den = 0.0;
  for (i = 0; i < n; i ++)
    {
      switch (flag_window)
	{
	case 1: // parzen window
	  den += parzen (i, n) * parzen (i, n);
	  break;

	case 2: // welch window
	  den += welch (i, n) * welch (i, n);
	  break;

	case 3: // hanning window
	  den += hanning (i, n) * hanning (i, n);
	  break;

	case 4: // hamming window
	  den += hamming (i, n) * hamming (i, n);
	  break;

	case 5: // blackman window
	  den += blackman (i, n) * blackman (i, n);
	  break;

	case 6: // steeper 30-dB/octave rolloff window
	  den += steeper (i, n) * steeper (i, n);
	  break;

	default:
	  fprintf (stderr, "invalid flag_window\n");
	case 0: // square (no window)
	  den += 1.0;
	  break;
	}
    }

  den *= (double)n;

  return den;
}
Esempio n. 2
0
File: fft.c Progetto: Red54/WaoN
/* apply window function to data[]
 * INPUT
 *  flag_window : 0 : no-window (default -- that is, other than 1 ~ 6)
 *                1 : parzen window
 *                2 : welch window
 *                3 : hanning window
 *                4 : hamming window
 *                5 : blackman window
 *                6 : steeper 30-dB/octave rolloff window
 */
void
windowing (int n, const double *data, int flag_window, double scale,
	   double *out)
{
  int i;
  for (i = 0; i < n; i ++)
    {
      switch (flag_window)
	{
	case 1: // parzen window
	  out [i] = data [i] * parzen (i, n) / scale;
	  break;

	case 2: // welch window
	  out [i] = data [i] * welch (i, n) / scale;
	  break;

	case 3: // hanning window
	  out [i] = data [i] * hanning (i, n) / scale;
	  break;

	case 4: // hamming window
	  out [i] = data [i] * hamming (i, n) / scale;
	  break;

	case 5: // blackman window
	  out [i] = data [i] * blackman (i, n) / scale;
	  break;

	case 6: // steeper 30-dB/octave rolloff window
	  out [i] = data [i] * steeper (i, n) / scale;
	  break;

	default:
	  fprintf (stderr, "invalid flag_window\n");
	case 0: // square (no window)
	  out [i] = data [i] / scale;
	  break;
	}
    }
}
Esempio n. 3
0
File: rhotest.c Progetto: cran/npcp
void cpTestRho(double *X, int *n, int *d, double *rho, double *fbin,
	       double *influ, int *influest, int *M, int *w, int *bw,
	       int *method, double *rho0, double *avar, double *initseq)
{
    int i, j, k, m, ln;
    double *U = Calloc((*n) * (*d), double); // pseudo-obs depending on k 
    int *index = Calloc(*n, int);
    double *V = Calloc((*n) * (*d), double); // pseudo-obs not depending on k
    double *x = Calloc((*n) * (*d), double);
    double *influa = Calloc(*n, double);
    double *proda = Calloc(*n, double);
    double *multipliers = Calloc((*n) * (*M), double);
    double s, sumk, meank, sumnk, meannk, sqrtn = sqrt(*n);

    /* generate (dependent) multipliers */
    if (*method == 1 || *method == 2)
	gendepmult(*n, *M, *bw, *w, initseq, multipliers);

    /* compute pseudo-obs V not depending on k */
    if (*method == 2  || *method == 3)
	{
	    for (i = 0; i < (*n) * (*d); i++)
		x[i] = X[i];
	    makepseudoobs(x, index, *n, *d, 0, *n, V);
	}

    /* for each possible breakpoint */
    for (k = 1; k <= *n-1; k++)
	{
	    s = (double)k / (*n);

	    /* compute pseudo-obs U depending on k */
	    for (i = 0; i < (*n) * (*d); i++)
		x[i] = X[i];
	    makepseudoobs(x, index, *n, *d, 0, k, U);
	    makepseudoobs(x, index, *n, *d, k, *n, U);

	    /* sequential multiplier method */
	    if (*method == 1)
		{
		    /* initialization */
		    rho[k - 1] = 0.0;
		    for (i = 0; i < *n; i++)
			influ[i] = 0.0;
		    /* update statistic and influence matrix for subset i */
		    for (i = 0; i < (1<<*d); i++)
			if (fbin[i])
			    statinflu_seq(*n, *d, k, U, i, fbin[i], proda, 
					  influa, rho, influ);
		    
		    /* statistic for breakpoint k */
		    rho[k-1] = sqrtn * s * (1.0 - s) * fabs(rho[k-1]);

		    /* generate M approximate realizations */
		    for (m = 0; m < *M; m++)
			{
			    meank = 0.0;
			    for (i = 0; i < k; i++)
				meank += multipliers[i + m * (*n)];
			    meank /= k;

			    sumk = 0.0;
			    for (i = 0; i < k; i++)
				sumk += (multipliers[i + m * (*n)] - meank)
				    * influ[i];

			    meannk = 0.0;
			    for (i = k; i < *n; i++)
				meannk += multipliers[i + m * (*n)];
			    meannk /= *n - k;

			    sumnk = 0.0;
			    for (i = k; i < *n; i++)
				sumnk += (multipliers[i + m * (*n)] - meannk)
					* influ[i];

			    rho0[m + (k - 1) * (*M)] =
				fabs( (1.0 - s) * sumk - s * sumnk ) / sqrtn;
			}
		}
	    else /* nonsequential multiplier method or asymptotic variance */
 		{
		    rho[k - 1] = 0.0;
		    /* update statistic and influence matrix for subset i */
		    for (i = 0; i < (1<<*d); i++)
			if (fbin[i])
			    stat_nonseq(*n, *d, k, U, i, fbin[i], proda, rho);
		    /* statistic for breakpoint k */
		    rho[k-1] = sqrtn * s * (1.0 - s) * fabs(rho[k-1]);
		}
	}

    /* nonsequential multiplier method or asymptotic variance */
    if ((*method == 2 || *method == 3) && *influest == 0)
	{
	    /* update influence matrix for subset i */
	    for (i = 0; i < *n; i++)
		influ[i] = 0.0;
	    for (i = 0; i < (1<<*d); i++)
		if (fbin[i])
		    influ_nonseq(*n, *d, V, i, fbin[i],
				 proda, influa, influ);
	}

    /* nonsequential multiplier method */
    if (*method == 2)
	{
	     /* generate M approximate realizations */
	    for (m = 0; m < *M; m++)
		{
		    sumk = 0.0;
		    sumnk = 0.0;
		    for (i = 0; i < *n; i++)
			sumnk += multipliers[i + m * (*n)] * influ[i];

		    for (k = 1; k <= *n-1; k++)
			{
			    s = (double)k / (*n);
			    rho0[m + (k - 1) * (*M)] = 0.0;
			    sumk += multipliers[k - 1 + m * (*n)] * influ[k - 1];
			    rho0[m + (k - 1) * (*M)] =
				fabs(sumk - s * sumnk) / sqrtn;
			}
		}
	}

    /* asymptotic variance */
    if (*method == 3)
	{
	    ln = 2 * (*bw) - 1;
	    *avar = 0.0;
	    for (i = 0; i < *n; i++)
		for (j = MAX(0, i - ln + 1); j < MIN(*n, i + ln); j++)
		    //abs(i - j) < ln
		    if (*w == 1)
			*avar += parzen( (double)(i - j) / (double)ln)
			    * influ[i] * influ[j];
		    else
			*avar += convrect( 4.0 * (double)(i - j) / (double)ln, 8)
			    * influ[i] * influ[j];
	    //*avar /= *n;
	}



    Free(U);
    Free(index);
    Free(V);
    Free(x);
    Free(influa);
    Free(proda);
    Free(multipliers);
}