📄 fftview.cpp
字号:
// 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 + -