📄 lvbo.~cpp
字号:
//---------------------------------------------------------------------------
#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 + -