firlms.c

来自「ICETEK-LF2407-A板和教学实验箱使用说明书及开发板的所有实验例程」· C语言 代码 · 共 71 行

C
71
字号
#include "2407c.h"
#include"math.h"

#define PI 3.1415926
#define COEFFNUMBER 16
#define INPUTNUMBER 1024
int uWork;
int FIRLMS(int *nx,float *nh,int nError,int nCoeffNumber);

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


void ICETEKLF2407AInit()
{
	asm(" setc INTM");
	(*PIRQR0)=0;
	uWork=(*WSGR);
	uWork&=0x0fe49;
	(*WSGR)=uWork;
	*WDCR=0x6f;
	*WDKEY=0x5555;
	*WDKEY=0xaaaa;    
	*SCSR1=0x81fe;    //40m      
	(*MCRB)&=0x0ffbf;	/* CANTX/IOPC6 for normal I/O port ,sound*/
	uWork=(*MCRC);
	uWork&=0x0ffbf;	/* PWM12/IOPE6 for normal I/O port ,led*/
	uWork&=0x0efdf;	/* PWM11/IOPE5,TDIR2/IOPF4 for normal I/O ports */
	(*MCRC)=uWork;
	*T1CON   = 0x1300;
	*IFR=0xffff;
	*IMR=0;
}

main()
{
	int i,nLastOutput;
	ICETEKLF2407AInit();
	nLastOutput=0;
	fU=0.0003;
	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 + -
显示快捷键?