#include<stdio.h>
#include<math.h>
//#include<c55.h>
#define BUFFERSIZEOUT 254
#define BUFFERSIZEIN 4064
//设置Delta的初始值
#define DeltaMax 1280 //台阶最大值
#define DeltaMin 6.5 //台阶最小值
#define Beta 0.99 //设置Betade的初始值
#define G1 0.509245
#define G2 1.509245
#define G3 1.509245
#define a1 0.9844964
#define b1 1.270821
#define b2 -0.320194
#define c1 -0.320194
#define ORD 6 //滤波器阶数,可以改变滤波器的阶数
#define MAX_BITS 16
int j=0;
int m=0;
double ValPreCVSD[3]={0,0,0};
double DeltaCVSD[2]={20}; //500//台阶
double Delta0CVSD=10; //500//台阶变化量
char ThreeJudgeCVSD[3]={0,1,0};
double ValPreCVSDDE[3]={0,0,0};
double DeltaCVSDDE[3]={20};//500
double Delta0CVSDDE=10;//500
char ThreeJudgeCVSDDE[3]={0,1,0};
//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 3.8kHz 30dB
static double CoefA[ORD]={1.0000e+000,
1.9655e+004,
8.8284e+008,
1.1951e+013,
1.8698e+017,
1.3938e+021};
static double CoefB[ORD]={0.0000e+000,
2.4856e+003,
-4.6812e-008,
3.8630e+012,
-3.8385e+001,
1.3938e+021};
static short filterY[ORD];
static short filterX[ORD];
char CVSDCoder(short InData);
short CVSDDecoder(char InData);
char CVSDCoder(short InData)//编码子程序
{
double Diff=0;
char OutData;
Diff=InData-ValPreCVSD[1];
//将输入信号用一个比特表示
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[1]=a1*DeltaCVSD[0]+G1*Delta0CVSD;//若有三连码提高台阶
else
DeltaCVSD[1]=a1*DeltaCVSD[0];//若没有三连码将台阶变为原来的0.99倍
if(DeltaCVSD[1]>DeltaMax)
DeltaCVSD[1]=DeltaMax;//台阶大于最大值,则将其还原为最大值
if(DeltaCVSD[1]<DeltaMin)
DeltaCVSD[1]=DeltaMin;//台阶小于最小值,则将其还原为最小值
DeltaCVSD[0]=DeltaCVSD[1];
//积分器
if(ThreeJudgeCVSD[j]==1)
{
ValPreCVSD[2]=b1*ValPreCVSD[1]+b2*ValPreCVSD[0]+G2*(DeltaCVSD[1]+7.7)+G2*G1*(DeltaCVSD[0]+7.7);
}
if(ThreeJudgeCVSD[j]==0)
{ValPreCVSD[2]=b1*ValPreCVSD[1]+b2*ValPreCVSD[0]-G2*(DeltaCVSD[1]+7.7)-G2*G1*(DeltaCVSD[0]+7.7);}
ValPreCVSD[0]=ValPreCVSD[1];
ValPreCVSD[1]=ValPreCVSD[2];
j++;
j%=3;
return OutData;
}
short CVSDDecoder(char InData) //解码子程序
{
double Max;
int j=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[1]=a1*DeltaCVSDDE[0]+G1*Delta0CVSDDE;//若有三连码提高台阶
else
DeltaCVSDDE[1]=a1*DeltaCVSDDE[0];//若没有三连码将台阶变为原来的0.99倍
if(DeltaCVSDDE[1]>DeltaMax) DeltaCVSDDE[1]=DeltaMax;//台阶大于最大值,则将其还原为最大值
if(DeltaCVSDDE[1]<DeltaMin) DeltaCVSDDE[1]=DeltaMin;//台阶小于最小值,则将其还原为最小值
DeltaCVSDDE[0]=DeltaCVSDDE[1];
//积分器
if(ThreeJudgeCVSDDE[m]==1) {ValPreCVSDDE[2]=b1*ValPreCVSDDE[1]+b2*ValPreCVSDDE[0]+G3*DeltaCVSDDE[1]+G3*7.7;}
if(ThreeJudgeCVSDDE[m]==0) {ValPreCVSDDE[2]=b1*ValPreCVSDDE[1]+b2*ValPreCVSDDE[0]-G3*DeltaCVSDDE[1]-G3*7.7;}
if(ValPreCVSDDE[2]>2674) ValPreCVSDDE[2]=2674;//32767;
if(ValPreCVSDDE[2]<0) ValPreCVSDDE[2]=0;//-32768;
ValPreCVSDDE[0]=ValPreCVSDDE[1];
ValPreCVSDDE[1]=ValPreCVSDDE[2];
m++;
m%=3;
//椭圆IIR滤波器
OutData=(short)ValPreCVSDDE[2];
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];
}
DataDecode=(short)((((float)Max)/(48e24))*32767);
for(j=ORD-1;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;
return DataDecode;
}
CVSD.rar_csd_cvsd
版权申诉
160 浏览量
2022-09-14
21:33:38
上传
评论
收藏 2KB RAR 举报
我虽横行却不霸道
- 粉丝: 75
- 资源: 1万+
最新资源
- 基于Typescript和PHP的编程知识储备库设计源码 - study-php
- Screenshot_2024-05-28-11-40-58-177_com.tencent.mm.jpg
- 基于Dart的Flutter小提琴调音器APP设计源码 - violinhelper
- 基于JavaScript和CSS的随寻订购网页设计源码 - web-order
- 基于MATLAB的声纹识别系统设计源码 - VoiceprintRecognition
- 基于Java的微服务插件集合设计源码 - wsy-plugins
- 基于Vue和微信小程序的监理日志系统设计源码 - supervisionLog
- 基于Java和LCN分布式事务框架的设计源码 - tx-lcn
- 基于Java和JavaScript的茶叶评级管理系统设计源码 - tea
- IMG_5680.JPG
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