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

📄 timeview.cpp

📁 FFT算法进行FFT 、IFFT、功率谱计算
💻 CPP
字号:
// TimeView.cpp : implementation file
//

#include "stdafx.h"
#include "fft.h"
#include "TimeView.h"


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

/////////////////////////////////////////////////////////////////////////////
// CTimeView

IMPLEMENT_DYNCREATE(CTimeView, CView)

CTimeView::CTimeView()
{
}

CTimeView::~CTimeView()
{
}


BEGIN_MESSAGE_MAP(CTimeView, CView)
	//{{AFX_MSG_MAP(CTimeView)
		// NOTE - the ClassWizard will add and remove mapping macros here.
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTimeView drawing

void CTimeView::OnDraw(CDC* pDC)
{
	CFFTDoc* pDoc = GetDocument();	ASSERT_VALID(pDoc);
	CString str;
	int i;
	CRect rc;GetClientRect(rc);
	if(rc.Height()<=100||rc.Width()<=100)return;
	CPoint pcenter1(rc.left,rc.top+rc.Height()/2-2),pcenter2(rc.right,rc.top+rc.Height()/2-2);
	CPen pWhite(PS_SOLID,1,RGB(255,255,255));
	CPen pGray(PS_SOLID,1,RGB(192,192,192));
	CPen pDark(PS_SOLID,1,RGB(96,96,96));
	CPen pBlue(PS_SOLID,2,RGB(0,0,255));
	CPen pGrid(PS_DOT,1,RGB(0,96,0));
//写标题
	pDC->SetTextColor(RGB(0,0,128));
	pDC->TextOut(rc.left+rc.Width()/2-40,rc.top,"时域波形");
//画窗格
	CRect rtime;
	rtime.top=rc.top+30;rtime.bottom =rc.bottom-30;
    rtime.left =rc.left+10;rtime.right =rc.right-10;
	pDC->TextOut(rtime.left-5,rtime.bottom+5,"0");
	if(pDoc->m_bPower) str.Format("%d",pDoc->estsize);
	else	str.Format("%d",pDoc->N);
	pDC->TextOut(rtime.right-30,rtime.bottom+5,str);//N
    pDC->SelectObject(&pGrid);
	int wnum,hnum;
	wnum=rtime.Width()/40;
	hnum=rtime.Height()/40;
	for(i=0;i<=wnum;i++)//画竖线
	{pDC->MoveTo(rtime.left+i*rtime.Width()/wnum,rtime.top);
     pDC->LineTo(rtime.left+i*rtime.Width()/wnum,rtime.bottom);
	}
	for(i=0;i<=hnum;i++)//画横线
	{pDC->MoveTo(rtime.left,rtime.top+i*rtime.Height()/hnum);
	 pDC->LineTo(rtime.right,rtime.top+i*rtime.Height()/hnum);
	}
//时域波形
	pDC->SelectObject(&pBlue);
	double ys,xs;
	int signa=0,signb=0,y0;
    str.Format("%e",pDoc->tym);
	pDC->TextOut(rtime.left,rtime.top-20,str);//tym
	if(pDoc->m_bPower){
		for(i=0;i<pDoc->estsize;i++)  {
		if (pDoc->sigfloat[i]>fabs(pDoc->tym/20)) signa=1;
		if (pDoc->sigfloat[i]<-fabs(pDoc->tym/20)) signb=1;
		}
		if ((signa==1)&&(signb==1)) ys=(double)(rtime.Height()>>1)/pDoc->tym;
		else ys=(double)(rtime.Height()/pDoc->tym);
		y0=rtime.top+rtime.Height()/2;
    	xs=(double)(rtime.Width())/pDoc->estsize;
        if((signa==1)&&(signb==0)) y0=rtime.bottom;
        else if((signb==1)&&(signa==0)) y0=rtime.top;

	for(i=0;i<(pDoc->estsize)-1;i++)
	{pDC->MoveTo(xs*i+rtime.left,y0-pDoc->sigfloat[i]*ys);
	pDC->LineTo(xs*(i+1)+rtime.left,y0-pDoc->sigfloat[i+1]*ys);}
	}//sigfloat[estsize]
	else{ys=(double)(rtime.Height())/pDoc->tym;
    xs=(double)(rtime.Width())/pDoc->N;
	for(i=0;i<(pDoc->N)-1;i++)
	{pDC->MoveTo(xs*i+rtime.left,rtime.bottom-pDoc->tamp[i]*ys);
	pDC->LineTo(xs*(i+1)+rtime.left,rtime.bottom-pDoc->tamp[i+1]*ys);}}

}

/////////////////////////////////////////////////////////////////////////////
// CTimeView diagnostics

#ifdef _DEBUG
void CTimeView::AssertValid() const
{
	CView::AssertValid();
}

void CTimeView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}
CFFTDoc* CTimeView::GetDocument() // non-debug version is inline
{
        ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CFFTDoc)));
        return (CFFTDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CTimeView message handlers

⌨️ 快捷键说明

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