📄 getweightvalue.cpp
字号:
//#include "inputIQ.h"
//#include <iostream.h>
#include "filein.h"
#include "fileout.h"
#include "stdio.h"
#include "share.h"
extern mark1, mark2,model;
complex2 getRowData(matrix &A,int i,int j)
{
if(A.get_num_rows()<=i||i<0||j<0)
return 0;
else if(A.get_num_cols()<=j)
return A.get_element(i,A.get_num_cols()-1);
else
return A.get_element(i,j);
}
int GetWeightValue(double *qr_inputi,double *qr_inputq,double *qr_outputi,double *qr_outputq,complex2 *W,boundaryCell *BC,internalCell **IC)
{
int i,j,k;
complex2 Uin;
// triangular section
matrix *A1;
A1=new matrix(mark1+1,mark2,0);
switch(model)
{
case 0:
Polycovertmatrix(qr_inputi,qr_inputq,qr_outputi,qr_outputq,A1);//把记忆多项式计算表达式转换成矩阵形式
break;
//case 1:
// PreWcovertmatrixint(qr_inputi,qr_inputq,qr_outputi,qr_outputq,testin_i,testin_q,A1,A2);//预加窗
// break;
//case 2:
// WienerModelmatrix(qr_inputi,qr_inputq,qr_outputi,qr_outputq,testin_i,testin_q,A1,A2);//把Wiener模型的计算表达式转换成矩阵形式
// break;
default:
break;
}//输入数据转换为输入
//triangular systolic array
//input raw data
int tempB,tempI;
for(i=0;i<mark1+NUMBER1+2;i++)
{
tempI=i-NUMBER1-1;
// tempB=-1;
// if(i>=NUMBER1)
tempB=i-NUMBER1;
BC[0].Uin=getRowData(*A1,0,i);
for (j=1;j<=mark1;j++)
{
IC[j-1][0].Uin=getRowData(*A1,j,i-j);
// if((i-j)>=NUMBER1)
// {
// tempI=j-1;
// }
}
//caculation
for (k=0;k<mark1;k++)
{
if(tempB<(2*k))
BC[k].caculation();
for (j=k;j<mark1;j++)
{
if((j+k)>tempI)
IC[j][k].caculation();
}
}
//flow to next block
for(k=0;k<mark1;k++)
for(j=k;j<mark1;j++)
{
IC[j][k].cin=BC[k].get_c();
IC[j][k].sin=BC[k].get_s();
}
for (k=1;k<mark1;k++)
{
BC[k].Uin=IC[k-1][k-1].get_Uout();
for (j=0;k+j<mark1;j++)
{
IC[k+j][k].Uin=IC[k+j][k-1].get_Uout();
}
}
/* if(i==M+3-1)///////////////////////////////////////////////
{
for(k=1;k<M;k++)
{
BC[k].caculation();
for (j=k;j<M;j++)
{
IC[j][k].caculation();//////////////////////////////////////////////
}
}
}*/
//linear systolic array
}
lineInternalCell LIC[M*N-1];
lineBoundaryCell LBC[1];
int Time;
int rtag,ltag;
ltag=mark1-2;rtag=mark1;
Time=0;
for (k=0;k<mark1-1;k++)//前两步No.1 & No.2
{
LIC[k].caculation();//通过r,w,z,得到z
//if(k+1<M-1)
if(k+1==mark1-1)//到达边界单元
{
LBC[0].Zin=LIC[k].get_Zout();
LIC[k-1].Win=LIC[k].get_Wout();
Time++;
}
else if (k-1<0)//超出右边界
{
LIC[k+1].Zin=LIC[k].get_Zout();
Time++;
}
else
{
LIC[k+1].Zin=LIC[k].get_Zout();
LIC[k-1].Win=LIC[k].get_Wout();
Time++;
}
}
for (j=mark1-1;j>=0;j--)
{
if (j==0) //N0.7.8
{
LBC[0].r=BC[j].get_x();
LBC[0].p=(IC[M-1][j].get_x()).conjugate();
LBC[0].caculation();//通过r,p,z,得到w
Time++;
W[j]=LBC[0].Wout.conjugate();
Time++;
}
//No.3,5
//计算边界单元
else
{
LBC[0].r=BC[j].get_x();
LBC[0].p=(IC[mark1-1][j].get_x()).conjugate();
LBC[0].caculation();//通过r,p,z,得到w
//计算最右内部单元
if(ltag<0||ltag>=M||rtag<0||rtag>=mark1)
{
LIC[0].r=0;
}
else
LIC[0].r=(IC[rtag-1][ltag].get_x()).conjugate();//IC[1][3]
LIC[0].caculation();//通过r,w,z,得到z
LIC[1].Zin=LIC[0].get_Zout();
Time++;
//No.4,6.
W[j]=LBC[0].Wout.conjugate();
LIC[1].Win=LBC[0].Wout;
rtag=j;
if(ltag<0||ltag>=mark1||rtag<0||rtag>=mark1)
LIC[0].r=0;
else
LIC[1].r=(IC[rtag-1][ltag].get_x()).conjugate();
LIC[1].caculation();
LIC[0].Win=LIC[1].Wout;
LBC[0].Zin=LIC[1].Zout;
ltag--;
Time++;
}
//writefile("weight0.95.txt",W,mark1);
}
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -