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

📄 lvbo.~cpp

📁 脑电信号分析软件
💻 ~CPP
📖 第 1 页 / 共 2 页
字号:
 //---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include "Main.h"
#include "lvbo.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"

void DrawRect(TCanvas *ptr,int left,int top, int right,int bottom, TColor color);
void Write_line(TCanvas *ptr, int x, int y, int x1 ,int y1, TColor color);

TFilter_form *Filter_form;
//extern _EEGFile Lead[];
//---------------------------------------------------------------------------
__fastcall TFilter_form::TFilter_form(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 void DrawRect(TCanvas *ptr,int left,int top, int right,int bottom, TColor color)
{
    ptr->Brush->Color=color;
    ptr->FillRect(Rect(left,top,right,bottom));
}
//---------------------------------------------------------------------------
void Write_line(TCanvas *ptr,int x,int y, int x1,int y1, TColor color)
{
if (x==x1 && y==y1)
{
ptr->Pixels[x][y]=color;
return;
}
	 ptr->Pen->Color=color;
	 ptr->MoveTo(x,y);
	 ptr->LineTo(x1,y1);
}
 //-------------------------------------------------------------------------

 void __fastcall TFilter_form:: CoverIn(int xStart,int xEnd)    ////画imageIn窗口的背景    TMainForm::
{
    int x;
    int yPos,yNeg;

    for(x=xStart;x<=xEnd;x++)
    {
        if ((x%(4*xGrid))==0)
        {
            Image1->Canvas->Pen->Style=psSolid;
            Write_line(Image1->Canvas,x,0,x,HeightOfImage,clSilver);
        }
        else if ((x%xGrid)==0)
        {
            Image1->Canvas->Pen->Style=psDot;
            Write_line(Image1->Canvas,x,0,x,HeightOfImage,clSilver);
        }
        else
        {
            Image1->Canvas->Pen->Style=psSolid;
            Write_line(Image1->Canvas,x,0,x,HeightOfImage,clWhite);
            if ((x/3)%2==0)
            {
                for(yPos=yNeg=HeightOfImage/2;yPos>=0,yNeg<=HeightOfImage;yPos-=yGrid,yNeg+=yGrid)
                {
                    Write_line(Image1->Canvas,x,yPos,x,yPos,clSilver);
                    Write_line(Image1->Canvas,x,yNeg,x,yNeg,clSilver);
                }
            }
            else
                Write_line(Image1->Canvas,x,HeightOfImage/2,x,HeightOfImage/2,clSilver);
        }
    }
    Image1->Canvas->Pen->Style=psSolid;
}

//----------------------------------------------------------------------------------
//----------------------------------------------------------------------------------
void __fastcall TFilter_form::Gain_Filter()  //计算带通滤波器通带的平均增益
{
    double f;
    double f_Start;
    double f_End;
    double Sum=0.0;
    double a;

    f_Start=fpa;
    f_End=fpb;
    a=(f_End-f_Start)/0.1;
    for (f=f_Start;f<f_End;f+=0.1)
        Sum += sqrt(MainForm->ppEEGFilter ->MagResponse(f));  //0
    Average = Sum/(int)a;
    if (Average>1)      //对Average值进行修正,防止少算一个点
        Average=Sum/(1+(int)a);

}
 //------------------------------------------------------------------------
 //--------------------------------------------------------------------------
void __fastcall TFilter_form::DrawBackGroundGrid_Mag(int step,int q) //step 是表示画图两点间的距离,q是表示需要花多少个点
{
    int Offset_x=(Image1->Width-500)/2;
    int Offset_y=Image1->Height-220;
    int count1=0;
    int count2=0;

    Image1->Canvas->Pen->Style=psDot;
    for(int i=20;i<Image1->Height;i+=200/q)
        {
            Write_line(Image1->Canvas,Offset_x,i,Image1->Width-Offset_x,i,clSilver);
            Image1->Canvas->Brush->Style=bsClear;
            if (count1==0)
                Image1->Canvas->TextOut(0,i-5,"    0");

            else
                Image1->Canvas->TextOut(0,i-5,AnsiString(-count1*100));
            if (count1==q)  break;
            count1++;
        }
   // Image1->Canvas->TextOut(0,0,"Mag./dB");
    DrawRect(Image1->Canvas,step*fs/2+Offset_x,Image1->Height,Image1->Width,0, clMenu);
    Image1->Canvas->Brush->Style=bsClear;

    for(int j=Offset_x;j<=step*fs/2+Offset_x;j+=50*step)
        {

            Write_line(Image1->Canvas,j,0,j,Image1->Height-Offset_y,clSilver);

            if (count2==0)
                Image1->Canvas->TextOut(j,Image1->Height-Offset_y+2,"0");
            else
                Image1->Canvas-> TextOut(j-10,Image1->Height-Offset_y+2,AnsiString(count2*50));
            count2++;
        }
    Image1->Canvas-> TextOut(step*fs/2+Offset_x+2,Image1->Height-Offset_y-10,"f/Hz");
    Image1->Canvas->Pen->Style=psSolid;
}
//----------------------------------------------------------------------------
void __fastcall TFilter_form::Draw_Mag(int step,int q) //step 是表示画图两点间的距离,q是表示需要花多少个点
{
    int f_Start=1;
    int f_End=(int) fs/2;
    int ix=0;
    int Offset_x=(Image1->Width-500)/2;

    Write_line(Image1->Canvas, ix+Offset_x,20-10*log10(MainForm->ppEEGFilter ->MagResponse(1e-4))*200/(q*100),ix+step+Offset_x,20-10*log10(MainForm->ppEEGFilter ->MagResponse(1))*200/(q*100),clBlue);
    ix+=step;
    for (int f=f_Start;f<f_End-1;f++)
    {

        Write_line(Image1->Canvas,ix+Offset_x,20-10*log10(MainForm->ppEEGFilter ->MagResponse(f))*200/(q*100),ix+step+Offset_x,20-10*log10(MainForm->ppEEGFilter ->MagResponse(f+1))*200/(q*100),clBlue);
        ix+=step;
    }
}
//----------------------------------------------------------------------------
 //----------------------------------------------------------------------------
int __fastcall TFilter_form::Minimum()
{
    int f_Start=1;
    int f_End=(int) fs/2;
    int Min_Mag_dB=10*log10(MainForm->ppEEGFilter ->MagResponse(0.1));  //  1e-4
    int t;
    int quotient;

    for(int f=f_Start;f<f_End;f++)
    {
        t=10*log10(MainForm->ppEEGFilter ->MagResponse(f));
        if (t<Min_Mag_dB)
            {
                Min_Mag_dB=t;
            }
    }
    quotient=-Min_Mag_dB/100+1;
    return quotient;
}
//----------------------------------------------------------------------------

//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
//-------------------------------------------------------------------------
 
void __fastcall TFilter_form::FormCreate(TObject *Sender)
{
    int interval;
    int Number;
    int step;
    Image1->Height =300;
    Image1->Width =600;
    HeightOfImage= Image1->Height;
    xGrid=50;
    yGrid=20;
   /*  DrawRect(Image1->Canvas ,0,Image1->Height, Image1->Width  ,0, clWhite);//画背景色
       CoverIn(0,Image1->Width);//画imageIn窗口的背景
   */
        fs=Edit1->Text.ToDouble();

⌨️ 快捷键说明

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