📄 exp8a.c
字号:
/*
exp8a.c - Experiment 8A
System identification using LMS adaptive filter
*/
#include "LP_coef.dat"
#define N0 48 /* Adaptive filter order */
#define N1 48 /* Unknown filter order */
#define Ns 128 /* Number of input signal */
#define TWOMU 0x1000 // ; 2*MU
#pragma CODE_SECTION(main, "lms_code");
#pragma DATA_SECTION(fir_index, "lms_data");
#pragma DATA_SECTION(sys_index, "lms_data");
#pragma DATA_SECTION(w, "lms_coef");
#pragma DATA_SECTION(d_sys, "lms_data");
#pragma DATA_SECTION(d_fir, "lms_data");
#pragma DATA_SECTION(in, "lms_in");
#pragma DATA_SECTION(d, "lms_out");
//extern unsigned int fir_filt();
//extern unsigned int adaptive();
extern void init(int *, unsigned int);
extern void random(int *, unsigned int);
int w[N0], /* Adaptive filter coefficients */
d_sys[N0], /* Adaptive filter delayed sample buffer */
d_fir[N1], /* Unknown system delayed sample buffer */
in[Ns], /* Input sample buffer */
d[Ns]; /* Unknown system output buffer */
unsigned int fir_index,sys_index;
void main()
{ int d,y,e,uen,j,i;
init(w,N0); /* Initialize adaptive filter coefficients */
init(d_sys,N0); /* Initialize adaptive filter delay-line */
init(d_fir,N1); /* Initialize unknown filter delay-line */
fir_index=0; /* Init the unknown filter delay-line index */
sys_index=0; /* Init the adaptive filter delay-line index */
for (;;) /* Generate samples to both filter and */
{ /* identify unknown system */
random(in,Ns);
for(i=0;i<Ns;i++)
{
d_fir[0]=in[i]; // get signal data
d=0;
for(j=0;j<N1;j++)
d+=_smpy(LP_coef[j],d_fir[j]); // compute d(n)
for(j=N1-1;j>0;j--)
d_fir[j]=d_fir[j-1]; // update signal buffer of unknown system
d_sys[0]=in[i];
y=0;
for(j=0;j<N0;j++)
y+= _smpy(w[j] , d_sys[j]) ;
e= d-y;
uen= _smpy(TWOMU , e);
for(j=0;j<N0;j++)
w[j]+=_smpy(uen,d_sys[j]);
for(j=N0-1;j>0;j--)
d_sys[j]=d_sys[j-1];
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -