📄 asyncappllayer.cc
字号:
std::string::size_type pos = 0, prev_pos = 0;
unsigned int index=0;
double data1[8];
double data;
while (( pos = s.find_first_of( ' ', pos ))!= std::string::npos )
{
//++pos;
pos = s.find_first_of(' ',pos);
if(s.substr(prev_pos, pos-prev_pos)=="")//如果等于空字符串,继续查找 {
prev_pos=++pos;
continue;
}
else
{
data = atof(s.substr(prev_pos, pos - prev_pos).c_str());//?
data1[index++]=data;
prev_pos = ++pos;
}
}
data=atof(s.substr(prev_pos,pos - prev_pos).c_str());
data1[index]=data;
std::cout<<endl;
std::cout<<endl;
std::cout<<"generate a Packet !!!!!!!!!!"<<endl;
std::cout<<"data1=";
for (int i=0;i<8;i++)
{
std::cout<<data1[i]<<",";
}
std::cout<<"."<<endl;
double dec[8];
int h=8;
while(h>1)
{
h=h/2;
for (int i=0;i<h;i++)
{
dec[i] = ((data1[2*i]+data1[2*i+1]));
dec[h+i] =((data1[2*i]-data1[2*i+1]));
}
for(int i=0;i<(2*h);i++)
{
data1[i]=dec[i];
}
}
std::cout<<"dec=";
for (int i=0;i<7;i++)
{
std::cout<<dec[i]<<",";
}
std::cout<<dec[7]<<"."<<endl;;
for(int i=0;i<8;i++)
{
ev<<"*"<<endl;
pk->setData(i,data1[i]);
}
/**###################################################*/
/** 数据报设置*/
ev<<"?????????????????????"<<endl;
pk->setSrcAddr(myApplAddr());
pk->setDestAddr(destModuleID);
pk->setLength(headerLength);
pk->setTimestamp(simTime());
pk->setSeqNum1(row);//4-12添加 row++;
// std::cout<<"aaa"<<std::endl;
ev<<logName()<<"::AsyncApplLayer:: the pk's timestamp=="<<pk->timestamp()<<endl;
sendDown(pk);
if (ev.isGUI())
parentModule()->bubble("Generating packet...");
numBurstMessage++;
EV <<" generating packet to " <<destAddress<< "#" << numBurstMessage <<endl;
scheduleAt(simTime()+(double)par("iaitime"), generatePacket);
}
else if(msg==clusterWaveLet)//时钟信号控制,强制进行小波变换 {
std::cout<<"强制进行小波变换"<<std::endl;
do_clusterWave();
}
/***************add by zhutiejun 4-25 **********************/
else if(msg==undoCode) //时钟信号控制,强制进行解码
{
//判断哪个簇的数据报已经过半
//最后一个数据报的到达时间矩现在是否已经达到门限值
//是,则将这些数据报取出,按包号排列,取出数据,在丢包处进行插值,生成一个队列,调用解码函数
std::cout<<endl;
std::cout<<"The signal of undocode................"<<endl;
std::cout<<"the size of dmap is:"<<dmap.size()<<endl;
m_iterator it_begin=dmap.begin();
//m_iterator it_end=dmap.end();
simtime_t t=simTime();
for(;it_begin!=dmap.end();)
{
std::cout<<endl;
std::cout<<((*it_begin).second.size())<<"——————"<<((*it_begin).second.front())->getSeqNum1()<<endl;
if(static_cast<double>((*it_begin).second.size())/((*it_begin).second.front())->getSeqNum1()>0.5)
{
//(*m_it).second.back()->setTimestamp(simTime());
if(t-(*it_begin).second.back()->timestamp()>=100||static_cast<double>((*it_begin).second.size())/((*it_begin).second.front())->getSeqNum1()==1.0)
{
std::ofstream fout( "dataSize.txt", std::ios_base::app );
std::cout<<endl;
std::cout<<"unDo_Coding........................"<<endl;
std::deque<ApplPkt*> msgqueue;
msgqueue=(*it_begin).second;
fout<<"begin sort msgqueue's size="<<msgqueue.size()<<endl;
sort(msgqueue.begin(),msgqueue.end(),Comp()); //按照第2个序列号排序
fout<<"after sort msgqueue's size="<<msgqueue.size()<<endl;
std::deque<ApplPkt*> ::iterator de_iterator=msgqueue.begin();
int count=(*de_iterator)->getSeqNum1();
std::cout<<"count="<<count<<endl;
fout<<"totalCount="<<count<<endl;
for(int i=0;i<(count-4);++i)//数据 有问题,如果地址没有收满,那么有一个或几个地址会当成数据
{
//std::cout<<"*******"<<endl;//测试点
if((de_iterator!=msgqueue.end())&&(i+1)==((*de_iterator)->getSeqNum2()))
{
//std::cout<<((*de_iterator)->getSeqNum2())<<endl;//测试点
adr=(*de_iterator)->getSrcAddr();
for(int j=0;j<8;++j)
{
dataQueue1.push_back((*de_iterator)->getData(j));
}
++de_iterator;
}
else
{
std::cout<<endl;
std::cout<<"chazhi...................."<<endl;
for(int j=0;j<8;++j)
dataQueue1.push_back(1);
}
}
/**************************************/
for(int i=0;i<4;++i)//原地址
{ std::cout<<"*******"<<endl;//测试点
if((de_iterator!=msgqueue.end())&&(((*de_iterator)->getSeqNum1())+i-3)==((*de_iterator)->getSeqNum2()))
{
std::cout<<((*de_iterator)->getSeqNum2())<<"--"<<((*de_iterator)->getSeqNum1())<<endl;//测试点
for(int j=0;j<8;++j)
{
addr_sink[8*i+j]=(*de_iterator)->getData(j);
}
++de_iterator;
}
}
/************************************/
//删除指针
// for_each(msgqueue.begin(),msgqueue.end(),DeleteObj<ApplPkt>);
for_each(msgqueue.begin(),msgqueue.end(),DeleteObj());
std::cout<<endl;
std::cout<<"addr_sink[32]="<<endl;
for(int i=0;i<32;i++)
{
std::cout<<addr_sink[i];
}
std::cout<<endl;
std::cout<<endl;
std::cout<<"dataQueue1's size="<<dataQueue1.size()<<endl;
cDataQueue dataQue;//临时变量
std::cout<<endl;
std::cout<<endl;
std::cout<<"jiema...................."<<endl;
while(!dataQueue1.empty())
{
double d1;
int size;
d1=dataQueue1.front();
std::cout<<"the size of dataQueue1 is :"<<dataQueue1.size();
std::cout<<" data="<<d1<<endl;
dataQueue1.pop_front();
size = dataQueue1.front();
dataQueue1.pop_front();
for(int si=0;si<size;++si)
{
dataQue.push_back(d1);
}
}
std::cout<<endl;
// std::cout<<"dataQue's size="<<dataQue.size()<<endl;
dataQueue1.assign(dataQue.begin(),dataQue.end());//队列赋值
int dataSize=dataQueue1.size();
// std::cout<<"dataSize="<<dataSize<<std::endl;
fout<<"dataSize="<<dataSize<<std::endl;
for(int ii=0;ii<256-dataSize;++ii)
{
dataQueue1.push_back(0);
}
fout<<"begin erase,the dmap's size="<<dmap.size()<<endl<<endl;
dmap.erase(it_begin++);
fout<<"after erase,the dmap's size="<<dmap.size()<<endl<<endl;
fout.close();
unDo_code();
}
else
++it_begin;
//scheduleAt(simTime()+200,overtimeMsg);
}
else
++it_begin;
}
scheduleAt(simTime()+5.0,undoCode);
}
/*************************end ******************************/
else if(numBurstMessage>=maxNumBurst)
EV << " source stopped bursting!!! " << endl;
}
/** @brief 簇头小波变换4.19添加*/
void AsyncApplLayer::do_clusterWave()
{
/************将32个数据的相关信心拷贝到addr数组和clusterHead_data中***************/
clu_iterator iterBegin = cluData.begin();
clu_iterator iterEnd = cluData.end();
int subscript=0;
while( iterBegin != iterEnd)
{
addr[subscript]=iterBegin->first;
std::deque<double> dQue=iterBegin->second;
for(int i=0;i<8;i++)
clusterHead_data[subscript][i]=dQue[i];
++subscript;
++iterBegin;
}
cluData.clear();
/***************************end*******************************/
//3级小波列变换 //调用编码函数 std::cout<<"The clusterHead begin to wavelet!!!!!!!"<<endl;
std::cout<<"#########################################"<<endl;
std::cout<<"old data is:"<<endl;
//打印数据
for(int i=0;i<32;i++)
{
for(int j=0;j<8;j++)
{
std::cout<<clusterHead_data[i][j]<<" ";
test_data[i][j]=clusterHead_data[i][j];// For testing (temp) 5.11
}
std::cout<<endl;
}
std::cout<<endl;
std::cout<<endl;
for(int j=0;j<8;j++)
{
double temp[32];
int h=8;//三级变换 while(h>1)
{
h=h/2;
for(int i=0;i<4*h;i++)
{
temp[i]=(clusterHead_data[2*i][j]+clusterHead_data[2*i+1][j]);
temp[4*h+i]=(clusterHead_data[2*i][j]-clusterHead_data[2*i+1][j]);
}
for(int i=0;i<(8*h);i++)
{
clusterHead_data[i][j]=temp[i];
}
}
}
std::cout<<"#########################################"<<endl;
std::cout<<"new data is:"<<endl;
//打印数据
for(int i=0;i<32;i++)
{
for(int j=0;j<8;j++)
{
std::cout<<clusterHead_data[i][j]<<" ";
}
std::cout<<endl;
}
std::cout<<endl;
std::cout<<endl;
//小波变换后对数据进行量化
std::cout<<"量化数据:"<<endl;
for(int i=0;i<32;i++)
for(int j=0;j<8;j++)
{
if(fabs(clusterHead_data[i][j])<(double)par("limit"))
clusterHead_data[i][j]=0.0;
}
//打印数据
for(int i=0;i<32;i++)
{
for(int j=0;j<8;j++)
{
std::cout<<clusterHead_data[i][j]<<" ";
}
std::cout<<endl;
}
std::cout<<endl;
std::cout<<endl;
test();//测试,计算mse
//接下来调用编码函数
std::cout<<"begin to do_code!!!!!!!!"<<endl; do_code();
}
/** @brief 簇头压缩编码 -4.19添加*/
void AsyncApplLayer::do_code()
{
//朱铁军负责编写
/*******************zhu tiejun 4-25****************
Z型编码******/
cDataQueue temp;
/********************modify by zhu tiejun 5-10************/
int former_row=0;
int behind_row=4;
int former_col=0;
int behind_col=1;
while(former_col<8)
{
for(int row=0;row<former_row;++row)
{
for(int col=former_col;col<behind_col;++col)
{
if(temp.empty()||clusterHead_data[row][col]==temp.front())
temp.push_back(clusterHead_data[row][col]);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -