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

📄 dsp3.txt

📁 基于TMS320C54X语音信号去噪和编码系统:CVSD编码的C语言程序代码 硬件上以:TMS320C54X+TLC320AD50为主实现
💻 TXT
字号:

*******************************************************************

基于TMS320C54X语音信号去噪和编码系统:CVSD编码的C语言程序代码

硬件上以:TMS320C54X+TLC320AD50为主实现

*******************************************************************

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

#define BUFFERSIZEOUT    254
#define BUFFERSIZEIN      4064

#define DeltaMax            1280         
#define DeltaMin            6.5
#define Beta                0.99           

#define ORD               6      
#define MAX_BITS         16

double ValPreCVSD = 0;
double DeltaCVSD = 20;    
double Delta0CVSD = 10;    
char ThreeJudgeCVSD[3] = {0,1,0};
double ValPreCVSDDE = 0;
double DeltaCVSDDE = 20;   
double Delta0CVSDDE = 10;   
char ThreeJudgeCVSDDE[3] = {0,1,0};

static double CoefA[ORD] = {1.00000000,-3.88893329, 6.64074495,-6.08600100, 2.98673653,-0.62768820};
static double CoefB[ORD] = {0.03285030,-0.05723916, 0.03681835, 0.03681835,-0.05723916, 0.03285030};

static short filterY[ORD-1];
static short filterX[ORD];
char CVSDCoder(short InData);
short CVSDDecoder(char InData);

char CVSDCoder(short InData)    
{ 
 double Diff = 0; 
 int j = 0;
 char OutData;
 Diff = InData - ValPreCVSD;
  
 if (Diff > 0)
 {
     ThreeJudgeCVSD[j] = 1;
     OutData = 1;
 }
 
 else
 {
  ThreeJudgeCVSD[j] = 0;
  OutData = 0;
 }                             //判断三连码
 if (((ThreeJudgeCVSD[0] == 1) & (ThreeJudgeCVSD[1] == 1) & (ThreeJudgeCVSD[2] == 1)) |      ((ThreeJudgeCVSD[0] == 0) & (ThreeJudgeCVSD[1] == 0) & (ThreeJudgeCVSD[2] == 0)))
           DeltaCVSD = DeltaCVSD + Delta0CVSD;
 else         DeltaCVSD = Beta*DeltaCVSD;
 if (DeltaCVSD > DeltaMax)     DeltaCVSD = DeltaMax;
 if (DeltaCVSD < DeltaMin)     DeltaCVSD = DeltaMin;
 
 if (ThreeJudgeCVSD[j] == 1)   
 {
        ValPreCVSD = ValPreCVSD + DeltaCVSD;
 }
 
 if (ThreeJudgeCVSD[j] == 0)   
 {
  ValPreCVSD = ValPreCVSD - DeltaCVSD;
 }
  
    j++;
 j %= 3; 
 return OutData; 
}

short CVSDDecoder(char InData)      
{
 double Max;
 int j = 0;
 int m = 0;
 short OutData;
 short DataDecode;
  
 if (InData == 0)    ThreeJudgeCVSDDE[m] = 0;
 if (InData == 1)    ThreeJudgeCVSDDE[m] = 1;   
 if (((ThreeJudgeCVSDDE[0] == 1) & (ThreeJudgeCVSDDE[1] == 1) & (ThreeJudgeCVSDDE[2] == 1)) | ((ThreeJudgeCVSDDE[0] == 0) & (ThreeJudgeCVSDDE[1] == 0) & (ThreeJudgeCVSDDE[2] == 0)))
              DeltaCVSDDE = DeltaCVSDDE + Delta0CVSDDE;
 else         DeltaCVSDDE = Beta*DeltaCVSDDE;
 if (DeltaCVSDDE > DeltaMax)     DeltaCVSDDE = DeltaMax;
 if (DeltaCVSDDE < DeltaMin)     DeltaCVSDDE = DeltaMin;
 if (ThreeJudgeCVSDDE[m] == 1)     ValPreCVSDDE += DeltaCVSDDE;
 if (ThreeJudgeCVSDDE[m] == 0)     ValPreCVSDDE -= DeltaCVSDDE;
 if (ValPreCVSDDE > 32767)      ValPreCVSDDE = 32767;
 if (ValPreCVSDDE < -32768)     ValPreCVSDDE = -32768;

 m++;
 m %= 3;  
 OutData = (short)ValPreCVSDDE;  
 Max = 0;
 filterX[0] = OutData;
  
 for (j = 0; j < ORD; j++)
 {
  Max = Max + CoefB[j]*filterX[j];
 }
 for (j = 1; j < ORD; j++)
 {
  Max = Max - CoefA[j]*filterY[j-1];
 }

 DataDecode = (short)Max;

 for (j = ORD-1; j > 0; j--)
 {
  filterX[j] = filterX[j-1];
 }

 for (j = ORD-2; j > 0; j--)
 {
  filterY[j] = filterY[j-1];
 }
 filterY[0] = (short)Max;
 return DataDecode;   
}

main()          
{
   short  CVSDinput = 0;
   char   CVSDoutput;  
   short CVSDDEoutput;
   char  CVSDDEinput = 0;  
   CVSDoutput = CVSDCoder(CVSDinput);     
   CVSDDEoutput = CVSDDecoder(CVSDDEinput);  
}

⌨️ 快捷键说明

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