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

📄 mycalculate.cpp

📁 一个用于无刷直流电动机的驱动与控制程序.里面所用的采集卡的型号为MC08.
💻 CPP
字号:
// MyCalculate.cpp: implementation of the MyCalculate class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "TestForm.h"
#include "MyCalculate.h"

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

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

MyCalculate::MyCalculate()
{

}

MyCalculate::~MyCalculate()
{

}

/*求峰值,并返回峰值个数,Peak与Data数组长度相同
	输入: Data:待求信号
	      totalnamber :信号长度
	输出: Peak:峰值结果
	      Peak_pos:峰值位置
*/
long  MyCalculate:: FindPeak(double *Data,double *Peak,long *Peak_pos,long totalnamber)
{
	long P_Num=0;
	for(long i=1;i<totalnamber-1;i++)
	{
		if(Data[i]>Data[i-1]&&Data[i]>Data[i+1])
		{
			Peak[P_Num]=Data[i];
			Peak_pos[P_Num]=i;
			P_Num=P_Num+1;
			
		}
	}
	return P_Num;
}

/*得到峰值信息
	输入: Data			:待求信号
	      totalnamber	:信号长度
		  number		:读取峰值的个数
	输出: Peak:峰值结果
		  Peak_pos:峰值位置
*/
//void MyCalculate::GetPeakData(double *Data,double *Peak,long *Peak_pos,long totalnamber,int number)
//{
//	double *temp=new double [m_Y_Long];
//	long *temp_pos=new long [m_Y_Long];
//	//调用求峰值函数
//	m_Peak_Num=FindPeak(dataShow_Y,temp,temp_pos,m_Y_Long);
//	//从大到小排序
//	Rbub(temp,temp_pos,m_Peak_Num);
//	//取前10个
//	for(int i=0;i<10;i++)
//	{
//		if(m_Peak_Num>10)
//		{
//			data_Peak[i]=temp[i];
//			data_Peak_pos[i]=temp_pos[i];
//		}
//		else
//		{
//			if(i<m_Peak_Num)
//			{
//				data_Peak[i]=temp[i];
//				data_Peak_pos[i]=temp_pos[i];
//			}
//			else
//			{
//				data_Peak[i]=0;
//				data_Peak_pos[i]=0;
//			}
//		}
//
//	}
//	delete [] temp_pos;
//	delete [] temp;
//}

/*冒泡法排序,从大到小,降序
	输入: Data			:待求信号
	      totalnamber	:信号长度
		  
	输出: Data		:排序后的信号
		  pos		:存放排序前的位置	
*/
void MyCalculate::Bub(double *Data,long *pos,int totalnamber)
{
	int m,k,j,i;
	double d;
	long d_pos;
	k=0;m=totalnamber-1;
	while(k<m)
	{
		j=m-1;m=0;
		for(i=k;i<=j;i++)
		{
			if(Data[i]<Data[i+1])
			{
				d=Data[i];
				Data[i]=Data[i+1];
				Data[i+1]=d;
				m=i;
				//位置互换
				d_pos=pos[i];
				pos[i]=pos[i+1];
				pos[i+1]=d_pos;
			}
		}
		j=k+1;k=0;
		for(i=m;i>=j;i--)
		{
			if(Data[i-1]<Data[i])
			{
				d=Data[i];
				Data[i]=Data[i-1];
				Data[i-1]=d;
				k=i;
				//位置互换
				d_pos=pos[i];
				pos[i]=pos[i-1];
				pos[i-1]=d_pos;
			}
		}
	}
}

/*冒泡法排序,从小到大,升序
	输入: Data			:待求信号
	      totalnamber	:信号长度
		  
	输出: Data		:排序后的信号
		  pos		:存放排序前的位置	
*/
void MyCalculate::BubUp(double *Data,long *pos,int totalnamber)
{
	int m,k,j,i;
	double d;
	long d_pos;
	k=0;m=totalnamber-1;
	while(k<m)
	{
		j=m-1;m=0;
		for(i=k;i<=j;i++)
		{
			if(Data[i]>Data[i+1])
			{
				d=Data[i];
				Data[i]=Data[i+1];
				Data[i+1]=d;
				m=i;
				//位置互换
				d_pos=pos[i];
				pos[i]=pos[i+1];
				pos[i+1]=d_pos;
			}
		}
		j=k+1;k=0;
		for(i=m;i>=j;i--)
		{
			if(Data[i-1]>Data[i])
			{
				d=Data[i];
				Data[i]=Data[i-1];
				Data[i-1]=d;
				k=i;
				//位置互换
				d_pos=pos[i];
				pos[i]=pos[i-1];
				pos[i-1]=d_pos;
			}
		}
	}
}

/*查找最大值
	输入: Data			:待求信号
	      totalnamber	:信号长度
		  
	输出: max_temp		:求得的最大值
*/
double MyCalculate::FindMax(double *Data,long totalnamber)
{  
	double max_temp=Data[0];
	for (long i=1;i<totalnamber;i++) 
	{
		if(max_temp<Data[i])
			max_temp=Data[i];
	}
    return  max_temp;
}

/*查找最小值
	输入: Data			:待求信号
	      totalnamber	:信号长度
		  
	输出: max_temp		:求得的最小值
*/
double MyCalculate::FindMin(double *Data,long totalnamber)
{
	double min_temp=Data[0];
	for (long i=1;i<totalnamber;i++) 
	{
		if(min_temp>Data[i])
			min_temp=Data[i];
	}
    return  min_temp;
}

/*求算术平均值
	输入: Data			:待求信号
	      totalnamber	:信号长度
		  
	输出: average		:求得的算术平均值
*/
double MyCalculate::GetAverage(double *Data,long totalnamber)
{
	long i;
	double sum,average;
	sum=0;
	for (i=0;i<totalnamber;i++)
	{
		sum+=Data[i];
	}
	average =sum/totalnamber;
	return average;
}

/*求均方值
	输入: Data			:待求信号
	      totalnamber	:信号长度
		  
	输出: root			:求得的均方值
*/
double MyCalculate::GetRoot(double *Data,long totalnamber)
{
	long i;
	double sum,root;
	sum=0;
	for (i=0;i<totalnamber;i++)
	{
		sum+=Data[i]*Data[i];
	}
	root =sqrt(sum/totalnamber);
	return root;
}

⌨️ 快捷键说明

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