main.~cpp
来自「脑电信号分析软件」· ~CPP 代码 · 共 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 + -
显示快捷键?