#include #include #include #include #include using namespace std; class Linear; class LT; #include "lt.h" #include "linear.h" #include "graph.h" void randseed(); class Recv { LT *lt; Linear *li; int K; int maxN; int *p; int lin; int ltn; int *liprob; int *ltprob; public: double liexcess; double ltexcess; Rcvgraph *gr; public: Recv(int K_, int maxN_); ~Recv(); void newp(int q); void sample(); void rate(int T); }; main() { randseed(); int K=18; Recv rx(18,72); rx.gr=new Rcvgraph(18,4*18); rx.gr->setmode(3); for(int s1=1;s1kring_1d1_3d3(s1,s2,s3,s4); rx.rate(10000); printf("%d,%d,%d,%d,%f,%f\r\n", s1,s2,s3,s4,rx.ltexcess,rx.liexcess); } delete rx.gr; } void Recv::rate(int T) { for(int i=0;i<=maxN;i++) { liprob[i]=0; ltprob[i]=0; } for(int t=0;tgetmode()); f=fopen(s,"w"); fprintf(f,",LT %d,linear %d\r\n",gr->getmode(),gr->getmode()); for(int i=K;i<=maxN;i++) fprintf(f,"%3d, %f, %f\r\n",i, (double)ltprob[i]/T, (double)liprob[i]/T); fclose(f); } void Recv::sample() { lt->init(); li->init(); int ltr=0; int lir=0; lin=maxN+1; ltn=maxN+1; if(gr->getmode()==3) gr->init(); for(int i=0; irx(p); if(!(ltr==K)) { ltr=lt->recv(p); if(ltr==K) ltn=i+1; } if(!(lir==K)) { lir=li->recv(p); if(lir==K) lin=i+1; } } } void Recv::newp(int q) { if(q==0) { for(int i=0;i=0;i--) { j++; for(;p[j];j++) ; } p[j]=1; } } Recv::Recv(int K_, int maxN_) { K=K_; maxN=maxN_; lt=new LT(K,maxN); li=new Linear(K,maxN); lt->init(); li->init(); p=new int[K]; liprob=new int[maxN+1]; ltprob=new int[maxN+1]; } Recv::~Recv() { delete lt; delete li; delete[] p; delete[] liprob; delete[] ltprob; } void randseed() { int ti=time(0); printf("srand=%d\r\n",ti); srand(ti); }