void Rsc::Decode(const itpp::cvec &received, const itpp::vec &logLikelihood_in, itpp::vec *logLikelihood_out, double n0, bool knowLastState) const { // assert(lastState_ != -1); if (knowLastState && lastState_ == -1){ lastState_ = 0; } // if CalcLambda(received, logLikelihood_in, n0, knowLastState); CalcLLR_out(received, logLikelihood_in, logLikelihood_out, n0); }
int main(int argc, char* argv[]) { /*if (argc!=2) exit(0); double T = atof(argv[1]); printf(" T=%.3f\n",T);*/ system("rm lambda.T*"); GRID grid("params"); int N= grid.get_N(); Result result1(&grid); Result result2(&grid); Result result3(&grid); for (double T=0.30; T>0.05; T-=0.01) { for (double U=1.5; U<4.0; U+=0.1) { char FN[300]; sprintf( FN, "CHM.U%.3f.T%.3f", U, T); char FN2[300]; sprintf( FN2, "%s.FAILED", FN); if ((not FileExists(FN))and(not FileExists(FN2))) continue; char ldFN[300]; sprintf(ldFN,"lambdas_and_diffs.U%.3f.T%.3f",U,T); FILE* ldFile = fopen(ldFN,"w"); double lambdas[100]; int counter=0; for(int it=1; it<100; it++) { char FN[300]; sprintf( FN, "CHM.U%.3f.T%.3f.it%d", U, T, it); if(not result1.ReadFromFile(FN)) break; sprintf( FN, "CHM.U%.3f.T%.3f.it%d", U, T, it+1); if(not result2.ReadFromFile(FN)) break; sprintf( FN, "CHM.U%.3f.T%.3f.it%d", U, T, it+2); if(not result3.ReadFromFile(FN)) break; double sum = 0; for(int i=0; i<N; i++) sum += sqr( real(result2.G[i]-result1.G[i])) + sqr( imag(result2.G[i]-result1.G[i])); double diff = sqrt(sum)/(2.0*N); double simple_diff = abs( imag(result2.G[N/2]-result1.G[N/2]) ); double lambda = CalcLambda(N, result1.G, result2.G, result3.G); fprintf(ldFile,"%d %.15le %.15le %.15le\n",it,diff,lambda, simple_diff); lambdas[it-1]=lambda; counter++; complex<double>* dG = new complex<double>[N]; for(int i=0; i<N; i++) dG[i] = ((result2.G[i]-result1.G[i])/diff)/(2.0*((double) N)); sprintf( FN, "dG.U%.3f.T%.3f.it%d", U, T, it+1); PrintFunc(FN,N,dG,result1.omega); } fclose(ldFile); char lFN[300]; sprintf(lFN,"lambda.T%.3f",T); FILE* lFile = fopen(lFN,"a"); fprintf(lFile,"%.15le %.15le\n",U,FindLambda(counter,lambdas) ); fclose(lFile); } } return 0; }