?? 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 + -