自适应滤波用c语言编程中的问题

[复制链接]
 楼主| mh8430 发表于 2017-6-16 15:27 | 显示全部楼层 |阅读模式
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;
其中nx[i-i]是什么意思  为什么这么写
 楼主| mh8430 发表于 2017-6-16 15:44 | 显示全部楼层
主程序如下
#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;
}
dirtwillfly 发表于 2017-6-16 17:29 | 显示全部楼层
画个逻辑图看看
qd118 发表于 2017-6-16 21:29 | 显示全部楼层
应该是(i-1)吧
airwill 发表于 2017-6-17 05:58 | 显示全部楼层
这程序的算法实现一定有问题, 看了一下关于 LMS 的算法理论. 跟你的代码对不上.
重新找一找这个代码实现吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

4

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部