📄 firlms.c
字号:
#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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -