void PSAnalysis::Analysis()
{
	//Starts now
	
	//Windowing

	double norm = sqrt( N/(2.0*hopa) );
	
	for (int i=0; i<N; i++)
		frames2[i] = frames[i]*w(i)/norm;
	
	/*Analysis*/
	if (p) fftwf_execute(p);
	
	/*Processing*/
	
	for (int i=0; i<(N/2 + 1); i++)
	{
		Xa(i) = cx_float(fXa[i][0], fXa[i][1]);
		Xa_arg(i) = angle(Xa(i));
	}
	d_phi = Xa_arg - XaPrevious_arg;
	d_phi_prime = d_phi - ((2*M_PI * hopa) / N) * I;
	AUX = floor((d_phi_prime + M_PI) / (2*M_PI));
	d_phi_wrapped = d_phi_prime - AUX * (2*M_PI);
	omega_true_sobre_fs = (2*M_PI/N) * I + d_phi_wrapped / hopa;

	Xa_abs = abs(Xa);
	XaPrevious = Xa;
	XaPrevious_arg = Xa_arg;
}
Beispiel #2
0
// B here is the "reduced" matrix.  Square matrices w/ Row=Domain=Range only.
double test_with_matvec_reduced_maps(const Epetra_CrsMatrix &A, const Epetra_CrsMatrix &B, const Epetra_Map & Bfullmap){
  const Epetra_Map & Amap  = A.DomainMap();
  Epetra_Vector Xa(Amap), Ya(Amap), Diff(Amap);
  const Epetra_Map *Bmap  = Bfullmap.NumMyElements() > 0 ? &B.DomainMap() : 0;
  Epetra_Vector *Xb = Bmap ? new Epetra_Vector(*Bmap) : 0;
  Epetra_Vector *Yb = Bmap ? new Epetra_Vector(*Bmap) : 0;

  Epetra_Vector Xb_alias(View,Bfullmap, Bmap ? Xb->Values(): 0);
  Epetra_Vector Yb_alias(View,Bfullmap, Bmap ? Yb->Values(): 0);

  Epetra_Import Ximport(Bfullmap,Amap);

  // Set the input vector
  Xa.SetSeed(24601);
  Xa.Random();
  Xb_alias.Import(Xa,Ximport,Insert);

  // Do the multiplies
  A.Apply(Xa,Ya);
  if(Bmap) B.Apply(*Xb,*Yb);

  // Check solution
  Epetra_Import Yimport(Amap,Bfullmap);
  Diff.Import(Yb_alias,Yimport,Insert);


  Diff.Update(-1.0,Ya,1.0);
  double norm;
  Diff.Norm2(&norm);

  delete Xb; delete Yb;
  return norm;
}
Beispiel #3
0
void fannkuchProverExo::baseline(const mpq_t* input_q, int num_inputs,
                                 mpq_t* output_recomputed, int num_outputs) {

  int L = fannkuch_cons::L;

  std::vector<mpq_class> Xa(num_inputs);
  for(int j = 0; j < num_inputs; j++) {
    Xa[j] = mpq_class(input_q[j]);
  }

  int max_flips = 0;
  for(int i = 0; i < L; i++) {
    std::vector<mpq_class> stack = Xa;

    int flips = 0;
    while(stack[0] != 1) {
      std::reverse(stack.begin(), stack.begin() + (int)(stack[0].get_d()));
      flips++;
    }
    if (flips > max_flips) {
      max_flips = flips;
    }

    //Advance Xa to the next permutation
    std::next_permutation(Xa.begin(), Xa.end());
  }
  mpz_set_ui(mpq_numref(output_recomputed[0]), max_flips);
}
Beispiel #4
0
double test_with_matvec(const Epetra_CrsMatrix &A, const Epetra_CrsMatrix &B){
  const Epetra_Map & Xamap  = A.DomainMap();
  const Epetra_Map & Yamap  = A.RangeMap();
  const Epetra_Map & Xbmap  = B.DomainMap();
  const Epetra_Map & Ybmap  = B.RangeMap();

  Epetra_Vector Xa(Xamap), Xb(Xbmap), Ya(Yamap), Yb(Ybmap), Diff(Yamap);

  Xa.SetSeed(24601);
  Xa.Random();

  // Handle domain map change
  if(!Xamap.SameAs(Xbmap)) {
    Epetra_Import Ximport(Xbmap,Xamap);
    Xb.Import(Xa,Ximport,Insert);
  }
  else {
    Xb=Xa;
  }

  // Do the multiplies
  A.Apply(Xa,Ya);
  B.Apply(Xb,Yb);

  // Handle Rangemap change
  if(!Yamap.SameAs(Ybmap)) {
    Epetra_Import Yimport(Yamap,Ybmap);
    Diff.Import(Yb,Yimport,Insert);
  }
  else {
    Diff=Yb;
  }

  // Check solution
  Diff.Update(-1.0,Ya,1.0);
  double norm;
  Diff.Norm2(&norm);

  return norm;
}
Beispiel #5
0
int main(void)
{

  // Create X = [ 0, 1
  //              1, 2
  //              2, 3 ]
  FortranMatrix<int> X(3,2);
  for (int i=0; i<3; i++) 
    {
      X(i,0) = i;
      X(i,1) = i+1;
    }
  if (FortFuncs::one_norm(&X) != 6)
    return 1;

  // Test assumed size
  if (FortFuncs::one_norm_2(&X) != 6)
    return 1;

  std::vector<int> a(2), Xa(3), Xa_test(3);
  a[0] = 1;
  a[1] = 2;
  // Xa_test holds the correct solution
  Xa_test[0] = 2;
  Xa_test[1] = 5;
  Xa_test[2] = 8;

  FortFuncs::multiply(&X,&a,&Xa);
  for (int i=0; i<3; i++) 
    {
      if (Xa[i] != Xa_test[i])
	return 3;
    }

  return 0;
}
void PitchDetection::FindNote()
{
	for (int i=0; i<N; i++)
	{
		frames[N+i] = 0;
	}
	
	if (p) fftwf_execute(p);
	
	for (int i=0; i<(N + 1); i++)
	{
		Xa(i) = cx_float(fXa[i][0], fXa[i][1]);
	}
	
	Xs = Xa % conj(Xa);
	
	for (int i=0; i<(N + 1); i++)
	{
		fXs[i][0] = real(Xs(i));
		fXs[i][1] = imag(Xs(i));
	}
	
	if (p2) fftwf_execute(p2);
	
	for (int i=0; i<N; i++)
	{
		R(i) = q[i]/(2*N); 
	}
	
	NORM.zeros();
	
	NORM(0) = 2*R(0);
	
	for (int i=1; i<N; i++)
	{
		NORM(i) = NORM(i-1) - pow(frames[i-1],2)- pow(frames[N-i],2);
	}
	
	
	for (int i=0; i<N; i++)
	{
		F(i) = 1 -0.05*i/(N-1);
	}
	
	AUTO = ( 2*F % R )/NORM;
	
	int flag = 0;
	
	for (int i=0; (i<N)&&(flag==0); i++)
	{
		if( AUTO(i) > 0 )
		{
			AUTO(i) = 0;
		}
		else
		{
			flag = 1;
		}
	}
	
	uword max_index;
	double fidelity = AUTO.max(max_index);
	
	
	if ((fidelity > 0.95) && (fidelity < 1) && ((int)max_index < N-1))
	{
	
		double a = AUTO(max_index-1);
		double b = AUTO(max_index);
		double c = AUTO(max_index+1);
	
		double real_index = max_index + 0.5*(a-c)/(a-2*b+c);
	
		f = fs/real_index;
		int nota = (int)round( (12/log(2))*log(f/16.351597831287414) );
		oitava = floor(nota/12.0);
		note = nota % 12;
	
		//cout << "nota = " << note[0] << " oitava = " << oitava[0] << " fidelity = " << fidelity << "\n";	
		
	}
}