#include<iostream>
#include<math.h>
using namespace std;
int main()
{
double y[]={0.1,0.01,0.9,0.40,0.30,0.70,0.12,0.21,0.23,0.43};
int ylen=sizeof(y)/sizeof(*y);
int num_train=6;
int num_guard=2;
double Pfa=1e-3;
int train_half = num_train / 2;
int guard_half = num_guard / 2;
double alpha =num_train*(pow(Pfa,(-1/num_train))-1);
int CUT;
int start1,stop1,start2,stop2;
int N1,N2;
double sum1,sum2;
double p_noise,threshold;
for (int i=0;i<ylen;i++)
{
CUT=i;
start1=i+guard_half+1; //for right side of CUT
stop1=start1+train_half-1; //for right side of CUT
start2=i-guard_half-1; //for left side of CUT
stop2=start2-train_half+1; //for left side of CUT
//cout<<start1<<endl;
if(start1>=ylen)
{
sum1=0;
for (int ii=stop2;ii<start2;ii++)
sum2+=y[ii];
N1=0;
//cout<<sum2<<endl;
}
else if(start2<=0)
{
sum2=0;
for (int ii=start1;ii<stop1;ii++)
sum1+=y[ii];
N1=stop1-start1+1;
N2=0;
}
else
{
if(stop1>=ylen)
stop1=ylen;
if(stop2<=0)
stop2=1;
for(int ii=start1;ii<stop1;ii++)
sum1+=y[ii];
for(int ii=stop2;ii<start2;ii++)
sum2+=y[ii];
N1=stop1-start1+1;
N2=start2-stop2+1;
}
p_noise=(sum1+sum2)/(N1+N2);
cout<<p_noise<<endl;
threshold = alpha * p_noise;
}
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPG1hdGguaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKaW50IG1haW4oKQp7CiAgICBkb3VibGUgeVtdPXswLjEsMC4wMSwwLjksMC40MCwwLjMwLDAuNzAsMC4xMiwwLjIxLDAuMjMsMC40M307CiAgICBpbnQgeWxlbj1zaXplb2YoeSkvc2l6ZW9mKCp5KTsKICAgIGludCBudW1fdHJhaW49NjsKICAgIGludCBudW1fZ3VhcmQ9MjsKICAgIGRvdWJsZSBQZmE9MWUtMzsKICAgIGludCB0cmFpbl9oYWxmID0gbnVtX3RyYWluIC8gMjsKICAgIGludCBndWFyZF9oYWxmID0gbnVtX2d1YXJkIC8gMjsKICAgIGRvdWJsZSBhbHBoYSA9bnVtX3RyYWluKihwb3coUGZhLCgtMS9udW1fdHJhaW4pKS0xKTsKICAgIGludCBDVVQ7CiAgICBpbnQgc3RhcnQxLHN0b3AxLHN0YXJ0MixzdG9wMjsKICAgIGludCBOMSxOMjsKICAgIGRvdWJsZSBzdW0xLHN1bTI7CiAgICBkb3VibGUgcF9ub2lzZSx0aHJlc2hvbGQ7CiAgICBmb3IgKGludCBpPTA7aTx5bGVuO2krKykKICAgIHsKICAgICAgICBDVVQ9aTsKICAgICAgICBzdGFydDE9aStndWFyZF9oYWxmKzE7IC8vZm9yIHJpZ2h0IHNpZGUgb2YgQ1VUCiAgICAgICAgc3RvcDE9c3RhcnQxK3RyYWluX2hhbGYtMTsgLy9mb3IgcmlnaHQgc2lkZSBvZiBDVVQKICAgICAgICBzdGFydDI9aS1ndWFyZF9oYWxmLTE7IC8vZm9yIGxlZnQgc2lkZSBvZiBDVVQKICAgICAgICBzdG9wMj1zdGFydDItdHJhaW5faGFsZisxOyAvL2ZvciBsZWZ0IHNpZGUgb2YgQ1VUCiAgICAgICAgLy9jb3V0PDxzdGFydDE8PGVuZGw7CiAgICAgICAgaWYoc3RhcnQxPj15bGVuKQogICAgICAgIHsKICAgICAgICAgICAgc3VtMT0wOwogICAgICAgICAgICBmb3IgKGludCBpaT1zdG9wMjtpaTxzdGFydDI7aWkrKykKICAgICAgICAgICAgc3VtMis9eVtpaV07CiAgICAgICAgICAgIE4xPTA7CiAgICAgICAgICAgIC8vY291dDw8c3VtMjw8ZW5kbDsKCiAgICAgICAgfQogICAgICAgIGVsc2UgaWYoc3RhcnQyPD0wKQogICAgICAgIHsKICAgICAgICAgICAgc3VtMj0wOwogICAgICAgICAgICBmb3IgKGludCBpaT1zdGFydDE7aWk8c3RvcDE7aWkrKykKICAgICAgICAgICAgc3VtMSs9eVtpaV07CiAgICAgICAgICAgIE4xPXN0b3AxLXN0YXJ0MSsxOwogICAgICAgICAgICBOMj0wOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBpZihzdG9wMT49eWxlbikKICAgICAgICAgICAgICAgIHN0b3AxPXlsZW47CiAgICAgICAgICAgIGlmKHN0b3AyPD0wKQogICAgICAgICAgICAgICAgc3RvcDI9MTsKICAgICAgICAgICAgZm9yKGludCBpaT1zdGFydDE7aWk8c3RvcDE7aWkrKykKICAgICAgICAgICAgICAgIHN1bTErPXlbaWldOwogICAgICAgICAgICBmb3IoaW50IGlpPXN0b3AyO2lpPHN0YXJ0MjtpaSsrKQogICAgICAgICAgICAgICAgc3VtMis9eVtpaV07CiAgICAgICAgICAgIE4xPXN0b3AxLXN0YXJ0MSsxOwogICAgICAgICAgICBOMj1zdGFydDItc3RvcDIrMTsKICAgICAgICB9CgogICAgICAgIHBfbm9pc2U9KHN1bTErc3VtMikvKE4xK04yKTsKICAgICAgICBjb3V0PDxwX25vaXNlPDxlbmRsOwogICAgICAgIHRocmVzaG9sZCA9IGFscGhhICogcF9ub2lzZTsKICAgIH0KCnJldHVybiAwOwp9Cg==