www.pudn.com > bitmappaint.rar > radarDoc.cpp


// radarDoc.cpp : implementation of the CRadarDoc class 
// 
 
#include "stdafx.h" 
#include "radar.h" 
#include "radarView.h" 
#include "radarDoc.h" 
#include "stdio.h" 
#include "math.h" 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CRadarDoc 
 
IMPLEMENT_DYNCREATE(CRadarDoc, CDocument) 
 
BEGIN_MESSAGE_MAP(CRadarDoc, CDocument) 
	//{{AFX_MSG_MAP(CRadarDoc) 
	ON_COMMAND(ID_OPEN_EKKO_FILE, OnOpenEkkoFile) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CRadarDoc construction/destruction 
 
CRadarDoc::CRadarDoc() 
{ 
	// TODO: add one-time construction code here 
   m_bFileOpened=false; 
   m_fVelocity=0.1f; 
   m_fGainVelocity=0.1f; 
   m_fPusleNumber=1; 
   m_fAbsorb=3; 
   m_nSECMaxGain=200; 
   m_nAGCMaxGain=200;  
   m_nCONGain=200; 
   m_nPointAverage=1; 
   m_nTraceAverage=1; 
} 
 
CRadarDoc::~CRadarDoc() 
{ 
	if(m_bFileOpened) 
	{ 
     delete []Data; 
     delete []OriginData; 
	} 
} 
 
BOOL CRadarDoc::OnNewDocument() 
{ 
	if (!CDocument::OnNewDocument()) 
		return FALSE; 
 
	// TODO: add reinitialization code here 
	// (SDI documents will reuse this document) 
 
	return TRUE; 
} 
 
 
 
///////////////////////////////////////////////////////////////////////////// 
// CRadarDoc serialization 
 
void CRadarDoc::Serialize(CArchive& ar) 
{ 
	if (ar.IsStoring()) 
	{ 
		// TODO: add storing code here 
	} 
	else 
	{ 
		// TODO: add loading code here 
	} 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CRadarDoc diagnostics 
 
#ifdef _DEBUG 
void CRadarDoc::AssertValid() const 
{ 
	CDocument::AssertValid(); 
} 
 
void CRadarDoc::Dump(CDumpContext& dc) const 
{ 
	CDocument::Dump(dc); 
} 
#endif //_DEBUG 
 
///////////////////////////////////////////////////////////////////////////// 
// CRadarDoc commands 
 
void CRadarDoc::OnOpenEkkoFile()  
{ 
	// TODO: Add your command handler code here 
	CString filename; 
	CString HDfilename; 
	CString ss;//// 
	float head[32]; 
	CFile file; 
	CStdioFile HDfile; 
	int j; 
	 
	CFileDialog filedlg(true,"dt1","*.dt1",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"data Files(*.dt1)|*.dt1||"); 
	if(filedlg.DoModal()==IDOK) 
	{   
		filename=filedlg.GetPathName();  
		m_sFileName=filename; 
		HDfilename=filename.Left((filename.GetLength()-4))+".hd"; 
		if(!file.Open(filename,CFile::modeRead)) 
		{ 
	        AfxMessageBox("文件出错"); 
		    return; 
		} 
	     
        file.Seek(0L,CFile::begin); 
        file.Read(head,sizeof(head)); 
        m_nPtsOfTrace=(int)head[2]; 
        m_nStacks=(int)head[7]; 
		m_nTimeWindow=(int)head[8]; 
		m_nTotalTraceNumber=(int)(file.GetLength() 
			               /(128L+m_nPtsOfTrace*2L)); 
		 
		Data=Create2DShortArray(m_nTotalTraceNumber,m_nPtsOfTrace); 
		OriginData=Create2DShortArray(m_nTotalTraceNumber,m_nPtsOfTrace); 
		Header=Create2DFloatArray(m_nTotalTraceNumber,32); 
	 
		file.Seek(0L,CFile::begin); 
		for(int i=0;iMDIGetActive()->GetActiveView()); 
		  
		 if(pView->m_bBitmapIsNone==false) 
         pView->bb.DeleteObject(); 
		 pView->m_bBitmapIsNone=true; 
         UpdateAllViews(NULL,NULL,NULL); 
	} 
} 
 
short** CRadarDoc::Create2DShortArray(int row, int col) 
{ 
     short **aa; 
	 short *a; 
	 a=new short[row*col]; 
     aa=new short*[row]; 
	 if(a==NULL||aa==NULL) 
	 { 
		 AfxMessageBox("内存分配出错"); 
		 exit(0); 
	 } 
	 for(int i=0;im_nSECMaxGain) g=(float)m_nSECMaxGain; 
	    b=g*seis[i]; 
		 
		if(b>32767)b=32767; 
		if(b<-32767)b=-32767; 
		seis[i]=(short)(b); 
	} 
	*/ 
    float N=(1000/m_fSampleTime/m_fFrequency); 
	float g,t,b,p,a; 
	a=m_fAbsorb*m_fGainVelocity/8.69f; 
	p=N*m_fSampleTime; 
  	for(int i=0;i=0) 
		{  g= float((i-m_nTimeZeroPoint)/p*exp(a*t));} 
		else{ g=1;} 
		 
		if(g>m_nSECMaxGain) g=(float)m_nSECMaxGain; 
	    b=g*seis[i]; 
		 
		if(b>32767)b=32767; 
		if(b<-32767)b=-32767; 
		seis[i]=(short)(b); 
	} 
	return seis; 
} 
 
short* CRadarDoc::AGCGain(short seis[]) 
{ 
    int N=(int)(1000/m_fFrequency/m_fSampleTime); 
    int i,n; 
    float average,g,t,m; 
	short* b; 
    m=N*m_fPusleNumber;  
    b=new short[m_nPtsOfTrace]; 
    if(b==NULL){ return 0;} 
 
          
	  for(i=0;im_nAGCMaxGain)  { g=float(m_nAGCMaxGain); } 
			 t=g*seis[i]; 
			 if(t>32767)t=32767; 
			 if(t<-32767)t=-32767; 
			 b[i]=short(t);   
		   
	  }	  	   
	  for(i=0;i32767)b=32767; 
		if(b<-32767)b=-32767; 
		seis[i]=(short)(b); 
	} 
	return seis; 
} 
 
short* CRadarDoc::PointAverage(short seis[],int n) 
{ 
   int start; 
   float sum; 
   int i,j; 
    
   if(n==1) return seis; 
    
   short *b; 
   b=new short[m_nPtsOfTrace]; 
   if(b==NULL){ AfxMessageBox("内存分配不够"); return seis;} 
    
    
   for(i=0; im_nTotalTraceNumber-start-1) 
		   {  return seis;  }     
		    
		   b=Create2DShortArray(n,m_nPtsOfTrace); 
		   if(b==NULL) return seis; 
		    
		   for(i=TraceNumber-start;i<=TraceNumber+start;i++) 
		   { 
			   bp=i-(TraceNumber-start); 
			   for(j=0;jm_nTotalTraceNumber-start) 
		   {  return seis;  }     
		    
		   b=Create2DShortArray(n,m_nPtsOfTrace); 
		   if(b==NULL) return seis; 
		    
		   for(i=TraceNumber-start;i