?? adapt_filter.cpp
字號:
#include <stdio.h>
#include <math.h>
#include <dos.h>
#define N 100 //濾波器長度
#define M 1 //延時
#define w0 0
#define npt M+N
#define SF 2048 //采樣點數
#define mu 0.0004
#define factor 100000 //放大因子
double lmsflt(double w[],float x[],float dk)
{
int i;
double uek,yk,ek;
yk=0;
for(i=0;i<N;++i)
{
yk=yk+w[i]*x[i];
}
//printf("%12.9lf\n",yk);
ek=x[0]-yk;
uek=2*mu*ek;
for(i=0;i<N;i++)
{
w[i]=w[i]+uek*x[i];
}
// printf("%12.7f\n",yk);
return(w[0]);
}
void initlms(float x[],float d[],double w[])
{
long i;
for(i=0;i<=npt;++i)
{
x[i]=0;
d[i]=0;
w[i]=w0;
}
}
void update_data_buffers(float dk,float x[],float d[])
{
long j,k;
for(j=1;j<N;++j)
{
k=N-j;
x[k]=x[k-1];
}
x[0]=dk;
if(M>0)
x[0]=d[M-1];
for(j=1;j<N;++j)
{
k=N-j;
d[k]=d[k-1];
}
d[0]=dk;
//printf("%f\n",d[1]);
}
int main()
{
float x[npt],d[npt],dk,ek;
double w[npt];
FILE *in,*out;
float yk,yk1;
//initfiles();
in=fopen("sinwn1.dat","r+");
if((out=fopen("dout.dat","w"))==NULL)
{
printf("打不開\n"); //
}
else
{
printf("打開了\n");
}
initlms(x,d,w);
while(fscanf(in,"%f",&dk)!=EOF)
{
printf("%12.9lf ",dk);
dk=dk/SF;
update_data_buffers(dk,x,d);
//printf("%f ",d[2]);
yk=lmsflt(w,x,dk);
//printf("%12.7lf\n",yk);
yk1=SF*yk;
printf("%12.9f\n",yk1);
fprintf(out,"%12.9f\n",yk1);
}
//fscanf(out,"%f",&test);
//printf("%f ",test);
fcloseall();
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -