📄 main.h
字号:
//---------------------------------------------------------------------------
#ifndef MainH
#define MainH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Buttons.hpp>
#include <ComCtrls.hpp>
#include <ExtCtrls.hpp>
#include <Grids.hpp>
#include "math.h"
#include "YecTypeClass.h"
#include "YeMath.h"
float Uniform(float a, float b, long int *seed) //产生(a,b)区间上均匀分布的随机数
{
//a, b分别为给定区间的上下限, seed为随机数的种子
float t;
*seed=2045*(*seed)+1;
*seed=*seed-(*seed/1048576)*1048576;
t=(float)(*seed/1048576.0);
t=a+(b-a)*t;
return(t);
}
float Gauss(float mean, float sigma, long int *seed) //产生正态分布的随机数
{
//mean: 正态分布的均值 sigma: 正态分布的均方差 *s: 随机数的种子
int i;
float x,y;
for(x=0,i=0;i<12;i++)
x+=Uniform(0.0,1.0,seed);
x=(float)(x-6.0);
y=mean+x*sigma;
return(y);
}
class TSignal : public System::TObject
{
protected:
int Length; //数据长度
public:
int ID; //信号类型
bool Selected; //通道是否选中
float Speed; //采样频率
float *Data; //浮点数
__fastcall TSignal(){Selected=true;Length=1024;Speed=1000;Data=new float[Length];};
virtual __fastcall~TSignal(void){delete []Data;Data=NULL;};
virtual void __fastcall GetData(){};
void SetLength(int length)
{
delete []Data;
Data=NULL;
Length=length;
Data=new float[length];
};
};
class TSinSignal :public TSignal
{
public:
float Amp;
float Freq;
float Phase; //度数
float Ratio; //阻尼
__fastcall TSinSignal(){ID=0;Amp=1000.0;Freq=10.0;Phase=0.0;Ratio=0.0;};
virtual void __fastcall GetData()
{
for (int i=0;i<Length;i++)
Data[i]=Amp*sin(6.2832*Freq*float(i)/Speed+Phase*3.1416/180.0)/exp(i*Ratio/1000.0);
};
};
class TRectSignal :public TSignal
{
public:
float Amp;
float Freq;
float Ratio;
float Phase;
__fastcall TRectSignal(){ID=1;Amp=1000.0;Freq=10.0;Ratio=50;Phase=0.0;};
void __fastcall GetData()
{
float amp,temp;
for (int i=0;i<Length;i++)
{
if(Ratio <= 50) //幅度值为正
{
amp = sin(3.1416 * (1.0 - 2.0 * Ratio / 100.0) / 2.0);
Data[i] = Amp * (sin(6.2832 * Freq * float(i)/Speed + Phase * 3.1416 / 180.0) > amp ? 1 : -1);
}
else
{
amp = sin(3.1416 * (3.0 - 2.0 * Ratio / 100.0) / 2.0);
Data[i] = Amp * (sin(6.2832 * Freq *float(i)/Speed + Phase * 3.1416 / 180.0) < amp ? 1 : -1);
}
}
};
};
class TTriSignal :public TSignal
{
public:
float Amp;
float Freq;
float Phase;
__fastcall TTriSignal(){ID=2;Amp=1000.0;Freq=10.0;Phase=0.0;};
virtual void __fastcall GetData()
{
for (int i=0;i<Length;i++)
{
Data[i]=Amp * asin(sin(6.2832 * Freq * float(i)/Speed + Phase * 3.1416 / 180.0)) / 1.5708;
}
};
};
class TScanSignal :public TSignal
{
public:
float Amp;
float StartFreq;
float StopFreq;
float ScanTime;
int ScanMode;
__fastcall TScanSignal(){ID=3;Amp=1000.0;StartFreq=10.0;StopFreq=60.0;ScanTime=1.0;ScanMode=0;};
virtual void __fastcall GetData()
{
int n;float temp,curf;
for (int i=0;i<Length;i++)
{
if(ScanMode == 1) //对数扫频
{
n = int((float(i)/Speed - ScanTime) / ScanTime) + 1;
curf = StartFreq + (StopFreq - StartFreq) * log10((float(i)/Speed - ScanTime * n) * 10.0 / ScanTime);
Data[i] = Amp* sin(6.2832 * curf * (float(i)/Speed - ScanTime * n));
}
else //线性扫频
{
n = int((float(i)/Speed - ScanTime) / ScanTime) + 1;
curf = StartFreq + (StopFreq - StartFreq) * (float(i)/Speed - ScanTime * n) / ScanTime;
Data[i] = Amp * sin(6.2832 * curf * (float(i)/Speed - ScanTime * n));
}
}
};
};
class TNoiseSignal :public TSignal
{
public:
float Amp;
float FangCha;
__fastcall TNoiseSignal(){ID=5;Amp=0.0;FangCha=1.0;};
virtual void __fastcall GetData()
{
randomize();
long int seed=rand();
//产生长度为Length的Gauss白噪声
float tang=1.0;
for(int i=0; i<Length; i++)
Data[i]=Gauss(Amp, FangCha,&seed);
};
};
class TAmSignal :public TSignal
{
public:
float Amp;
float CarrierFreq;
float SignalFreq;
__fastcall TAmSignal(){ID=4;Amp=1000.0;CarrierFreq=100;SignalFreq=10.0;};
virtual void __fastcall GetData()
{
for (int i=0;i<Length;i++)
{
Data[i]=Amp*(sin(6.2832 *CarrierFreq * float(i)/Speed) + sin(6.2832 * CarrierFreq *float(i)/Speed) * sin(6.2832 * SignalFreq * float(i)/Speed));
}
};
};
class TPulseSignal:public TSignal
{
public:
float Amp;
float PulseWidth;
int Type; //0-半正弦脉冲 1后锯齿脉冲 2梯形脉冲
__fastcall TPulseSignal(){ID=6;Amp=1000.0;PulseWidth=100.0;Type=0;}; //脉冲宽度为5mS
virtual void __fastcall GetData()
{
int d=PulseWidth*Speed/1000.0; //信号点数0.003*100000=300点
int startpoint=d*0.4; //信号起始点,其它为0
float f=500.0/PulseWidth; //信号频率100Hz
for (int i=0;i<Length;i++)
Data[i]=0.0;
if (d>Length)
{
ShowMessage("请加长脉冲信号数据的长度!!!");
return;
}
if (Type==0)
{
for (int i=0;i<d;i++)
{
Data[i+startpoint]=Amp*sin(6.2832*f*float(i)/Speed);
}
}
else if (Type==1)
{
for (int i=0;i<d;i++)
{
Data[i+startpoint]=float(i)*Amp/float(d);
}
}
else if (Type==2) //梯形脉冲 0.1 0.8 0.1
{
int firstpoint=0.1*d;
int secondpoint=0.9*d;
for (int i=0;i<firstpoint;i++)
{
Data[i+startpoint]=float(i+1)*Amp*10.0/float(d);
}
for (int i=firstpoint;i<=secondpoint;i++)
{
Data[i+startpoint]=Amp;
}
for (int i=0;i<firstpoint;i++)
{
Data[i+startpoint+secondpoint]=Amp-float(i+1)*Amp*10.0/float(d);
}
}
float mydata[1024];
memcpy(mydata,Data,1024*4);
int m=1;
};
};
class TNarrowNoiseSignal:public TSignal //窄带随机
{
public:
float Amp;
float FangCha;
float StartFreq;
float StopFreq;
__fastcall TNarrowNoiseSignal(){ID=7;Amp=0.0;FangCha=1;StartFreq=100.0;StopFreq=200.0;};
virtual void __fastcall GetData()
{
int i;
float *data=new float[Length];
//先产生随机信号
randomize();
long int seed=rand();
float tang=1.0;
for(i=0; i<Length; i++)
data[i]=Gauss(Amp, FangCha,&seed);
//再进行数字滤波
float a[200],b[200];
float px[500],py[500];
for (i=0;i<500;i++) {px[i]=0.0;py[i]=0.0;}
if (StopFreq>=float(Speed)/2.0) StopFreq=Speed/2.0;
if (StartFreq>=Speed/2.0) StartFreq=Speed/2.0;
if (StartFreq>StopFreq)
{
float temp=StartFreq;StartFreq=StopFreq;StopFreq=temp;
}
iirbcf(0,2,5,4,0.0,StartFreq/Speed,StopFreq/Speed,0.0,3.0,b,a);
filterp(b,a,5,4,data,Data,Length,px,py);
};
};
//----------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TGroupBox *GrbSignal;
TGroupBox *GrbSavePara;
TLabel *Label21;
TEdit *EdtSavePath;
TButton *Button3;
TLabel *Label22;
TEdit *EdtSaveName;
TLabel *Label23;
TComboBox *CmbTestNo;
TGroupBox *GroupBox1;
TComboBox *CmbMaxChannel;
TLabel *Label18;
TLabel *Label17;
TEdit *EdtLength;
TEdit *EdtSpeed;
TLabel *Label1;
TLabel *Label19;
TLabel *Label20;
TBitBtn *BitBtn2;
TBitBtn *BitBtn3;
TPageControl *PgcType;
TTabSheet *TbsSin;
TLabel *Label5;
TLabel *Label6;
TLabel *Label7;
TLabel *Label28;
TEdit *TxtSinPhase;
TEdit *TxtSinAmp;
TEdit *TxtSinFreq;
TTabSheet *TbsRect;
TLabel *Label2;
TLabel *Label4;
TLabel *Label10;
TLabel *Label27;
TEdit *TxtRectAmp;
TEdit *TxtRectFreq;
TEdit *TxtRectRatio;
TEdit *TxtRectPhase;
TTabSheet *TabSheet1;
TLabel *Label3;
TLabel *Label8;
TLabel *Label9;
TLabel *Label24;
TEdit *TxtTriAmp;
TEdit *TxtTriFreq;
TEdit *TxtTriPhase;
TTabSheet *TabSheet3;
TLabel *Label11;
TLabel *Label12;
TLabel *Label14;
TLabel *Label26;
TEdit *TxtScanAmp;
TEdit *TxtScanStartFreq;
TEdit *TxtScanTime;
TEdit *TxtScanStopFreq;
TRadioGroup *RdgScanMode;
TTabSheet *TabSheet2;
TLabel *Label13;
TLabel *Label15;
TLabel *Label16;
TLabel *Label25;
TEdit *TxtAmAmp;
TEdit *TxtAmCarrierFreq;
TEdit *TxtAmSignalFreq;
TTabSheet *TabSheet4;
TLabel *Label29;
TLabel *Label30;
TEdit *TxtNoiseAmp;
TLabel *Label31;
TEdit *TxtNoiseFangCha;
TTabSheet *TabSheet5;
TLabel *Label32;
TLabel *Label33;
TEdit *TxtPulseAmp;
TLabel *Label34;
TEdit *TxtPulseWidth;
TLabel *Label35;
TComboBox *CmbPulseType;
TLabel *Label36;
TEdit *TxtSinRatio;
TLabel *Label37;
TTabSheet *TabSheet6;
TLabel *Label38;
TLabel *Label40;
TEdit *TxtNarrowNoiseStartFreq;
TLabel *Label41;
TEdit *TxtNarrowNoiseStopFreq;
TLabel *Label39;
TEdit *TxtNarrowNoiseAmp;
TLabel *Label42;
TEdit *TxtNarrowNoiseFangCha;
void __fastcall CmbMaxChannelChange(TObject *Sender);
void __fastcall BitBtn3Click(TObject *Sender);
void __fastcall Button3Click(TObject *Sender);
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
private: // User declarations
void __fastcall ChTypeChange(TObject *Sender);
void __fastcall Update(int chan,int type);
void __fastcall ChTypeEnter(TObject *Sender);
public: // User declarations
TLabel *ChLabel[16];
TComboBox *ChType[16];
TList *SignalList;
int CurSetChan; //当前设置的通道序号
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -