📄 cvsd.c
字号:
#include <stdio.h>
#include <math.h>
#define DeltaMax 1280 /*设置Delta的初始值*/
//#define DeltaMin 6.5
#define DeltaMin 10
//#define Beta 0.99 /*设置Beta的初始值*/
#define Beta 0.999
#define H 0.96875
#define ORD 6 /*滤波器阶数,可以改变*/
#define FILE_HEADER 60
double ValPreCVSD = 0;
double DeltaCVSD = 5; /*500*/
double Delta0CVSD = 2; /*500*/
//char ThreeJudgeCVSD[3] = {0,1,0};
char ThreeJudgeCVSD[4] = {0,1,0,1};
double ValPreCVSDDE = 0;
double DeltaCVSDDE = 5; /*500*/
double Delta0CVSDDE = 2; /*500*/
//char ThreeJudgeCVSDDE[3] = {0,1,0};
char ThreeJudgeCVSDDE[4] = {0,1,0,1};
int j = 0;
//double Diff = 0;
int m = 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 double CoefA[ORD] = {1.0000,-3.8889, 6.6407,-6.0860, 2.9867,-0.6277};
//static double CoefB[ORD] = {0.0329,-0.0572, 0.0368, 0.0368,-0.0572, 0.0329};
//static double CoefA[ORD] = {1.000,-3.889, 6.641,-6.086, 2.987,-0.628};
//static double CoefB[ORD] = {0.033,-0.057, 0.037, 0.037,-0.057, 0.033};
/***************************1021通过MATLAB计算出6阶椭圆滤波器系数************************/
//static double CoefA[ORD] = {1.0000,-5.3209, 11.9580,-14.5151, 10.0301,-3.7391,0.5873};
//static double CoefB[ORD] = {0.0010,-0.0036, 0.0065, -0.0077,0.0065,-0.0036,0.0010};
/*****************************************************************************************/
/***************************1021通过MATLAB计算出5阶椭圆滤波器系数************************/
//static double CoefA[ORD] = {1.0000,-4.3403,7.6758,-6.9002,3.1492,-0.5833};
//static double CoefB[ORD] = {0.0042,-0.0091,0.0055,0.0055,-0.0091,0.0042};
/*****************************************************************************************/
//static double CoefA[ORD] = {1.0000,-5.9357,14.6868,-19.3899,14.4060,-5.7109,0.9437};
//static double CoefB[ORD] = {0.0006,-0.0037,0.0092,-0.0122,0.0092,-0.0037,0.0006};
/***************************1024**********************************************************/
//static double CoefA[ORD] = {1.0000,-3.6996,5.1661,-3.2252,0.7593};
//static double CoefB[ORD] = {0.0241,-0.0869,0.1261,-0.0869,0.0241};
//static double CoefA[ORD] = {1.0000,-4.6989,8.8696,-8.4052,3.9981,-0.7636};
//static double CoefB[ORD] = {0.0021,-0.0058,0.0037,0.0037,-0.0058,0.0021};
//带通
//static double CoefA[ORD] = {1.0000,-7.4235,24.2427,-45.4937,53.6618,-40.7425,19.4453,-5.3342,0.6439};
//static double CoefB[ORD] = {0.0255,-0.1785,0.5661,-1.0652,1.3043,-1.0652,0.5661,-0.1785,0.0255};
//static double CoefA[ORD] = {1.0000,-9.3317,39.3275,-98.5726,162.7253,-184.8647,146.3607,-79.7327,28.6000,-6.0987,0.5870};
//static double CoefB[ORD] = {0.0672,-0.5179,1.6972,-2.9543,2.5524,0.0000,-2.5524,2.9543,-1.6972,0.5179,-0.0672};
/****************************************************************************************/
/************************************************************************/
/* 1027原滤波器加入谱调整模块后的系数 */
/************************************************************************/
//static double CoefA[ORD] = {1.0000,-4.5653,9.2711,-10.5777,7.1032,-2.6479,0.4246};
//static double CoefB[ORD] = {0.0053,-0.0040,-0.0033,0.0120,-0.0033,-0.0040,0.0053};
/*
* 插值滤波,只有沙沙声
*/
//static double CoefA[ORD] = {1.0000,-3.56926,5.66631,-4.83285,2.20789,-4.2822};
//static double CoefB[ORD] = {448.2,-693.09,468.041,468.041,-693.09,448.2};
/*****************************1030********************************************/
/*
* 通带截止频率0.1pi,阻带0.5pi,通带波动0.1dB,阻带衰减84dB,5阶低通,声音较好。
但消去噪音所需的通带截止频率更低。
*/
//static double CoefA[ORD] = {1.0000,-4.3401,7.6685,-6.8837,3.1359,-0.5796};
//static double CoefB[ORD] = {0.0002932,-0.0000692,0.0002856,0.0002856,-0.0000692,0.0002932};
/*
* 通带截止频率0.03pi,阻带0.1pi,通带波动0.1dB,阻带衰减64dB,5阶低通,不行!!
*/
//static double CoefA[ORD] = {1.0000,-4.8258,9.3289,-9.0299, 4.3763,-0.8495};
//static double CoefB[ORD] = {0.0002986,-0.0008475,0.0005505,0.0005505,-0.0008475,0.0002986};
/*
* 通带截止频率0.003pi,阻带0.01pi,通带波动0.1dB,阻带衰减64dB,5阶低通,数据都被滤掉了
*/
//static double CoefA[ORD] = {1.0000,-4.6919,8.8702,-8.4431,4.0452,-0.7803};
//static double CoefB[ORD] = {0.0025,-0.0066,0.0042,0.0042,-0.0066,0.0025};
/*
* 通带截止频率3k,阻带4k,采样频率44k,通带波动0.5dB,阻带衰减32dB,5阶低通,shasha
*/
//static double CoefA[ORD] = {1.0000,-4.6891,8.8646,-8.4416,4.0481,-0.7819};
//static double CoefB[ORD] = {0.0103,-0.0290,0.0188, 0.0188,-0.0290,0.0103};
/*
* 通带截止频率8k,阻带10k,采样频率22k,通带波动0.5dB,阻带衰减60dB,5阶低通,高频吱吱声没有了,但是有较小的沙沙声为底噪
*/
//static double CoefA[ORD] = {1.0000,-2.2072,3.0381,-2.3836,1.1610, -0.2674};
//static double CoefB[ORD] = {0.0432,0.0448,0.0825,0.0825,0.0448,0.0432};
/*
* 通带截止频率15k,阻带20k,采样频率44k,通带波动0.1dB,阻带衰减40dB,5阶低通,高频吱吱声没有了,但是声音不够圆润,失真比较大
*/
//static double CoefA[ORD] = {1.0000,-2.0246,2.6035,-1.8533,0.8162,-0.1609};
//static double CoefB[ORD] = {0.0442,0.0541,0.0922,0.0922,0.0541,0.0442};
/*
* 通带截止频率20k,阻带25k,采样频率44k,通带波动0.1dB,阻带衰减60dB,5阶低通,高频吱吱声没有了,但是声音不够圆润,失真比较大
*/
//static double CoefA[ORD] = {1.0000,-0.7496,1.3785,-0.6675,0.4028,-0.0831};
//static double CoefB[ORD] = {0.0830,0.2152,0.3423,0.3423 ,0.2152,0.0830};
/*
* 通带截止频率5k,阻带10k,采样频率44k,通带波动0.1dB,阻带衰减40dB,5阶低通,高频吱吱声没有了,但是声音不够圆润,失真比较大
*/
//static double CoefA[ORD] = {1.0000,-4.2342,7.3442,-6.5044,2.9366,-0.5401};
//static double CoefB[ORD] = { 0.0019,-0.0027 ,0.0018,0.0018,-0.0027,0.0019};
/*
* 通带截止频率3k,阻带4k,采样频率22k,通带波动0.1dB,阻带衰减30dB,5阶低通,
为话音信号,声音不够圆润,失真比较大
*/
//static double CoefA[ORD] = {1.0000,-4.0403,6.7946,-5.8996, 2.6369,-0.4839};
//static double CoefB[ORD] = { 0.0263,-0.0579,0.0354,0.0354,-0.0579,0.0263};
/*
* 通带截止频率4k,阻带5k,采样频率8k,通带波动0.1dB,阻带衰减30dB,5阶低通,
为话音信号,声音不够圆润,失真比较大
*/
//static double CoefA[ORD] = {1.0000,-0.1149,1.2677,-0.1995,0.3645,-0.0489};
//static double CoefB[ORD] = {0.1519,0.3792,0.6033,0.6033,0.3792,0.1519};
/*
* 通带截止频率20k,阻带21k,采样频率44k,通带波动0.01dB,阻带衰减40dB,5阶低通,引入了新的噪声,效果变差
*/
//static double CoefA[ORD] = {1.0000,4.3078,7.4951,6.5748,2.9053,0.5169};
//static double CoefB[ORD] = {0.7193,3.5692,7.1113,7.1113,3.5692,0.7193};
/*
* 通带截止频率20k,阻带25k,采样频率44k,通带波动0.01dB,阻带衰减60dB,8阶低通,高频吱吱声没有了,但是声音不够圆润,失真比较大
*/
//static double CoefA[ORD] = {1.0000,-1.3509,2.7798,-2.4627,2.3418,-1.3133,0.6477,-0.1883,0.0324};
//static double CoefB[ORD] = {0.0239,0.0832,0.1860,0.2850,0.3285,0.2850,0.1860,0.0832,0.0239};
/*
* 通带截止频率20k,阻带25k,采样频率44k,通带波动3dB,阻带衰减50dB,5阶低通,声音较好,底噪较小
*/
//static double CoefA[ORD] = {1.0000,-1.7671,2.6150,-2.2147,1.2937,-0.4431};
//static double CoefB[ORD] = {0.0362,0.0800,0.1257,0.1257,0.0800 ,0.0362};
/*
* 通带截止频率20k,阻带25k,采样频率44k,通带波动5dB,阻带衰减50dB,5阶低通,声音较好,底噪较小
*/
//static double CoefA[ORD] = {1.0000,-1.8866,2.8468,-2.5230,1.5127,-0.5567};
//static double CoefB[ORD] = {0.0318,0.0640,0.1008,0.1008,0.0640,0.0318};
/*
* 通带截止频率20k,阻带25k,采样频率44k,通带波动10dB,阻带衰减60dB,5阶低通,声音较好,底噪较小
*/
//static double CoefA[ORD] = {1.0000,-2.1245,3.2507,-3.0652,1.8853,-0.7403};
//static double CoefB[ORD] = {0.0152,0.0341,0.0536,0.0536,0.0341,0.0152};
/*
* 通带截止频率20k,阻带25k,采样频率44k,通带波动20dB,阻带衰减70dB,5阶低通,声音最好(截至1102)
生成的文件名为...2070
*/
//static double CoefA[ORD] = {1.0000,-2.2656,3.5365,-3.4735,2.1842,-0.9120};
//static double CoefB[ORD] = {0.0052,0.0115,0.0180 ,0.0180,0.0115,0.0052};
/*
* 通带截止频率10k,阻带15k,采样频率44k,通带波动20dB,阻带衰减100dB,5阶低通,效果没有上面的好
底噪很大
*/
//static double CoefA[ORD] = {1.0000,-4.2584,7.8627,-7.7947,4.1474,-0.9550};
//static double CoefB[ORD] = {0.0009359,-0.0008045,0.0008671,0.0008671,-0.0008045,0.0009359};
/*
* 通带截止频率20k,阻带25k,采样频率22k,通带波动30dB,阻带衰减100dB,5阶低通,效果没有上面好
*/
//static double CoefA[ORD] = {1.0000,-2.4445,3.8210,-3.8013,2.4136,-0.9714};
//static double CoefB[ORD] = {0.0009,0.0029,0.0049,0.0049,0.0029,0.0009};
/*
* 通带截止频率10k,阻带15k,采样频率22k,通带波动30dB,阻带衰减80dB,4阶低通,声音变小很多,效果不好
*/
//static double CoefA[ORD] = {1.0000,-1.9219, 2.5884,-1.9044,0.9715};
//static double CoefB[ORD] = {0.0022,0.0056,0.0075,0.0056,0.0022};
/*
* 通带截止频率20k,阻带22k,采样频率44k,通带波动20dB,阻带衰减70dB,6阶低通,效果不好
*/
//static double CoefA[ORD] = {1.0000,-2.5600,4.6477,-5.3338,4.5328,-2.4503,0.9127};
//static double CoefB[ORD] = {0.0045,0.0085,0.0159,0.0170 ,0.0159,0.0085,0.0045};
/*
* 通带截止频率16k,阻带22k,采样频率44k,通带波动20dB,阻带衰减70dB,5阶低通,没有2025442070效果好
*/
//static double CoefA[ORD] = {1.0000,-3.1927,5.2956,-5.2271,3.0751,-0.9290};
//static double CoefB[ORD] = {0.0027,0.0029,0.0053,0.0053,0.0029,0.0027};
/*
* 设计一带通滤波器,其中,通带600-20k,阻带300,25k,采样频率44k,通带波动20dB,阻带衰减70dB,
5阶带通,失败
*/
//static double CoefA[ORD] = {1.0000,-7.1440,24.1813,-52.0078,79.5687,-90.7683,78.1790,-50.1856,22.9085,-6.6463,0.9145};
//static double CoefB[ORD] = {0.0047,-0.0133,0.0121,-0.0092,0.0118,0.0000,-0.0118,0.0092,-0.0121,0.0133,-0.0047};
/*
* 通带截止频率600,阻带400,采样频率44k,通带波动20dB,阻带衰减70dB,5阶高通,没有声音
*/
//static double CoefA[ORD] = {1.0000,-4.9947,9.9813,-9.9758,4.9864,-0.9972};
//static double CoefB[ORD] = {0.0000352,-0.0001051,0.0000700,0.0000700,-0.0001051,0.0000352};
/*
* 通带截止频率16k,阻带20k,采样频率22k,通带波动20dB,阻带衰减100dB,5阶低通,比2025442070效果稍好
911copy162022201005
*/
//static double CoefA[ORD] = {1.0000,0.8901,0.9882,-0.6615,-0.6383,-0.8581};
//static double CoefB[ORD] = {0.0238,0.1138,0.2227,0.2227,0.1138,0.0238};
/*
* 通带截止频率18k,阻带20k,采样频率22k,通带波动20dB,阻带衰减80dB,5阶低通,比2025442070效果稍好
911copy18202220805,频谱4K以上成分有所提高
*/
static double CoefA[ORD] = {1.0000,2.0865,1.5733,-0.6172,-1.4960,-0.8181};
static double CoefB[ORD] = {0.0568,0.2727,0.5347,0.5347,0.2727,0.0568};
/*
* 通带截止频率0.9,阻带0.95,通带波动20dB,阻带衰减80dB,5阶低通,
911copy0909520805,频谱4K以上成分有所提高,声音频率成分感觉丰富了,但是又引入了比较尖利的
噪音
*/
//static double CoefA[ORD] = {1.0000,2.8970 ,2.5703,-0.3474,-1.7053,-0.7262};
//static double CoefB[ORD] = {0.1170,0.5780,1.1492,1.1492,0.5780,0.1170};
/*
* 通带截止频率0.95,阻带0.98,通带波动20dB,阻带衰减100dB,5阶低通,比上面的效果更差,尖利的噪声更加严重,
911copy095098201005
*/
//static double CoefA[ORD] = {1.0000,3.3178,3.5344,0.5437,-1.2362,-0.5662};
//static double CoefB[ORD] = {0.2064,1.0306,2.0598,2.0598,1.0306,0.2064};
/*
* 通带截止频率0.85,阻带0.90,通带波动20dB,阻带衰减80dB,5阶低通,
911copy08509520805,频谱4K以上成分有所提高,声音频率成分感觉丰富了,但是又引入了比较尖利的
噪音,与911copy0909520805类似,尖利的噪声较小了
*/
//static double CoefA[ORD] = {1.0000,2.4236,1.9036,-0.5933,-1.6625,-0.7944};
//static double CoefB[ORD] = {0.0736,0.3581,0.7068,0.7068,0.3581 ,0.0736};
/*
* 通带截止频率20k,阻带22k,采样频率44k,通带波动20dB,阻带衰减60dB,5阶低通
*/
//static double CoefA[ORD] = {1.0000,-2.1431,3.3745,-3.3072,2.0746,-0.9117};
//static double CoefB[ORD] = {0.0082,0.0135,0.0218,0.0218,0.0135,0.0082};
static short filterY[ORD-1] = {0,0,0,0,0};
static short filterX[ORD] = {0,0,0,0,0,0};
char CVSDCoder(short InData);
short CVSDDecoder(char InData);
/******************************中值滤波排序函数*************************************/
/*short CVSDfilter(sortdata)
short sortdata[41];
{
short t, h,j,med;
for(h=0;h<40;h++)
{
for(j=0;j<41-h;j++)
{
if(sortdata[j]>sortdata[j+1])
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -