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

📄 prnregister.cpp

📁 PRN伪随机码译码
💻 CPP
字号:
// PRNRegister.cpp: implementation of the CPRNRegister class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "GSV.h"
#include "GSVDoc.h"
#include "GSVView.h"
#include "PRNRegister.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
#define TECrx 23

CPRNRegister::CPRNRegister()
{
	for(int i=0;i<=GPSSATMAXNUMBER;i++)
	{
		gs.SatSheet[i].Being=FALSE;
		gs.SatSheet[i].ContinueTime=0;
		gs.SatSheet[i].pL1=NULL;
		gs.SatSheet[i].pL2=NULL;
		gs.SatSheet[i].PRN=i;
		gs.SatSheet[i].SumATec=0;
		gs.SatSheet[i].SumPTec=0;
		gs.SatSheet[i].AverATec=0;
		gs.SatSheet[i].AverPTec=0;
		gs.SatSheet[i].nCountInAverageT=0;
		gs.SatSheet[i].azimuth=0;
		gs.SatSheet[i].elev=0;
	}

	SetTimePar(2,60);

	m_nGpsLock=0;

	TableX=10;
	TableY=120;
	deltL1L2=100;
	widthTableCol=70;
	widthTableRow=2*deltL1L2+80;
	widthDeltRow=30;
	nColumn=12;
	nRow=2;
	linespace=20;
	widthRowSpecified=45;
	nChannel=12;

	pfont_range=NULL;
	pfont_tec=NULL;
	LOGFONT d_lf ;

	memset(&d_lf, 0, sizeof(LOGFONT));
	lstrcpy(d_lf.lfFaceName, "Times New Roman") ;

	d_lf.lfHeight=12;
	d_lf.lfWidth=0;
	d_lf.lfWeight=FW_BLACK ;
//	d_lf.lfStrikeOut =TRUE;
	d_lf.lfCharSet =GB2312_CHARSET;
	pfont_range=new CFont();
	pfont_range->CreateFontIndirect(&d_lf);
	pfont_tec=new CFont();
	pfont_tec->CreateFontIndirect(&d_lf);
}

CPRNRegister::~CPRNRegister()
{

	ClearMem();
	delete pfont_range;
	delete pfont_tec;

}

BOOL CPRNRegister::GPSRegister(VARIABLE_RANGE *pRg)
{

	unsigned long _L1_L2;
	unsigned long CH_number;
	long CH_N;

		_L1_L2=0x00200000&pRg->ch_tr_status;
		CH_number=0x000003E0&pRg->ch_tr_status;
		CH_number=CH_number>>5;
		CH_N=CH_number;
		if(pRg->PRN>32)
		{
			gs.SatSheet[0].PRN=pRg->PRN;
			gs.SatSheet[0].Being=TRUE;
			gs.SatSheet[0].pL1=new VARIABLE_RANGE;
			(*gs.SatSheet[0].pL1)=*pRg;
		}
		else
		{

			if(gs.SatSheet[pRg->PRN].Being==FALSE)
				gs.SatSheet[pRg->PRN].Being=TRUE;

			if(_L1_L2==0x00000000)
			{
				gs.SatSheet[pRg->PRN].pL1 = new VARIABLE_RANGE;
				(*gs.SatSheet[pRg->PRN].pL1)=*pRg;
			}
			else if(_L1_L2==0x00200000)
			{
				gs.SatSheet[pRg->PRN].pL2 = new VARIABLE_RANGE;
				(*gs.SatSheet[pRg->PRN].pL2)=*pRg;
			}
/*
psr : 载波相位
adr : 伪距测量码

typedef struct PRN_REGISTER                     
{
	unsigned short PRN;
	unsigned long ContinueTime;
	BOOL Being;
	VARIABLE_RANGE *pL1;
	VARIABLE_RANGE *pL2;
	double psrTEC;          
	double adrTEC;
	double SumPTec;
	double SumATec;
	double AverPTec;
	double AverATec;
	int    nCountInAverageT;
	unsigned short elev;
	unsigned short azimuth;
} PRN_REGISTER;
*/
			if((gs.SatSheet[pRg->PRN].pL1!=NULL)&&(gs.SatSheet[pRg->PRN].pL2!=NULL))
			{
				gs.SatSheet[pRg->PRN].adrTEC=1.80585*(gs.SatSheet[pRg->PRN].pL1->adr-1.2833*gs.SatSheet[pRg->PRN].pL2->adr);
				gs.SatSheet[pRg->PRN].psrTEC=TECrx+-9.483*(gs.SatSheet[pRg->PRN].pL1->psr-gs.SatSheet[pRg->PRN].pL2->psr);
				gs.SatSheet[pRg->PRN].SumATec=gs.SatSheet[pRg->PRN].SumATec+gs.SatSheet[pRg->PRN].adrTEC;
				gs.SatSheet[pRg->PRN].SumPTec=gs.SatSheet[pRg->PRN].SumPTec+gs.SatSheet[pRg->PRN].psrTEC;
				gs.SatSheet[pRg->PRN].nCountInAverageT=gs.SatSheet[pRg->PRN].nCountInAverageT+1;
			}
		}
	
	
	return TRUE;
}

void CPRNRegister::ClearMem()
{
	for(int i=0;i<=GPSSATMAXNUMBER;i++)
	{
		if(gs.SatSheet[i].pL1!=NULL)
		{	delete gs.SatSheet[i].pL1;
			gs.SatSheet[i].pL1=NULL;
		}
		if(gs.SatSheet[i].pL2!=NULL)
		{	delete gs.SatSheet[i].pL2;
			gs.SatSheet[i].pL2=NULL;
		}
		gs.SatSheet[i].Being=FALSE;

	}
}

void CPRNRegister::ClearAverageTec()
{
	for(int i=0;i<=GPSSATMAXNUMBER;i++)
	{
		gs.SatSheet[i].AverATec=gs.SatSheet[i].SumATec/gs.SatSheet[i].nCountInAverageT;
		gs.SatSheet[i].AverPTec=gs.SatSheet[i].SumPTec/gs.SatSheet[i].nCountInAverageT;
		gs.SatSheet[i].SumATec=0;
		gs.SatSheet[i].SumPTec=0;
		gs.SatSheet[i].nCountInAverageT=0;
	}
}

BOOL CPRNRegister::SetGsHead(VBINARY_HEADER *phdr)
{
	Timer=Timer+1;
	if(Timer==NsamplePoint)
	{
//		CGSVDoc* pdoc=(CGSVDoc*)m_pDoc;
//		POSITION pos = pdoc->GetFirstViewPosition();
//		CGSVView* pFirstView = (CGSVView*)pdoc->GetNextView( pos );
//		pFirstView->Invalidate();

		Timer=0;
		ClearAverageTec();
	}
	ClearMem();
	gs.hdr=*phdr;
	return TRUE;
}

void CPRNRegister::DrawRangeCon()
{
	unsigned long CH_number;
	long CH_N;

	int x;
	int y;
	
	for(int j=0;j<=GPSSATMAXNUMBER;j++)
	{


		if(gs.SatSheet[j].pL1!=NULL)
		{
			CH_number=0x000003E0&gs.SatSheet[j].pL1->ch_tr_status;
			CH_number=CH_number>>5;
			CH_N=CH_number;
			x=TableX+widthRowSpecified+widthTableCol*(CH_N%nColumn);
			y=TableY+(widthTableRow+widthDeltRow)*((int)CH_N/nColumn);
			
			DrawRangeCell(x, y, widthTableCol, deltL1L2, gs.SatSheet[j].pL1);
		}

		if(gs.SatSheet[j].pL2!=NULL)
		{
	
			CH_number=0x000003E0&gs.SatSheet[j].pL2->ch_tr_status;
			CH_number=CH_number>>5;
			CH_N=CH_number;
			x=TableX+widthRowSpecified+widthTableCol*(CH_N%nColumn);
			y=TableY+(widthTableRow+widthDeltRow)*((int)CH_N/nColumn);
			y=y+deltL1L2;
			DrawRangeCell(x, y, widthTableCol, deltL1L2, gs.SatSheet[j].pL2);
		}
	}	

}

void CPRNRegister::DrawRange(CDC *pDC)
{	
	m_pDC=pDC;
	m_pDC->SelectObject(pfont_range);

	int Labley=TableY+40;
	int xSpe=30;
	int ySpe=TableY;

	for(int i=0;i<nRow;i++)
	{
		COLORREF oldTx=m_pDC->SetTextColor(RGB(250,150,0));
		m_pDC->TextOut(TableX,Labley,"L1");
		Labley=Labley+deltL1L2;
		m_pDC->TextOut(TableX,Labley,"L2");
		Labley=Labley+(widthDeltRow+deltL1L2);

		m_pDC->SetTextColor(oldTx);

		DrawRangeSpe(xSpe,ySpe,widthRowSpecified-xSpe,deltL1L2);
		ySpe=ySpe+deltL1L2;
		DrawRangeSpe(xSpe,ySpe,widthRowSpecified-xSpe,deltL1L2);
		ySpe=ySpe+(widthDeltRow+deltL1L2);
	}


	for(int channel=0;channel<nChannel;channel++)
	{
		char buffer1[15]="CHANNEL: ";
		char buffer2[5];
		sprintf( buffer2,"%2d",channel);
		lstrcat( buffer1,  buffer2 );
		xSpe=TableX+widthRowSpecified+widthTableCol*(channel%nColumn);
		ySpe=TableY+(widthTableRow+widthDeltRow)*((int)channel/nColumn);
		int x=xSpe+2;
		int y=ySpe+2;
		int deltx=widthTableCol-2-1;
		int delty=widthTableRow-2-1;
		int x3=x+deltx;
		int y3=y+delty;

		m_pDC->MoveTo(x,y);
		m_pDC->LineTo(x3,y);
		m_pDC->LineTo(x3,y3);
		m_pDC->LineTo(x,y3);
		m_pDC->LineTo(x,y);		
		xSpe=xSpe+widthTableCol/3;
		ySpe=ySpe-3*widthDeltRow/5;
		m_pDC->TextOut(xSpe,ySpe,buffer1);
	}

	DrawRangeCon();

}

void CPRNRegister::DrawRangeSpe(int x, int y, int width, int height)
{
	int vacancy=2;
	int delt1_2=0;
	
	x=x+5;
	y=y+5;

	m_pDC->TextOut( x , y , "PRN :");
	y=y+linespace+delt1_2;
	m_pDC->TextOut( x , y , "psr :");
	y=y+linespace;
	m_pDC->TextOut( x , y , "adr :");
	y=y+linespace;
	m_pDC->TextOut( x , y , "dopp:");
	y=y+linespace;
	m_pDC->TextOut( x , y , "CN0 :");

}

void CPRNRegister::DrawRangeCell(int x, int y, int width, int height, VARIABLE_RANGE *pRange)
{
	int vacancy=2;
	int delt1_2=0;
	int snap_to_decimal1=30;
	int snap_to_decimal2=42;

	x=x+vacancy;
	y=y+vacancy;
	
	int deltx=width-vacancy-1;
	int delty=height-vacancy-1;
	int x3=x+deltx;
	int y3=y+delty;

	m_pDC->MoveTo(x,y);
	m_pDC->LineTo(x3,y);
	m_pDC->LineTo(x3,y3);
	m_pDC->LineTo(x,y3);
	m_pDC->LineTo(x,y);

	x=x+vacancy;
	y=y+vacancy;

	char buffer[50];

	COLORREF oldTx=m_pDC->SetTextColor(RGB(250,0,250));
	sprintf( buffer,"%5u",pRange->PRN );
	m_pDC->TextOut( x , y             , buffer);

	m_pDC->SetTextColor(RGB(0,0,250));
	
	y=y+linespace+delt1_2;
	sprintf( buffer,"%15.3f",pRange->psr );
	m_pDC->TextOut( x , y  , buffer);

	y=y+linespace;
	sprintf( buffer,"%15.3f",pRange->adr );
	m_pDC->TextOut( x , y  , buffer);

	y=y+linespace;
	sprintf( buffer,"%10.3f",pRange->Dopp );
	m_pDC->TextOut( x+snap_to_decimal1 , y , buffer);

	y=y+linespace;
	sprintf( buffer,"%6.1f",pRange->CN0 );
	m_pDC->TextOut( x+snap_to_decimal2 , y , buffer);

	m_pDC->SetTextColor(oldTx);

}


void CPRNRegister::DrawTec(CDC *pDC)
{
	m_pDC=pDC;
	m_pDC->SelectObject(pfont_tec);
	DrawTecGrid();                    
	DrawTecCon();
	DrawTecSpe();
	Draw134Gps();
}

void CPRNRegister::DrawTecSpe()
{
	int vacancy=2;
	int delt1_2=0;
	int x=0;
	int y=0;

	x=x+vacancy;
	y=y+vacancy;
	
	int deltx=widthRowSpecified;
	int delty=deltL1L2+40;

	COLORREF oldTx=m_pDC->SetTextColor(RGB(250,250,0));

	div_t div_result;
	div_result = div( m_nGpsLock, nColumn );
	if(div_result.rem>0)
		div_result.quot++;

	for(int i=0;i<div_result.quot;i++)
	{
		x=TableX+5;
		y=TableY+5+(deltL1L2+40+widthDeltRow)*i;
/*		int x3=x+deltx-5;
		int y3=y+delty-5;

		m_pDC->MoveTo(x-5,y-2.5);
		m_pDC->LineTo(x3,y-2.5);
		m_pDC->LineTo(x3,y3);
		m_pDC->LineTo(x-5,y3);
		m_pDC->LineTo(x-5,y-2.5);
*/
		m_pDC->TextOut( x , y , "PRN ");
/*		y=y+linespace+delt1_2;
		m_pDC->TextOut( x , y , "psrTEC ");
		y=y+linespace;
		m_pDC->TextOut( x , y , "adrTEC ");
		*/
		y=y+linespace;
		m_pDC->TextOut( x , y , "dopp");
		y=y+linespace;
		m_pDC->TextOut( x , y , "CN0 ");
		y=y+linespace;
		m_pDC->TextOut( x , y , "ATEC");
		y=y+linespace;
		m_pDC->TextOut( x , y , "RTEC");
		y=y+linespace;
		m_pDC->TextOut( x , y , "az");
		y=y+linespace;
		m_pDC->TextOut( x , y , "el");
		y=y+linespace;
		m_pDC->TextOut( x , y , "S4");
		y=y+linespace;
		m_pDC->TextOut( x , y , "δφ");
	}
	m_pDC->SetTextColor(oldTx);
}

void CPRNRegister::DrawTecCon()
{
	int nGps=0;
	int x=0;
	int y=0;

//	DrawTecCell(500,10,widthTableCol,deltL1L2+40,&gs.SatSheet[0]);

	for(int i=1;i<=GPSSATMAXNUMBER;i++)
	{
		if(gs.SatSheet[i].Being==TRUE)
		{

			x=TableX+widthRowSpecified+widthTableCol*(nGps%nColumn);
			y=TableY+(deltL1L2+40+widthDeltRow)*((int)nGps/nColumn);
			DrawTecCell(x,y,widthTableCol,deltL1L2+40,&gs.SatSheet[i]);
			nGps=nGps+1;
		}

	}
	m_nGpsLock=nGps;
}

void CPRNRegister::DrawTecCell(int x, int y, int width, int height, PRN_REGISTER *pPrnReg)
{
	int vacancy=2;
	int delt1_2=0;
	int snap_to_decimal1=0;
	int snap_to_decimal2=17;

	x=x+vacancy;
	y=y+vacancy;
/*	
	int deltx=width-vacancy-1;
	int delty=height-vacancy-1;
	int x3=x+deltx;
	int y3=y+delty;

	m_pDC->MoveTo(x,y);
	m_pDC->LineTo(x3,y);
	m_pDC->LineTo(x3,y3);
	m_pDC->LineTo(x,y3);
	m_pDC->LineTo(x,y);
*/
	x=x+vacancy;
	y=y+vacancy;

	char buffer[50];

	COLORREF oldTx=m_pDC->SetTextColor(RGB(250,0,250));
	sprintf( buffer,"%5u",pPrnReg->PRN );
	m_pDC->TextOut( x , y             , buffer);

	m_pDC->SetTextColor(RGB(200,200,250));

	y=y+linespace+delt1_2;
//	sprintf( buffer,"%9.3f",pPrnReg->pL1->Dopp );
//	m_pDC->TextOut( x , y , buffer);

	y=y+linespace;
//	sprintf( buffer,"%9.1f",pPrnReg->pL1->CN0 );
//	m_pDC->TextOut( x , y , buffer);
	

	if((pPrnReg->pL1!=NULL)&&(pPrnReg->pL2!=NULL))
	{
/*
		sprintf( buffer,"%11.3f",pPrnReg->psrTEC );
		m_pDC->TextOut( x , y  , buffer);	

		y=y+linespace;
		sprintf( buffer,"%11.3f",pPrnReg->adrTEC );
		m_pDC->TextOut( x , y  , buffer);
*/
		y=y+linespace;
		sprintf( buffer,"%16.3f",pPrnReg->AverPTec );
		CString buf1;
		CString buf2;
		buf1=buffer;
		buf2=buf1.Right(9);
		m_pDC->TextOut( x , y , buf2);

		y=y+linespace;
		sprintf( buffer,"%16.3f",pPrnReg->AverATec );
		buf1=buffer;
		buf2=buf1.Right(9);
		buf2.SetAt(0,' ');
		m_pDC->TextOut( x , y  , buf2);
	}else{
		y=y+linespace;
		buffer[0]='\0';
		m_pDC->TextOut( x , y  , buffer);	

		y=y+linespace;
		m_pDC->TextOut( x , y  , buffer);
	}
	y=y+linespace;
	sprintf( buffer,"%9u",pPrnReg->azimuth);
	m_pDC->TextOut( x , y , buffer);

	y=y+linespace;
	sprintf( buffer,"%9u",pPrnReg->elev);
	m_pDC->TextOut( x , y , buffer);

	m_pDC->SetTextColor(oldTx);

}


