firlms.c

来自「该源码是自适应滤波器算法(基于LMS自适应算法)的实现例子」· C语言 代码 · 共 59 行

C
59
字号
/////////////////////////////////////////////////
//  Example For ICETEK-VC5416-EDU              //
//          CTR Version : V4                   //
//  Filename: FirLms.c                         //
//  Project : FirLms.pjt                       //
//  Version : 2.00                             //
//  Write by: Daniel Hawk                      //
//  Company : Realtimedsp Co.Ltd.              //
//                                             //
//  All Rights opened & no Onus  2005.06       //
/////////////////////////////////////////////////
#include"math.h"

#define PI 3.1415926
#define COEFFNUMBER 16
#define INPUTNUMBER 1024

int FIRLMS(int *nx,float *nh,int nError,int nCoeffNumber);

float h[COEFFNUMBER],fU;
int xx[INPUTNUMBER],rr[INPUTNUMBER],wc[INPUTNUMBER];

main()
{
	int i,nLastOutput;
	
	nLastOutput=0;
	fU=0.0005;
	for ( i=0;i<COEFFNUMBER;i++ )	h[i]=0;
	for ( i=0;i<INPUTNUMBER;i++ )
	{
		xx[i]=256*sin(i*2*PI/34);
		rr[i]=wc[i]=0;
	}
	for ( i=COEFFNUMBER+1;i<INPUTNUMBER;i++ )
	{
		nLastOutput=FIRLMS(xx+i,h,nLastOutput-xx[i-1],COEFFNUMBER);	// break point
		rr[i]=nLastOutput;
		wc[i]=rr[i]-xx[i];
	}
	exit(0);
}

int FIRLMS(int *nx,float *nh,int nError,int nCoeffNumber)
{
	int i,r;
	float fWork;
	
	r=0;
	for ( i=0;i<nCoeffNumber;i++ )
	{
		fWork=nx[i]*nError*fU;
		nh[i]+=fWork;
		r+=(nx[i-i]*nh[i]);
	}
	r/=128;
	return r;
}

⌨️ 快捷键说明

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