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

📄 qushixiangview.cpp

📁 vc++消除趋势相源程序 可用于基于VC++的数字信号处理 在实际信号处理中也有很好的应用。
💻 CPP
字号:
// qushixiangView.cpp : implementation of the CQushixiangView class
//

#include "stdafx.h"
#include "qushixiang.h"
#include <Afxtempl.h>
#include <math.h>
#include "qushixiangDoc.h"
#include "qushixiangView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#define height 143
#define width 788
#define m 15    //拟合阶数
#define K 1000    //放大倍数
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

double G[height][width];
double GG[height][width];
double resule[height][width];

/////////////////////////////////////////////////////////////////////////////
// CQushixiangView
/////////////////////////////////////////////////////////////////////////////

IMPLEMENT_DYNCREATE(CQushixiangView, CView)

BEGIN_MESSAGE_MAP(CQushixiangView, CView)
	//{{AFX_MSG_MAP(CQushixiangView)
	ON_COMMAND(ID_QUSHINIHE, OnQushinihe)
	//}}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()

/////////////////////////////////////////////////////////////////////////////
// CQushixiangView construction/destruction

CQushixiangView::CQushixiangView()
{
	// TODO: add construction code here

}

CQushixiangView::~CQushixiangView()
{
}

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

	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CQushixiangView drawing

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

/////////////////////////////////////////////////////////////////////////////
// CQushixiangView printing

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

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

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

/////////////////////////////////////////////////////////////////////////////
// CQushixiangView diagnostics

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

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

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

/////////////////////////////////////////////////////////////////////////////
// CQushixiangView message handlers

void CQushixiangView::OnQushinihe() 
{
	CArray<double,double> x;
    CArray<double,double> y;
    CArray<double,double> chazhi;
	
	double g,q,d2;
	double m_a[m];
	int nn;
	double resultcha;
	int b,l,i,j,xdata;
	double ydata;
	char fileopen[50]={"/0"};
	char fileclose[50]={"/0"};
	FILE *fileread,*filewrite;
  for(b=1;b<3;b++)
  {
	for(i=0;i<height;i++)
	{
		for(j=0;j<width;j++)
		{
			resule[i][j]=0;
		}
	}
	sprintf(fileopen,"%s%d%s","f://",b,".raw");
	fileread=fopen(fileopen,"rb");
	if(fileread==NULL)
    {   
		MessageBox("File1 open error");
		
		return;
	}	
	for(i=0;i<height;i++)
	{
		for(j=0;j<width;j++)
		{			
			fread(&G[i][j],sizeof(double),1,fileread);			
		}
	}
	fclose(fileread);
	//////////////////////guiyihua///////////////////
	double min=0.0,max=1000;
	for(i=0;i<height;i++)
	{
		for(j=0;j<width;j++)
		{			
			if(G[i][j]>max)
			{
			   max=G[i][j];
			}
			if(G[i][j]<min)
			{
			   min=G[i][j];
			}
		}
	}
	for(i=0;i<height;i++)
	{
		for(j=0;j<width;j++)
		{
            //G[i][j]=K*(G[i][j]-min)/(max-min);
		}
	}
	/////////////////////////开始拟合曲线//////////////////
	for(l=0; l<width; l++)
	{		
		for(j=0;j<height;j++)
		{			
			ydata=(double)G[j][l];
			y.Add(ydata);
			xdata=j;
			x.Add(xdata);			
		}
		if(y.GetSize()>1)
		{						
			int n=y.GetSize();						
			for(int i=0; i<m; i++) 
			{
				m_a[i]=0.0;
			}
			double z=0.0;double p=0.0;double c=0.0;
			for(i=0; i<n; i++) 
			{
				z = z + x[i] / n;
			}
			double b[m],s[m],t[m];
			b[0]=1.0;
			double d1 = n;
			for(i=0; i<n; i++)
			{ 
				p=p+(x[i]-z);
				c=c+y[i];
			}
			c=c/d1; 
			p=p/d1;
			m_a[0]=c*b[0];
			if(m>1)
			{
				t[1]=1.0;
				t[0]=-p;
				d2=0.0;
				c=0.0; 
				g=0.0;
				for(i=0; i<n; i++)
				{ 
					q=x[i]-z-p; d2=d2+q*q;
					c=c+y[i]*q;
					g=g+(x[i]-z)*q*q;
				}
				c=c/d2;
				p=g/d2;
				q=d2/d1;
				d1=d2;
				m_a[1]=c*t[1]; 
				m_a[0]=c*t[0]+m_a[0];
			}
			
			for(int j=2; j<m; j++)
			{ 
				s[j]=t[j-1];
				s[j-1]=-p*t[j-1]+t[j-2];
				if(j>=3)
					for(int k=j-2; k>=1; k--)	s[k]=-p*t[k]+t[k-1]-q*b[k];
					s[0]=-p*t[0]-q*b[0];
					d2=0.0;
					c=0.0;
					g=0.0;
					for(i=0; i<n; i++)
					{ 
						q=s[j];
						for(int k=j-1; k>=0; k--)	q=q*(x[i]-z)+s[k];
						d2=d2+q*q; c=c+y[i]*q;
						g=g+(x[i]-z)*q*q;
					}
					c=c/d2; 
					p=g/d2; 
					q=d2/d1;
					d1=d2;
					m_a[j]=c*s[j]; t[j]=s[j];
					for(int k=j-1; k>=0; k--)
					{
						m_a[k]=c*s[k]+m_a[k];
						b[k]=t[k]; t[k]=s[k];
					}
					
			}
			for(int ii=0;ii<n;ii++)
			{
				double cc=x[ii]-z;			
				for(nn=0;nn<m;nn++)
				{				 			      
					resule[ii][l]+=(m_a[nn]*pow(cc,nn));
				}
			}
			x.RemoveAll();
			y.RemoveAll();
		}
	}
	for(l=0;l<height;l++)
	{
	   resultcha=0;
	   for(int ii=0;ii<width;ii++)
	   {
	       resultcha+=resule[l][ii]/width;
	   } 
	   chazhi.Add(resultcha);
	}
	for(int ii=0;ii<width;ii++)
	{
	   for(l=0;l<height;l++)
	   {
	       GG[l][ii]=G[l][ii]-chazhi[l];	   
	   }
	}
	chazhi.RemoveAll();
	
    sprintf(fileclose,"%s%d%s","f://qu",b,".raw");		 
    filewrite=fopen(fileclose,"wb");
	if(filewrite==NULL)
    {   
		MessageBox("File open error");
		
		return;
	}	
	for(i=0;i<height;i++)
	{
		for(j=0;j<width;j++)
		{			
			fwrite(&GG[i][j],sizeof(double),1,filewrite);
		}
	}

	fclose(filewrite);
	///////////////////////////////////////////////////////
 }
	
	
}

⌨️ 快捷键说明

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