📄 ftphasordoc.cpp
字号:
// FtPhasorDoc.cpp : implementation of the CFtPhasorDoc class
//
#include "stdafx.h"
#include "FtPhasor.h"
#include "FtPhasorDoc.h"
#include "math.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CFtPhasorDoc
IMPLEMENT_DYNCREATE(CFtPhasorDoc, CDocument)
BEGIN_MESSAGE_MAP(CFtPhasorDoc, CDocument)
//{{AFX_MSG_MAP(CFtPhasorDoc)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CFtPhasorDoc construction/destruction
CFtPhasorDoc::CFtPhasorDoc()
{
// TODO: add one-time construction code here
}
CFtPhasorDoc::~CFtPhasorDoc()
{
}
BOOL CFtPhasorDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
// TODO: add reinitialization code here
// (SDI documents will reuse this document)
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CFtPhasorDoc serialization
void CFtPhasorDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: add storing code here
}
else
{
// TODO: add loading code here
ReadData(ar);
}
}
/////////////////////////////////////////////////////////////////////////////
// CFtPhasorDoc diagnostics
#ifdef _DEBUG
void CFtPhasorDoc::AssertValid() const
{
CDocument::AssertValid();
}
void CFtPhasorDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CFtPhasorDoc commands
float CFtPhasorDoc::FtPhasor(float* fP,int j)
{
int wB_Frequency=25000;
int wCycleSampPnts=wB_Frequency/50;
int uPosition=0;
double z,z1,z2;
double Re,Im;
double dt=(double)1./wB_Frequency;//秒
double temp;
double Kv,Ka;/////幅值,相角补偿系数
float dHarmonic_Value;
z=z1=z2=0;
for(int k=0;k<wCycleSampPnts;k++)
{ //用向hou差分傅氏算法
temp=fP[k+uPosition]-
fP[(k+1)+uPosition];//
z1+=temp*cos(j*k*2*pi/wCycleSampPnts);
z2+=temp*sin(j*k*2*pi/wCycleSampPnts);
}
Re=z1*2/wCycleSampPnts;
Im=-z2*2/wCycleSampPnts;
Kv=2*sin(pi*j*50*dt);
Ka=90-180*j*50*dt;
dHarmonic_Value=float(sqrt(Re*Re+Im*Im)/Kv/1.414214);//有效值
return dHarmonic_Value;
}
void CFtPhasorDoc::ReadData(CArchive &ar)
{
strcpy(dataFileName,ar.m_strFileName);//获得文件路径,
hFile=::CreateFile(dataFileName,GENERIC_READ,
FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_READONLY,NULL);
ASSERT(hFile!=NULL);
dwFileSize=::GetFileSize(hFile,NULL);
CStdioFile file;
CString strLine;
CString seps=" ";
// char*token;
float token;
file.Open(dataFileName,CFile::modeRead|CFile::shareDenyNone);
int i=0;
while(file.ReadString(strLine))
{
i++;
}
file.Close();
float* fP;
fP=new float[i];
i=0;
file.Open(dataFileName,CFile::modeRead|CFile::shareDenyNone);
while(file.ReadString(strLine))
{
token=(float)atof(strLine);
fP[i]=token;
i++;
}
file.Close();
strLine.Format("%d",i);
// AfxMessageBox(strLine);
float dHarmonic_Value[9];
CString str,str1;
//----------------
str1="显示结果:\n";
for( i=0;i<9;i++)
{
dHarmonic_Value[i]=FtPhasor(fP,i+1);
str.Format("%d次谐波有效值%f\n",i+1,dHarmonic_Value[i]);
str1=str1+str;
}
AfxMessageBox(str1);
//-----------------
delete []fP;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -