adaptivelms.txt
来自「用自适应数字滤波器进行谱线增强,噪声信号是均值为零,方差为1的高斯白噪声」· 文本 代码 · 共 89 行
TXT
89 行
double gauss(mean,sigma,s)
double mean,sigma;
long int *s;
{int i;double x,y;
double uniform();
for(x=0,i=0;i<12;i++)
x+=uniform(0.0,1.0,s);
x=x-6.0;
y=mean+x*sigma;
return(y);
}
double uniform(a,b,seed)
double a,b;
long int *seed;
{double t;
*seed=2045*(*seed)+1;
*seed=*seed-(*seed/1048576)*1048576;
t=(*seed)/1048576.0;
t=a+(b-a)*t;
return(t);
}
void lms(x,d,y,n,w,m,mu)
int m,n;
double mu,d[],x[],y[],w[];
{int i,k;
double e;
for(i=0;i<m;i++)
{w[i]=0.0;}
for(k=0;k<m;k++)
{y[k]=0.0;
for(i=0;i<=k;i++)
{y[k]+=x[k-i]*w[i];}
e=d[k]-y[k];
for(i=0;i<=k;i++)
{w[i]+=2.0*mu*e*x[k-i];}
}
for(k=m;k<n;k++)
{y[k]=0.0;
for(i=0;i<m;i++)
{y[k]+=x[k-i]*w[i];}
e=d[k]-y[k];
for(i=0;i<m;i++)
{w[i]+=2.0*mu*e*x[k-i];}
}
}
#include"stdio.h"
#include"math.h"
main()
{int i,m,n;
long seed;
double mu,pi,mean,sigma;
static double d[501],x[501],y[501],w[501];
FILE *fp;
pi=4.0*atan(1.0);
mean=0.0;
sigma=0.0;
seed=13579l;
n=500;
for(i=0;i<n;i++)
{ d[i]=sqrt(2.0)*sin(2*pi*i/20.0);
d[i]+=gauss(mean,sigma,&seed);
}
for(i=0;i<(n-1);i++)
{ x[i+1]=d[i];}
fp=fopen("lmsd.dat","w");
for(i=0;i<n;i++)
{printf("%d %lf\n",i,d[i]);}
fclose(fp);
m=20;
mu=0.0005;
lms(x,d,y,n,w,m,mu);
printf("\n The Coefficients of Adaptive Filter\n");
for(i=0;i<m;i+=4)
{printf(" %10.7f %10.7f",w[i],w[i+1]);
printf(" %10.7f %10.7f",w[i+2],w[i+3]);
printf("\n");
}
fp=fopen("lmsy.dat","w");
for(i=0;i<n;i++)
{fprintf(fp,"%d %lf\n",i,y[i]);}
fclose(fp);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?