BOOL CPRNRegister::SetTimePar(float sampT, int averT)
{
	sampleT=sampT;
	averageT=averT;
	NsamplePoint=(int)averageT/sampleT;
	Timer=0;

	return TRUE;
}

void CPRNRegister::DrawTecGrid()
{
	int x=TableX,y=TableY;
	int x3=TableX+widthRowSpecified+11*widthTableCol;
	int y3=TableY+widthTableRow-100;
	
	CPen *old , pen(PS_SOLID, 2, RGB(50,150,50)) ;
	old = m_pDC->SelectObject(&pen) ;

	m_pDC->MoveTo(x,y);
	m_pDC->LineTo(x3,y);
	m_pDC->LineTo(x3,y3);
	m_pDC->LineTo(x,y3);
	m_pDC->LineTo(x,y);

	CPen pen1(PS_SOLID,2, RGB(50,150,50));
	m_pDC->SelectObject(&pen1) ;
	x=TableX+widthRowSpecified;
	m_pDC->MoveTo(x,y);
	m_pDC->LineTo(x,y3);

	for(int i=0;i<10;i++)
	{

		x=x+widthTableCol;
		m_pDC->MoveTo(x,y);
		m_pDC->LineTo(x,y3);

	}

	m_pDC->SelectObject(old) ;
}

BOOL CPRNRegister::SetGpsInf(CArray<VARIABLE_GPGSV, VARIABLE_GPGSV> *pAGpgsv)
{

	int lr=pAGpgsv->GetSize();
	int index;	
	if(lr==0)
		return FALSE;

	for(int i=0;i<lr;i++)
	{

		if(pAGpgsv->GetAt(i).PRN>200||pAGpgsv->GetAt(i).PRN<0)
			return FALSE;

		if(pAGpgsv->GetAt(i).PRN>32)
		{
			gs.SatSheet[0].elev=pAGpgsv->GetAt(i).elev;
			gs.SatSheet[0].azimuth=pAGpgsv->GetAt(i).azimuth;
		}else{
			gs.SatSheet[pAGpgsv->GetAt(i).PRN].elev=pAGpgsv->GetAt(i).elev;
			gs.SatSheet[pAGpgsv->GetAt(i).PRN].azimuth=pAGpgsv->GetAt(i).azimuth;
		}
	}	
	return TRUE;
}

void CPRNRegister::Draw134Gps()
{


	int x=500,y=10;
	PRN_REGISTER *pPrnReg=&gs.SatSheet[0];
	int vacancy=2;
	int delt1_2=0;
	int snap_to_decimal1=0;
	int snap_to_decimal2=17;

	x=x+vacancy;
	y=y+vacancy;
	
	int deltx=80;
	int delty=100;
	int x3=x+deltx;
	int y3=y+delty;
	CPen *old , pen(PS_SOLID, 2, RGB(50,150,50)) ;
	old = m_pDC->SelectObject(&pen) ;
	m_pDC->MoveTo(x,y);
	m_pDC->LineTo(x3,y);
	m_pDC->LineTo(x3,y3);
	m_pDC->LineTo(x,y3);
	m_pDC->LineTo(x,y);
	m_pDC->SelectObject(old) ;
	x=x+vacancy;
	y=y+vacancy;

	char buffer[50];

	COLORREF oldTx=m_pDC->SetTextColor(RGB(250,0,250));

	sprintf( buffer,"%8u",pPrnReg->PRN );
	m_pDC->TextOut( x , y             , buffer);

if(pPrnReg->Being==TRUE)
{	m_pDC->SetTextColor(RGB(200,200,250));

	y=y+linespace+delt1_2;
	sprintf( buffer,"%9.3f",pPrnReg->pL1->Dopp );
	m_pDC->TextOut( x , y , buffer);

	y=y+linespace;
	sprintf( buffer,"%9.1f",pPrnReg->pL1->CN0 );
	m_pDC->TextOut( x , y , buffer);
	
	y=y+linespace;
	sprintf( buffer,"%9u",pPrnReg->azimuth);
	m_pDC->TextOut( x , y , buffer);

	y=y+linespace;
	sprintf( buffer,"%9u",pPrnReg->elev);
	m_pDC->TextOut( x , y , buffer);
}
	m_pDC->SetTextColor(oldTx);

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -