Home | Develop | Download | Contact
example_ceo_model_fusion2.cpp
1 
44 #include <Pds/Ra>
45 #include <Pds/It>
46 
47 int main(void)
48 {
49  unsigned int L=100000;
50 
51  // Dados do canal
52  double ps=0.5;
53  Pds::Vector f0={0.2,0.4,0.6,0.8,1};
54  Pds::Vector p;
55  Pds::Vector p_exp;
56 
57  unsigned int N=24;
58  Pds::Vector Rho=Pds::GeomSpace(0.02,0.5,N);
59  Pds::Vector BER(N);
60  Pds::Vector BERhcond(N);
61 
62  for(unsigned int n=0;n<N;n++)
63  {
64  if(n==0) L=200/1.0e-5;
65  else L=200/BER[n-1];
66 
67  p=f0*Rho[n];
68 
69  // Source Us
70  Pds::Vector Us(L);
71  Us.FillRandC(ps);
72 
73  // Input channel U
74  Pds::Matrix U=Pds::ChannelModel::Bsc(Us,p,p_exp);
75 
76  // Second fusion method: NaiveBayes
77  Pds::Vector Unb=Pds::Ceo::Binary::Fusion::NaiveBayes(ps,p_exp,U);
78  U.MakeEmpty();
79 
80  // BER
81  BER.SetRaw(n,Us.Xor(Unb).Mean());
82  Unb.MakeEmpty();
83 
84  // BERhcond
85  double H=Pds::Ceo::Binary::Entropy::HcUsOmegaM(p_exp,ps);
86  BERhcond.SetRaw(n,Pds::HbInv(H));
87 
88  std::cout<<"p: "<<Rho[n]<<"\tBERm: "<<BER[n]<<"\n";
89  }
90 
91  Pds::Octave::XLabel="Rho";
92  Pds::Octave::YLabel="BER";
93  Pds::Octave::Legend={"P(Hcond)","BER"};
94  Pds::Octave::Plot::LogLogXYXY(Rho,BERhcond,Rho,BER,"temporal.m","example_ceo_model_fusion2.png");
95 
96  return 0;
97 }
double HcUsOmegaM(const Pds::Vector &p, double ps)
Encuentra la entropia condicionada. .
Pds::Vector NaiveBayes(double ps, Pds::Vector p, const Pds::Matrix &U, double Umbral=0.5)
Retorna una aproximación del vector a partir de las muestras en .
Pds::Matrix Bsc(const Pds::Vector &Us, const Pds::Vector &p)
Retorna el resultado de passar un vector por un banco de canales BSC de probabilidades .

Enlaces de interés

HomePage Bazaar Download Bug report Ayuda Developer Feed