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

📄 ftphasordoc.cpp

📁 这是一个简单电力系统谐波分析计算的源代码
💻 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 + -