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

📄 elliptic.c

📁 TMS320C6713的16kCVSD编解码
💻 C
字号:

#include<stdio.h>
#include<math.h>

#define ORD 6         //滤波器阶数,可以改变滤波器的阶数
#define MAX_BITS 16

//static double CoefA[ORD]={1.0000e+000,1.9652e+004,8.9181e+008,1.2193e+013,1.9200e+017,1.4938e+021};//{1.000000,19652, 891810000,     12193000000000,192000000000000000,1493800000000000000000}; //{1.00000000,-3.88893329,6.64074495,-6.08600100,2.98673653,-0.62768820};
//static double CoefB[ORD]={0.0000e+000,2.9369e+003,1.2847e-008,4.3301e+012,1.5947e+001,1.4938e+021};//{0,       2936.9,0.000000012847,4330100000000, 15.947,            1493800000000000000000}; //{0.03285030,-0.05723916,0.03681835,0.03681835,-0.05723916,0.03285030};
//3.4kHz 7kHz 70dB
static double CoefA[ORD]={11.0000e+000,
1.9924e+004,
7.8884e+008,
9.8774e+012,
1.3193e+017,
6.4778e+020};
static double CoefB[ORD]={0.0000e+000,
6.3911e+001,
2.8471e-009,
4.4756e+011,
4.0905e+000,
6.4778e+020};
static short filterY[6];
static short filterX[6];


short elliptic(short InData)  
 {double Max;
  int j=0;
  float DataDecode;
  short outdata; 
  //椭圆IIR滤波器
  
  Max=0;
  filterX[0]=InData;
  for(j=0;j<6;j++)
  {
   Max=Max+CoefB[j]*filterX[j];
   //printf("%f\n",Max);
  }
  for(j=1;j<6;j++)
  {
   Max=Max-CoefA[j]*filterY[j];
   //printf("%f\n",Max);
  }
  DataDecode=(((float)Max)/(48e24))*32767;//(short)Max;
  outdata=(short)DataDecode;
  for(j=5;j>0;j--)
  {
   filterX[j]=filterX[j-1];
  }
  for(j=ORD-1;j>0;j--)
  {
   filterY[j]=filterY[j-1];
  }
  filterY[0]=(short)(Max);
  
  return outdata;
  
}


⌨️ 快捷键说明

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