main.cpp

来自「脑电信号分析软件」· C++ 代码 · 共 967 行 · 第 1/3 页

CPP
967
字号
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "log.h"
#include "Main.h"
#include "new.h"
#include "About.h"
#include "eegwave.h"
#include "Passlg.h"
#include "lvbo.h"  ////滤波器设计窗体声明
#include "ComPower.h"
#include "Torog.h"
#include <math.h>
#include "Retrieve.h"
#include "dangan.h"
#include "print.h"
#define FFTPOINT    512
//#define M_PI  4.0*atan(1.0)
 //---------------------------------------------------------------------------
#pragma resource "*.dfm"
TMainForm *MainForm;

 void Write_line(TCanvas *ptr, int x, int y, int x1 ,int y1, TColor color);
//---------------------------------------------------------------------------

__fastcall TMainForm::TMainForm(TComponent *Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
 void Write_line(TCanvas *ptr,int x,int y, int x1,int y1, TColor color)
{
	 ptr->Pen->Color=color;
	 ptr->MoveTo(x,y);
	 ptr->LineTo(x1,y1);
}
//---------------------------------------------------------------------------
///--------------------------------------------------------------------------
void FFTInit(double wx[],double wy[])   //初始化加权向量
{
	int i;
	double factr, angle;
	factr = 2.0 * M_PI / (double)FFTPOINT;

	for (i = 0;i < FFTPOINT;i++)
	{
		angle = (double)i * factr;
		wx[i] = cos(angle);
		wy[i] = sin(angle);
	}
}
int bitr(int k, int logn)
{
	short int ans = 0;
	short int j = k;

	for (short int i = 0;i < logn;i++)
	{
		ans = (ans << 1) + (j & 1);
		j = j >> 1;
	}
	return (ans);
}
void fft(double datax[],double datay[],double wx[],double wy[],int length)
{  // FFT运算函数,入口DATAX,DATAY,WX,WY  出口DATAX,DATAY
	short int n1, logn, i, j, k, l, logl, p;
	float sx, sy, tx, ty;   //   complex
	logn = 9;//10;
	n1 = length >> 1;
	j = logn - 1;
	k = 0;
	//------ transform

	for (logl = 0;logl < logn;logl++)
	{
		do
		{
			for (i = 0;i < n1;i++)
			{
				p = bitr((k >> j), logn);
				l = k + n1;
				//---------- conj
				sx = wx[p];
				sy = -wy[p];
				//---------- multiply
				tx = sx * datax[l] - sy * datay[l];
				ty = sx * datay[l] + sy * datax[l];
				//---------- sub
				datax[l] = datax[k] - tx;
				datay[l] = datay[k] - ty;
				//---------- add
				datax[k] = tx + datax[k];
				datay[k] = ty + datay[k];
				k++;
			} // dofor i

			k += n1;
            if(n1 == 0) break;   //////////////////////////////////////
		}
		while (k < length);

		k = 0;

		j--;

		n1 = n1 >> 1;
        if(n1 == 0) break;   /////////////////////////////////
	}
	//-------- reorder
	for (i = 1;i < length;i++)
	{
		k = bitr(i, logn);

		if (i > k)
		{
			//-------- exchange i,k elements
			sx = datax[i];
			sy = datay[i];
			datax[i] = datax[k];
			datay[i] = datay[k];
			datax[k] = sx;
			datay[k] = sy;
		}
	}
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
double MagFFT(double datax[],double datay[],int Num1,int Num2)
{    int i;
     double  sum;
     double Mag[512];
     double RealData,ImagData;
     sum=0;
    for (i=Num1;i<Num2;i++)
    {
       RealData = (datax[i])*(datax[i]) ;
       ImagData=  (datay[i])*(datay[i]);
       Mag[i]= ((RealData+ImagData))/(Num2-Num1+1);
       Mag[i]=log10(Mag[i]);
       sum=sum+Mag[i];
    }
    sum=sum/(Num2-Num1+1);
    return sum;
}
///--------------------------------------------------------------------------
///--------------------------------------------------------------------------
void __fastcall TMainForm::FileNew1Execute(TObject *Sender)
{
   //CreateMDIChild("NONAME" + IntToStr(MDIChildCount + 1));
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::FileOpen1Execute(TObject *Sender)
{// int iFileHandle,iFileLength;
  int n,m;
	if (OpenDialog->Execute())
    {
      try
        {iFileHandle = FileOpen(OpenDialog->FileName, fmOpenRead);
         iFileLength = FileRead(iFileHandle,(char*)file,sizeof(file));
         FileClose(iFileHandle);
         }
      catch(...)
      {
      Application->MessageBox("打开文件时发生错误!", "错误", IDOK);
       }

     }
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::HelpAbout1Execute(TObject *Sender)
{
 	AboutBox->Show();
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::FileExit1Execute(TObject *Sender)
{
	Close();
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::FormCloseQuery(TObject *Sender, bool &CanClose)
{
 int value;
 value=Application->MessageBox("您确定要关闭此窗口吗?","退出提示",4);
   if(value==7)
        {
          CanClose=false;
        }
   else
        {
           CanClose=true;
           Play_id= false;
        }
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::FormCreate(TObject *Sender)
{
  int p,q;
  i=0;
  Play_id= false;
  Timer1->Enabled =true;
  m=0;
  l=0;  //表示每次刷新的步长
  Roll_state=false; //滚屏显示设置
  Page=960;
  Panel2->Visible =false;
  Panel2->Enabled =true;
  Fast=false;  //使显示速度加快状态变量
  Normal=false;  //正常显示装填变量
  Amplify=32;
  amp=0.6;  //图像放大,缩小倍数
  Analisys=1;  //用于鼠标分析时的状态改变切换

  Image_eeg->Top =0;
  Image_eeg->Height=620;
  Timer1->Interval =5;
  PaintBox1->Height =640;
  PaintBox1->Width =970;
  PaintBox1_Height=PaintBox1->Height-20;
  Label12->Width =12;
  Label13->Width =12;
  Label14->Width =12;
  Label15->Width =12;

/*    for(p=0;p<1000;p++)
        {
         for(q=0;q<16;q++)
                {
                bufarray[p*16+q]=file[p].Lead[q];
                }
        }
  buf=&bufarray[0];
*/
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
               //扫屏显示图像
void __fastcall TMainForm::Timer1Timer(TObject *Sender)
{
         if (Play_id== true )
         {
            Panel2->Visible =true;
            Panel2->Left=i+27;
            PaintBox1->Canvas->Pen->Color=clBlack;
            PaintBox1->Canvas->MoveTo(i,file[i+m*Page].Lead[0]*0.05*amp + (PaintBox1->Height-20)/Amplify+5);
            PaintBox1->Canvas->LineTo(i+1,file[i+1+m*Page].Lead[0]*0.05*amp + (PaintBox1->Height-20)/Amplify+5 );
            PaintBox1->Canvas->MoveTo(i,file[i+m*Page].Lead[1]*0.05*amp + 3*(PaintBox1->Height-20)/Amplify+5);
            PaintBox1->Canvas->LineTo(i+1,file[i+1+m*Page].Lead[1]*0.05*amp + 3*(PaintBox1->Height-20)/Amplify+5 );
            PaintBox1->Canvas->MoveTo(i,file[i+m*Page].Lead[2]*0.05*amp + 5*(PaintBox1->Height-20)/Amplify+5);
            PaintBox1->Canvas->LineTo(i+1,file[i+1+m*Page].Lead[2]*0.05*amp + 5*(PaintBox1->Height-20)/Amplify +5);
            PaintBox1->Canvas->MoveTo(i,file[i+m*Page].Lead[3]*0.05*amp + 7*(PaintBox1->Height-20)/Amplify+5);
            PaintBox1->Canvas->LineTo(i+1,file[i+1+m*Page].Lead[3]*0.05*amp + 7*(PaintBox1->Height-20)/Amplify+5);
                if((file[i+m*Page].Lead[4]*0.05*amp + 9*(PaintBox1->Height-20)/Amplify+5<=PaintBox1_Height)&(file[i+1+m*Page].Lead[4]*0.05*amp + 9*(PaintBox1->Height-20)/Amplify+5<=PaintBox1_Height))
                {//第5导
                PaintBox1->Canvas->Pen->Color=clBlue;//就是变成蓝色
                PaintBox1->Canvas->MoveTo(i,file[i+m*Page].Lead[4]*0.05*amp + 9*(PaintBox1->Height-20)/Amplify+5);
                PaintBox1->Canvas->LineTo(i+1,file[i+1+m*Page].Lead[4]*0.05*amp + 9*(PaintBox1->Height-20)/Amplify +5);
                }
                if((file[i+m*Page].Lead[5]*0.05*amp + 11*(PaintBox1->Height-20)/Amplify+5<=PaintBox1_Height)&(file[i+1+m*Page].Lead[5]*0.05*amp + 11*(PaintBox1->Height-20)/Amplify+5<=PaintBox1_Height))
                { //第6导
                PaintBox1->Canvas->Pen->Color=clBlue;
                PaintBox1->Canvas->MoveTo(i,file[i+m*Page].Lead[5]*0.05*amp + 11*(PaintBox1->Height-20)/Amplify+5);
                PaintBox1->Canvas->LineTo(i+1,file[i+1+m*Page].Lead[5]*0.05*amp + 11*(PaintBox1->Height-20)/Amplify +5);
                }
                if((file[i+m*Page].Lead[6]*0.05*amp + 13*(PaintBox1->Height-20)/Amplify+5<=PaintBox1_Height)&(file[i+1+m*Page].Lead[6]*0.05*amp + 13*(PaintBox1->Height-20)/Amplify+5<=PaintBox1_Height))
                { //第7导
                PaintBox1->Canvas->Pen->Color=clBlue;
                PaintBox1->Canvas->MoveTo(i,file[i+m*Page].Lead[6]*0.05*amp + 13*(PaintBox1->Height-20)/Amplify+5);
                PaintBox1->Canvas->LineTo(i+1,file[i+1+m*Page].Lead[6]*0.05*amp + 13*(PaintBox1->Height-20)/Amplify+5 );
                }
                if((file[i+m*Page].Lead[7]*0.05*amp + 15*(PaintBox1->Height-20)/Amplify+5<=PaintBox1_Height)&(file[i+1+m*Page].Lead[7]*0.05*amp + 15*(PaintBox1->Height-20)/Amplify+5<=PaintBox1_Height))
                {  //第8导
                PaintBox1->Canvas->Pen->Color=clBlue;
                PaintBox1->Canvas->MoveTo(i,file[i+m*Page].Lead[7]*0.05*amp + 15*(PaintBox1->Height-20)/Amplify+5);
                PaintBox1->Canvas->LineTo(i+1,file[i+1+m*Page].Lead[7]*0.05*amp + 15*(PaintBox1->Height-20)/Amplify+5);
                }
                if((file[i+m*Page].Lead[8]*0.05*amp + 17*(PaintBox1->Height-20)/Amplify+5<=PaintBox1_Height)&(file[i+1+m*Page].Lead[8]*0.05*amp + 17*(PaintBox1->Height-20)/Amplify+5<=PaintBox1_Height))
                { //第9导
                PaintBox1->Canvas->Pen->Color=clBlack;
                PaintBox1->Canvas->MoveTo(i,file[i+m*Page].Lead[8]*0.05*amp + 17*(PaintBox1->Height-20)/Amplify+5);
                PaintBox1->Canvas->LineTo(i+1,file[i+1+m*Page].Lead[8]*0.05*amp + 17*(PaintBox1->Height-20)/Amplify+5 );
                }
                if((file[i+m*Page].Lead[9]*0.05*amp + 19*(PaintBox1->Height-20)/Amplify+5<=PaintBox1_Height)&(file[i+1+m*Page].Lead[9]*0.05*amp + 19*(PaintBox1->Height-20)/Amplify+5<=PaintBox1_Height))
                { //第10导
                PaintBox1->Canvas->Pen->Color=clBlack;
                PaintBox1->Canvas->MoveTo(i,file[i+m*Page].Lead[9]*0.05*amp + 19*(PaintBox1->Height-20)/Amplify+5);
                PaintBox1->Canvas->LineTo(i+1,file[i+1+m*Page].Lead[9]*0.05*amp + 19*(PaintBox1->Height-20)/Amplify+5 );
                 }
                if((file[i+m*Page].Lead[10]*0.05*amp + 21*(PaintBox1->Height-20)/Amplify+5<=PaintBox1_Height)&(file[i+1+m*Page].Lead[10]*0.05*amp + 21*(PaintBox1->Height-20)/Amplify+5<=PaintBox1_Height))
                { //第11导
                PaintBox1->Canvas->Pen->Color=clBlack;
                PaintBox1->Canvas->MoveTo(i,file[i+m*Page].Lead[10]*0.05*amp + 21*(PaintBox1->Height-20)/Amplify+5);
                PaintBox1->Canvas->LineTo(i+1,file[i+1+m*Page].Lead[10]*0.05*amp + 21*(PaintBox1->Height-20)/Amplify+5 );
                }
                if((file[i+m*Page].Lead[11]*0.05*amp + 23*(PaintBox1->Height-20)/Amplify+5<=PaintBox1_Height)&(file[i+1+m*Page].Lead[11]*0.05*amp + 23*(PaintBox1->Height-20)/Amplify+5<=PaintBox1_Height))
                {//第12导
                PaintBox1->Canvas->Pen->Color=clBlack;
                PaintBox1->Canvas->MoveTo(i,file[i+m*Page].Lead[11]*0.05*amp + 23*(PaintBox1->Height-20)/Amplify+5);
                PaintBox1->Canvas->LineTo(i+1,file[i+1+m*Page].Lead[11]*0.05*amp + 23*(PaintBox1->Height-20)/Amplify+5);
                }
                if((file[i+m*Page].Lead[12]*0.05*amp + 25*(PaintBox1->Height-20)/Amplify+5<=PaintBox1_Height)&(file[i+1+m*Page].Lead[12]*0.05*amp + 25*(PaintBox1->Height-20)/Amplify+5<=PaintBox1_Height))
                { //第13导
                PaintBox1->Canvas->Pen->Color=clBlue;
                PaintBox1->Canvas->MoveTo(i,file[i+m*Page].Lead[12]*0.05*amp + 25*(PaintBox1->Height-20)/Amplify+5);
                PaintBox1->Canvas->LineTo(i+1,file[i+1+m*Page].Lead[12]*0.05*amp + 25*(PaintBox1->Height-20)/Amplify +5);
                }
                if((file[i+m*Page].Lead[13]*0.05*amp + 27*(PaintBox1->Height-20)/Amplify+5<=PaintBox1_Height)&(file[i+1+m*Page].Lead[13]*0.05*amp + 27*(PaintBox1->Height-20)/Amplify+5<=PaintBox1_Height))
                { //第14导
                PaintBox1->Canvas->Pen->Color=clBlue;
                PaintBox1->Canvas->MoveTo(i,file[i+m*Page].Lead[13]*0.05*amp + 27*(PaintBox1->Height-20)/Amplify+5);
                PaintBox1->Canvas->LineTo(i+1,file[i+1+m*Page].Lead[13]*0.05*amp + 27*(PaintBox1->Height-20)/Amplify+5 );
                }
               if ((file[i+m*Page].Lead[14]*0.05*amp + 29*(PaintBox1->Height-20)/Amplify+5<=PaintBox1_Height)&(file[i+1+m*Page].Lead[14]*0.05*amp + 29*(PaintBox1->Height-20)/Amplify+5<=PaintBox1_Height))
                {  //第15导
                PaintBox1->Canvas->Pen->Color=clBlue;
                PaintBox1->Canvas->MoveTo(i,file[i+m*Page].Lead[14]*0.05*amp + 29*(PaintBox1->Height-20)/Amplify+5);
                PaintBox1->Canvas->LineTo(i+1,file[i+1+m*Page].Lead[14]*0.05*amp + 29*(PaintBox1->Height-20)/Amplify+5 );
                }
               if ((file[i+m*Page].Lead[15]*0.05*amp + 31*(PaintBox1->Height-20)/Amplify+5<=PaintBox1_Height)&(file[i+1+m*Page].Lead[15]*0.05*amp + 31*(PaintBox1->Height-20)/Amplify+5<=PaintBox1_Height))
                {  //第16导
                PaintBox1->Canvas->Pen->Color=clBlue;
                PaintBox1->Canvas->MoveTo(i,file[i+m*Page].Lead[15]*0.05*amp + 31*(PaintBox1->Height-20)/Amplify+5);
                PaintBox1->Canvas->LineTo(i+1,file[i+1+m*Page].Lead[15]*0.05*amp + 31*(PaintBox1->Height-20)/Amplify+5);

⌨️ 快捷键说明

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