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

📄 fir_c.cpp

📁 使用C++Builder编写的FIR滤波程序
💻 CPP
字号:
#include <math.h>
#include <vcl.h>
#pragma hdrstop
#include "FIR_C.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
#define PI 3.1415926
#define FIRNUMBER 25
float t30sp=138.5,t30pv=130.5,t30mv=50.2;
int sincoswave[480];
int sinwave[480];
int t1;

float fHn[FIRNUMBER]={ 0.0,0.0,0.001,-0.002,-0.002,0.01,-0.009,
                       -0.018,0.049,-0.02,0.11,0.28,0.64,0.28,
                       -0.11,-0.02,0.049,-0.018,-0.009,0.01,
                       -0.002,-0.002,0.001,0.0,0.0
                     };
float fXn[FIRNUMBER]={ 0.0 };
float fInput,fOutput;
float fSignal1,fSignal2;
float fStepSignal1,fStepSignal2;
float f2PI;
int i;
float fIn[256],fOut[256];
int nIn,nOut;

TForm1 *Form1;

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)

{
nIn=0; nOut=0;
f2PI=2*PI;
fSignal1=0.0;
fSignal2=PI*0.1;
fStepSignal1=2*PI/30;
fStepSignal2=2*PI*1.4;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
fInput = InputWave();
Edit1->Text=FloatToStrF(fInput,0,4,4);
for(int i=0;i<479;i++)
    {
    sincoswave[i]=sincoswave[i+1];
    sincoswave[479]=fInput;
    }
fOutput=FIR();
Edit2->Text=FloatToStrF(fOutput,0,4,4);
for(int i=0;i<479;i++)
    {
    sinwave[i]=sinwave[i+1];
    sinwave[479]=80+fOutput;
    }
Image1->Picture->LoadFromFile("qushi.bmp");
Image1-> Canvas->Pen->Width = 1;
Image1-> Canvas->Pen->Color = clRed;
Image1->Canvas->MoveTo(0,300);
for(int i=0;i<480;i++)
    {
    Image1->Canvas->LineTo(i,300-sincoswave[i]);
    }
Image1-> Canvas->Pen->Color = clBlue;
Image1->Canvas->MoveTo(0,300);
for(int i=0;i<480;i++)
    {
    Image1->Canvas->LineTo(i,300-sinwave[i]);
    }

}

//-----------------------------------------------------------
float TForm1::InputWave()
{
//fXn[0]=120+50*sin(t1*5*3.1415/360);
//t1++;

for ( i=FIRNUMBER-1;i>0;i-- ) fXn[i]=fXn[i-1];
fXn[0]=100+25*(sin(fSignal1)+cos(fSignal2)/6.0);
fSignal1+=fStepSignal1;
if ( fSignal1>=f2PI )  fSignal1-=f2PI;
fSignal2+=fStepSignal2;
if ( fSignal2>=f2PI )  fSignal2-=f2PI;

return(fXn[0]);
}

//-----------------------------------------------------------
float TForm1::FIR()
{
float fSum;
fSum=0;
for ( i=0;i<FIRNUMBER;i++ )
	{
    fSum+=(fXn[i]*fHn[i]);
	}
return(fSum);
}


void __fastcall TForm1::Button5Click(TObject *Sender)
{
if (Edit15->Text=="135246")
Close();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button6Click(TObject *Sender)
{
if(Timer1->Enabled==true)
    {
    Timer1->Enabled=false ;
    Button6->Caption="Start" ;
    }
    else
        {
        Timer1->Enabled=true ;
        Button6->Caption="Stop" ;
        }
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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