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

📄 fir.c

📁 1、本试验中未知系统采用25阶的FIR滤波器模拟。其通带边缘频率10kHz
💻 C
字号:
#include "DSP281x_Device.h"     // DSP281x Headerfile Include File
#include "DSP281x_Examples.h"   // DSP281x Examples Include File
#include "f2812a.h"
#include"math.h"

#define FIRNUMBER 25  //滤波器阶数
#define LMSNUMBER 32
#define SIGNAL1F 1000	//	
#define SIGNAL2F 4500	//
#define SAMPLEF  10000	//
#define PI 3.1415926
//*********************//
	float fWn1[LMSNUMBER];
	float fWn2[LMSNUMBER];
	float uN;
	float en;
	float dn;
	float flmsout;
	float lmsout[512];
/*********************/


float InputWave();	//
float FIR();		//
float LMS();
float uuu();

float fHn[FIRNUMBER]={ 0.0,0.0,0.001,-0.002,-0.002,0.01,-0.009,
                       -0.018,0.049,-0.02,0.11,0.28,0.64,0.28,
                       -0.11,-0.02,0.049,-0.018,-0.009,0.01,
                       -0.002,-0.002,0.001,0.0,0.0
                     };//FIR滤波器系数
float fXn[FIRNUMBER]={ 0.0 };//输入信号(观测信号)
float fInput,fOutput;
float fSignal1,fSignal2;
float fStepSignal1,fStepSignal2;
float f2PI;
int i;
float fIn[512],fOut[512];
int nIn,nOut,n;

main(void)
{
   
   	nIn=0; 
   	nOut=0;
   	n=0;
	f2PI=2*PI;
	fSignal1=0.0;
	fSignal2=PI*0.1;
	fStepSignal1=2*PI/30;
	fStepSignal2=2*PI*1.4;
	//*************自适应滤波器初始化**************//
	for(i=0;i<LMSNUMBER;i++)
	{
		fWn1[i]=fWn2[i]=0.0;
	}
	//*********************************************/
	while ( 1 )
	{
		fInput=InputWave();
		fIn[nIn]=fInput;//fIn中存放观测信号
		nIn++; nIn%=512;
		fOutput=FIR();//对观测信号通过未知系统
		fOut[nOut]=fOutput;//fOut中存放输出信号
		nOut++;
	//***********************************************//
		dn=fOutput;//用未知系统的输出做为期望信号
		flmsout=LMS();
		en=dn-flmsout;
		lmsout[n]=flmsout;
		n++;
		uN=uuu();
		for(i=0;i<LMSNUMBER;i++)
		{
			fWn2[i]=fWn1[i]+uN*fXn[i]*en;
		}
		for(i=0;i<LMSNUMBER;i++)
		{
			fWn1[i]=fWn2[i];
		}
	//***********************************************/
		if ( nOut>=512 )
		{
			nOut=0;		/* 请在此句上设置软件断点 */
			n=0;
		}
		
	}
} 	


float InputWave()
{
	for ( i=FIRNUMBER-1;i>0;i-- )
		fXn[i]=fXn[i-1];//实现信号的移位输入
	fXn[0]=sin(fSignal1)+cos(fSignal2)/6.0;
	fSignal1+=fStepSignal1; 
	if ( fSignal1>=f2PI )	fSignal1-=f2PI;
	fSignal2+=fStepSignal2;
	if ( fSignal2>=f2PI )	fSignal2-=f2PI;
	return(fXn[0]);
}

float FIR()
{
	float fSum;
	fSum=0;
	for ( i=0;i<FIRNUMBER;i++ )
	{
		fSum+=(fXn[i]*fHn[i]);
	}
	return(fSum);
}
//*******************************************//
float LMS()
{
	float sum=0;
	for(i=0;i<LMSNUMBER;i++)
	{
		sum+=(fXn[i]*fWn1[i]);
	}
	return(sum);
}
float uuu()
{
	float sum=0;
	for(i=0;i<LMSNUMBER;i++)
	{
		sum+=fXn[i]*fXn[i];
	}
	return(1/(4+sum));
}




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -