📄 mycalculate.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 + -