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

📄 adapt_filter.cpp

📁 产生带白噪声的正弦信号组合
💻 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 + -