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

📄 head_fft.h~

📁 使用AVR单片机对信号进行采集,通过FFT,分析信号失真度
💻 H~
字号:


#include<math.h> 
#define WR PORTD.0 
#define RD PORTD.1    

#define INT PIND.3 
#define pi 3.14159
#define N 32

float kf; 
float distortion[N];
char  l=0;         
char my_pow(char a,char b);
float xr[N];
byte data,xr_temp[N];

void get_sample()
{
    l=0;  
    while(l<32) 
    {  
   	  if(flag)
          { 
              WR=0; 
       	      WR=1;
              while(INT);
              RD=0;
              data=PINC;
              data=PINC; 
              RD=1;
              //xr[l]=(float)5.0*data/256;   
              //xr[l]=dat;
              xr_temp[l]=data;
              flag=0; 
              l++;
            } 
       } 
       //deal with data
       for(l=0;l<N;l++)
       	xr[l]=(float)5.0*xr_temp[l]/256; 
}

void FFT()
{
  
  float xiebo=0;   
  char  k,nn,nm1,nv2,j,m,le,le1,i,ip;       
  float xi[N]={0},temp,ur,ui,wr,wi,tr,ti,url,uil;   
//FFT Begin
  
 	nn=N;

//求幂M的值
	m=0;
	do
	{
		m=m+1;
		nn/=2;
	}while(nn!=1);
	//cout<<m<<endl;
//求逆序数
	nn=N;
	nv2=nn/2;
	nm1=nn-1;
	j=0;
	for(i=0;i<nm1;i++)
	{
		if(i<j)
		{
			temp=xr[j];
			xr[j]=xr[i];
			xr[i]=temp;
		}
		k=nv2;
		while(k<j+1) {j-=k;k/=2;}
		j+=k;
	}

//FFT算法
	nn=N;
	for(l=1;l<=m;l++)
	{
		le=my_pow(2,l);
		le1=le/2;
		ur=1;
		ui=0;
		wr=cos(pi/le1);
		wi=-sin(pi/le1);
		for(j=1;j<=le1;j++)
		{
			for(i=j-1;i<nn;i+=le)
			{
				ip=i+le1;
				//if(ip>15) break;
				tr=xr[ip]*ur-xi[ip]*ui;
				ti=xr[ip]*ui+xi[ip]*ur;
				xr[ip]=xr[i]-tr;
				xi[ip]=xi[i]-ti;
				xr[i]=xr[i]+tr;
				xi[i]=xi[i]+ti;
			}
			url=ur*wr-ui*wi;
			uil=ur*wi+ui*wr;
			ur=url;
			ui=uil;
		}
	}

  //求失真度
  for(j=0;j<N;j++)
    distortion[j]=xr[j]*xr[j]+xi[j]*xi[j];
  for(j=2;j<N/2;j++) xiebo+=distortion[j];
    kf=sqrt(xiebo/(distortion[1]+xiebo))*100; 

    l=0;  
    for(i=0;i<N;i++)
    {
      xr[i]=0;xi[i]=0;
    } 
    xiebo=0;
}  

char my_pow(char a,char b)
{       
    char w,result=1;
    for(w=0;w<b;w++) result*=a;    
    return result;
}

⌨️ 快捷键说明

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