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

📄 exp8a.c

📁 在TI的CCS环境下用C语言编写的lms算法,已经通过测试
💻 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 + -