⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 getweightvalue.cpp

📁 qrdrls算法
💻 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 + -