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

📄 fftview.cpp

📁 数字信号处理试验
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// FFTView.cpp : implementation of the CFFTView class
//

#include "stdafx.h"
#include "FFT.h"

#include "FFTDoc.h"
#include "FFTView.h"


#include "math.h"

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

#define PI 3.14159265
/////////////////////////////////////////////////////////////////////////////
// CFFTView

IMPLEMENT_DYNCREATE(CFFTView, CView)

BEGIN_MESSAGE_MAP(CFFTView, CView)
	//{{AFX_MSG_MAP(CFFTView)
	ON_COMMAND(ID_FFT_GAUSS, OnFftGauss)
	ON_COMMAND(ID_FFT_ATTSIN, OnFftAttsin)
	ON_COMMAND(ID_FFT_ATTRI, OnFftAttri)
	ON_COMMAND(ID_FFT_TRI, OnFftTri)
	ON_COMMAND(ID_DFT_ATTRI, OnDftAttri)
	ON_COMMAND(ID_DFT_ATTSIN, OnDftAttsin)
	ON_COMMAND(ID_DFT_GAUSS, OnDftGauss)
	ON_COMMAND(ID_DFT_TRI, OnDftTri)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFFTView construction/destruction

CFFTView::CFFTView()
{
	// TODO: add construction code here
	m_fPara1 = 0;
	m_fPara2 = 0;
	m_iCount = 16;
}

CFFTView::~CFFTView()
{
}

BOOL CFFTView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CFFTView drawing

void CFFTView::OnDraw(CDC* pDC)
{
	CFFTDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
}

/////////////////////////////////////////////////////////////////////////////
// CFFTView printing

BOOL CFFTView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CFFTView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CFFTView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CFFTView diagnostics

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

void CFFTView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CFFTDoc* CFFTView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CFFTDoc)));
	return (CFFTDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CFFTView message handlers

void CFFTView::OnLine() 
{
	// TODO: Add your command handler code here
	CLineDlg lineDlg;
	lineDlg.DoModal();
}
//画高斯序列
void CFFTView::OnFftGauss() 
{
	// TODO: Add your command handler code here
	CParaSetDlg paraSetDlg;	
	paraSetDlg.m_Name0 = "高斯序列";                   //设置对话框的标签
	paraSetDlg.m_Name1 = "参数p:";
	paraSetDlg.m_Name2 = "参数q:";	
	paraSetDlg.index = 1;
	UpdateData(false);
	if (IDOK == paraSetDlg.DoModal())                  //获取参数值
	{
		m_fPara1 = paraSetDlg.m_fPara1; 
		m_fPara2 = paraSetDlg.m_fPara2;	
		m_iCount = paraSetDlg.count;
		int i;
// 		CString str;
// 		str.Format("%d",m_iCount);
// 		MessageBox(str);
		for (i=0; i<m_iCount; i++ )
		{
			xreal[i] = CreatGaussReal(i, m_fPara1, m_fPara2);
			ximg[i] = CreatGaussImg(i, m_fPara1, m_fPara2);
		}
		CreateFFT(Xreal, Ximg, xreal, ximg,m_iCount);
		CreateAbs(XAbs, Xreal, Ximg, m_iCount);
		CreateArg(XArg, Xreal, Ximg, m_iCount);
		//调用画图对话框和求傅立叶变换
		//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
		//ShowWindow(SW_HIDE);
		ShowClineDlg(1, 2);
	}	
}

void CFFTView::OnDftGauss() 
{
	// TODO: Add your command handler code here
	// TODO: Add your command handler code here
	CParaSetDlg paraSetDlg;	
	paraSetDlg.m_Name0 = "高斯序列";                   //设置对话框的标签
	paraSetDlg.m_Name1 = "参数p:";
	paraSetDlg.m_Name2 = "参数q:";	
	paraSetDlg.index = 1;
	UpdateData(false);
	if (IDOK == paraSetDlg.DoModal())                  //获取参数值
	{
		m_fPara1 = paraSetDlg.m_fPara1; 
		m_fPara2 = paraSetDlg.m_fPara2;	
		m_iCount = paraSetDlg.count;
		int i;
		for (i=0; i<m_iCount; i++ )
		{
			xreal[i] = CreatGaussReal(i, m_fPara1, m_fPara2);
			ximg[i] = CreatGaussImg(i, m_fPara1, m_fPara2);
		}
		CreateDFT(Xreal, Ximg, xreal, ximg,m_iCount);
		CreateAbs(XAbs, Xreal, Ximg, m_iCount);
		CreateArg(XArg, Xreal, Ximg, m_iCount);
		//调用画图对话框和求傅立叶变换
		//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
		//ShowWindow(SW_HIDE);
		ShowClineDlg(1, 1);
	}	
}
//画衰减正弦序列
void CFFTView::OnFftAttsin() 
{
	// TODO: Add your command handler code here
	CParaSetDlg paraSetDlg;	
	paraSetDlg.m_Name0 = "衰减正弦序列";                   //设置对话框的标签
	paraSetDlg.m_Name1 = "参数a:";
	paraSetDlg.m_Name2 = "参数f:";
	paraSetDlg.index = 2;
	UpdateData(false);
	if (IDOK == paraSetDlg.DoModal())                  //获取参数值
	{
		m_fPara1 = paraSetDlg.m_fPara1; 
		m_fPara2 = paraSetDlg.m_fPara2;
		m_iCount = paraSetDlg.count;
		int i;
		for (i=0; i<m_iCount; i++ )
		{
			xreal[i] = CreatAttsinReal(i, m_fPara1, m_fPara2);
			ximg[i] = CreatAttsinImg(i, m_fPara1, m_fPara2);	
		}
		CreateFFT(Xreal, Ximg, xreal, ximg,m_iCount);
		CreateAbs(XAbs, Xreal, Ximg, m_iCount);
		CreateArg(XArg, Xreal, Ximg, m_iCount);
		//调用画图对话框和求傅立叶变换
		ShowClineDlg(2, 2);
	}	
}

void CFFTView::OnDftAttsin() 
{
	// TODO: Add your command handler code here
	CParaSetDlg paraSetDlg;	
	paraSetDlg.m_Name0 = "衰减正弦序列";                   //设置对话框的标签
	paraSetDlg.m_Name1 = "参数a:";
	paraSetDlg.m_Name2 = "参数f:";
	paraSetDlg.index = 2;
	UpdateData(false);
	if (IDOK == paraSetDlg.DoModal())                  //获取参数值
	{
		m_fPara1 = paraSetDlg.m_fPara1; 
		m_fPara2 = paraSetDlg.m_fPara2;
		m_iCount = paraSetDlg.count;
		int i;
		for (i=0; i<m_iCount; i++ )
		{
			xreal[i] = CreatAttsinReal(i, m_fPara1, m_fPara2);
			ximg[i] = CreatAttsinImg(i, m_fPara1, m_fPara2);	
		}
		CreateDFT(Xreal, Ximg, xreal, ximg,m_iCount);
		CreateAbs(XAbs, Xreal, Ximg, m_iCount);
		CreateArg(XArg, Xreal, Ximg, m_iCount);
		//调用画图对话框和求傅立叶变换
		ShowClineDlg(2, 1);
	}	
}
//画三角波序列
void CFFTView::OnFftTri() 
{
	// TODO: Add your command handler code here
	CParaSetDlg paraSetDlg;	
	paraSetDlg.m_Name0 = "三角波序列";      
	//设置对话框的标签	
	paraSetDlg.index = 3;
	UpdateData(false);	
	if (IDOK == paraSetDlg.DoModal())                  //获取参数值
	{		
		m_iCount = paraSetDlg.count;
		int i;
		for (i=0; i<m_iCount; i++ )
		{
			xreal[i] = CreatTriReal(i);
			ximg[i] = CreatTriImg(i);
		}
		CreateFFT(Xreal, Ximg, xreal, ximg,m_iCount);
		CreateAbs(XAbs, Xreal, Ximg, m_iCount);
		CreateArg(XArg, Xreal, Ximg, m_iCount);
		//调用画图对话框和求傅立叶变换
		//作为一个画图子函数最好 ,参数 index;
		ShowClineDlg(3, 2);
	}		
}
void CFFTView::OnDftTri() 
{
	// TODO: Add your command handler code here
	CParaSetDlg paraSetDlg;	
	paraSetDlg.m_Name0 = "三角波序列";      
	//设置对话框的标签	
	paraSetDlg.index = 3;
	UpdateData(false);	
	if (IDOK == paraSetDlg.DoModal())                  //获取参数值
	{		
		m_iCount = paraSetDlg.count;
		int i;
		for (i=0; i<m_iCount; i++ )
		{
			xreal[i] = CreatTriReal(i);
			ximg[i] = CreatTriImg(i);
		}
		CreateDFT(Xreal, Ximg, xreal, ximg,m_iCount);
		CreateAbs(XAbs, Xreal, Ximg, m_iCount);
		CreateArg(XArg, Xreal, Ximg, m_iCount);
		//调用画图对话框和求傅立叶变换
		//作为一个画图子函数最好 ,参数 index;
		ShowClineDlg(3, 1);
	}
}
//画反三角波序列
void CFFTView::OnFftAttri() 
{
	// TODO: Add your command handler code here
	CParaSetDlg paraSetDlg;	
	paraSetDlg.m_Name0 = "反三角序列";      
	//设置对话框的标签	
	paraSetDlg.index = 4;
	UpdateData(false);	
	if (IDOK == paraSetDlg.DoModal())                  //获取参数值
	{		
		m_iCount = paraSetDlg.count;
		int i;
		for (i=0; i<m_iCount; i++ )
		{
			xreal[i] = CreatAttriReal(i);
			ximg[i] = CreatAttriImg(i);
		}
		CreateFFT(Xreal, Ximg, xreal, ximg,m_iCount);
		CreateAbs(XAbs, Xreal, Ximg, m_iCount);
		CreateArg(XArg, Xreal, Ximg, m_iCount);
		//调用画图对话框和求傅立叶变换
		ShowClineDlg(4, 2);
	}		
}


void CFFTView::OnDftAttri() 
{
	// TODO: Add your command handler code here
	CParaSetDlg paraSetDlg;	
	paraSetDlg.m_Name0 = "反三角序列";      
	//设置对话框的标签	
	paraSetDlg.index = 4;
	UpdateData(false);	
	if (IDOK == paraSetDlg.DoModal())                  //获取参数值
	{		

⌨️ 快捷键说明

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