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; }
// 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; }
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); }
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; }
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"; } }