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