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

📄 burg.c

📁 这是数字信号处理方面的一些源码
💻 C
字号:
/**************************************************************
Burg 算法
***************************************************************/
#include <stdio.h>
#include <math.h>
#include <graphics.h>
#include <stdlib.h>

#define P 5                                       /*阶数*/
#define LENGTH 15                                 /*样点长度*/
#define F     20                                  /*取样频率*/
#define F1    2                                   /*信号频率*/
#define F2    8                                   /*信号频率*/

/**************************************************************
*  int    n         :输入数据的个数                           *
*  int    buffer[]  :输入数据缓冲区,用于存放被分析的整数数据 *
*  floar  a[p+1]    :用于存放计算出的系数                     *
***************************************************************/
float       burg(int n, int *buffur, float *a);
main()
{
int             i,buffer[LENGTH];
float           a[P+1];
float           ew,f1=F1,f2=F2,f=F;
int             p=P,length=LENGTH;
   for(i=0;i<LENGTH;i++)
        {
	  buffer[i]=(int)1000*(sin(F1*2*3.1415926*i/F)+
	  sin(F2*2*3.1415927*i/F));
	}

  ew=burg(LENGTH,buffer,a); getch();
}


float burg(int n,int *buffur,float *a)                   /*Burg算法*/
{  int      i,m;
  float    ew=0;
  float    pm,pm1,pm2;
  float    ate[P+1], k[P+1], ef[LENGTH],
  eb[LENGTH],efte[LENGTH],ebte[LENGTH];
  a[0]=1;                                            /*初始化数据*/
  for(i=0;i<n;i++)
      {
	  ef[i]=eb[i]=buffur[i];
	  ew=ew+(float)((float)(1/(float)(n))*(float)(buffur[i])*(float)
	  (buffur[i]));
      }
  for(m=1;m<=P;m++)                                  /*计算模型系数*/
      {
	   pm1=pm2=0;

	   for(i=m;i<n;i++)                          /*计算反射系数*/
	   {
	       pm1+=ef[i]*eb[i-1];
	       pm2+=ef[i]*ef[i]+eb[i]*eb[i];
	   }

	   pm=-2*pm1/pm2;

	   for(i=0;i<=m;i++)                          /*计算滤波器系数*/
	   {
	       ate[i]=a[i];
	   }

	   a[m]=pm;

	   for(i=1;i<m;i++)
	   {
	       a[i]=ate[i]+pm*ate[m-i];
	   }

	   ew=(1-pm*pm)*ew;                           /*计算预测误差功率*/

	   for(i=0;i<n;i++)                           /*计算前后向预测误差*/
	   {
	       efte[i]=ef[i];
	       ebte[i]=eb[i];
	    }

	   for(i=0;i<n;i++)
	   {
	       ef[i]=efte[i]+pm*ebte[i-1];
	       eb[i]=ebte[i-1]+pm*efte[i];
	    }
      }
      return(ew);
}

⌨️ 快捷键说明

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