CN107809252B - 一种新型24位adpcm音频压缩/解压缩方法 - Google Patents
一种新型24位adpcm音频压缩/解压缩方法 Download PDFInfo
- Publication number
- CN107809252B CN107809252B CN201711038556.XA CN201711038556A CN107809252B CN 107809252 B CN107809252 B CN 107809252B CN 201711038556 A CN201711038556 A CN 201711038556A CN 107809252 B CN107809252 B CN 107809252B
- Authority
- CN
- China
- Prior art keywords
- value
- bit
- compression
- difference
- sample
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/3002—Conversion to or from differential modulation
- H03M7/3044—Conversion to or from differential modulation with several bits only, i.e. the difference between successive samples being coded by more than one bit, e.g. differential pulse code modulation [DPCM]
- H03M7/3046—Conversion to or from differential modulation with several bits only, i.e. the difference between successive samples being coded by more than one bit, e.g. differential pulse code modulation [DPCM] adaptive, e.g. adaptive differential pulse code modulation [ADPCM]
-
- G—PHYSICS
- G10—MUSICAL INSTRUMENTS; ACOUSTICS
- G10L—SPEECH ANALYSIS OR SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING; SPEECH OR AUDIO CODING OR DECODING
- G10L19/00—Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis
- G10L19/02—Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis using spectral analysis, e.g. transform vocoders or subband vocoders
- G10L19/032—Quantisation or dequantisation of spectral components
-
- G—PHYSICS
- G10—MUSICAL INSTRUMENTS; ACOUSTICS
- G10L—SPEECH ANALYSIS OR SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING; SPEECH OR AUDIO CODING OR DECODING
- G10L19/00—Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis
- G10L19/04—Speech or audio signals analysis-synthesis techniques for redundancy reduction, e.g. in vocoders; Coding or decoding of speech or audio signals, using source filter models or psychoacoustic analysis using predictive techniques
- G10L19/16—Vocoder architecture
Abstract
本发明公开了一种新型24位ADPCM音频压缩/解压缩方法,其以PCM算法为基础,将编码支持的范围从16bit扩展为24bit;PCM的每个样本值包含在一个整数i中,i的长度为容纳指定样本长度所需的最小字节数;首先存储低有效字节,表示样本幅度的位放在i的高有效位上,剩下的位置为0,采用的24bit的PCM波形样本的数据格式为:样本大小为24位PCM,最小值为‑8388607,最大值为8388607;对声音信号进行采样时,采样点两两之间的差值进行存储。本发明首创将编码支持的范围从16bit扩展到了24bit,同时也适当降低了压缩比,从4:1降到了3:1,从而将压缩时造成的音频损伤大大降低。此算法适用高端音频采集设备或者音频会议系统等媒体系统,可以最大程度保持原有音频质量。
Description
技术领域
本发明涉及一种新型24位ADPCM音频压缩/解压缩方法。
背景技术
数字技术的出现与应用为人类带来深远的影响,数字信号的优势是显而易见的。但它也有自身相应的缺点,即存储容量需求的增加及传输时信道容量要求的增加。因而,为利用有限的资源,压缩技术从一出现便受到广泛的重视。
近几十年来对语音数字化和数字化压缩进行了许多研究工作,并取得了丰硕的成果。1982年CCITT制定了64kb/s压扩PCM语音编码标准G.711。1986年CCITT又制定了32kb/sADPCM语音压缩编码标准G.721。
ADPCM(Adaptive Differential Pulse Code Modulation),自适应差分脉码调制信号。是一种数据压缩/解压缩算法,该算法利用了语音信号样点间的相关性,并针对语音信号的非平稳特点,使用了自适应预测和自适应量化。即对不同水平的差分序列,用一个相应参数delta作为平稳化参数去除差分序列的幅值,使得差分编码自动的适应数据间大幅度的跳跃。比如采样是16bit声音波形数据,将声音流中每次采样的 16bit 数据以 4bit存储, 所以压缩比4:1. 而压缩/解压缩算法非常的简单, 所以是一种低空间消耗,高质量声音获得的好途径。
对声音的数字化主要有两个重要的参数,一个就是采样频率,即一秒钟采样多少次;另一个就是采样的位宽,即用多少个bit来表示采样到的声音的值。G.721以及G.723广泛用于数字通话中;现如今先进的SPEEX和OPUS等压缩/解压缩算法广泛用于网络音频流中;但是,这些算法中,采样的位宽都是8bit或者16bit的。而随着人们对声音质量的要求越来越高,尤其是一些专业的应用场景,16bit的位宽已经无法满足要求了。
采样位宽是形容声音分辨率的,可以形容为信噪比,可以理解为16bit的音源信噪比大概96db,而24bit的能达到140db。而在录音的时候24bit相对16bit会减6db录音。也就是说,听24bit的音乐可以听到更多的小声音和更多的大声音,细节更多了。当然这样可能会造成你感觉的声音下沉。包括普通人都可以分辨出24bit和16bit的不同,16bit的音频在处理比如舞曲,电音和混音等音频时,可以过滤很多细节或者说噪音,但对于人声,交响乐之类的器械乐器,高精度采样将会提供更好的感受,更多的细节。
而中高端的ADC和DAC,都已经支持24bit位宽的音频,因此,有必要研究出一种针对24bit位宽的音频压缩/解压缩算法。采样位深、信噪比、动态范围是三个完全独立的概念。理想情况下,SNR = 6.02N + 1.76dB,换言之理论最佳情况下,Nbit有效位深的录音最多可以有约等于6NdB的动态范围。另外只要DAC和放大环节的底噪控制不拖后腿,24bit相对于16bit的最大优势是动态范围余量更大,而且信噪比其实是会比16bit更低。
现行CD唱片的声音分辨度约千分之一,一般经过训练的人能分辨声音的变化达万分之一,乐队的指挥可感觉百万分之一的声音变化。发烧友---整天听音乐的,基本上能感觉到几万分之一的声音变化(这不是说你耳朵好、感觉好就永远比不上乐队的指挥,是因为你聆听、感受真实音乐的机会远不如乐队的指挥,好比下棋,你不常与各类高手切磋水平自然很难提高)。所以现在新的音乐形式,在电脑上,采用24bit的形式,以24bit作为一个整体,信噪比就不说了,可达140db!微小细小的声音差别在24bit下,也能得到大的提升,24bit比16bit增加了8个bit,以比平均声响增加5bit来算,可达6万分之一!除了高水平的指挥,其他人很难区分现场Live与重放!
相比于24bit音乐,现在的16bit音乐都是“有损”的,就象MP3一样。MP3是“有损”的音乐形式,对比Mp3与CD音乐普通人也能听出差别来。 随着存储空间的越来越大,有些人对音乐的追求,可以得到满足,60分钟24bit(96khz采样)音乐约占空间为1G,24bit(192khz采样)约占空间为1.4G 对比24bit与16bit,感觉差别也是较大的,主要是现场感、圆润度有提高,“数码声”减少了很多。
发明内容
本发明要解决的技术问题是克服现有技术的缺陷,提供一种新型24位ADPCM音频压缩/解压缩方法。
为了解决上述技术问题,本发明提供了如下的技术方案:
本发明公开了一种新型24位ADPCM音频压缩/解压缩方法,其以 PCM算法为基础,将编码支持的范围从16bit扩展为24bit;PCM的每个样本值包含在一个整数i中,i的长度为容纳指定样本长度所需的最小字节数;首先存储低有效字节,表示样本幅度的位放在i的高有效位上,剩下的位置为0,采用的24bit的PCM波形样本的数据格式为:样本大小为24位PCM,最小值为-8388607,最大值为8388607;对声音信号进行采样时,采样点两两之间的差值进行存储。
进一步地,采用自适应算法,即将两点之间的差值变换到固定的几个位即可表达的范围内,而且这种变换是实时的,并且具有自适应性和预测能力。
进一步地,ADPCM算法利用音频信号的特点,也就是音频信号上的点与它前面的若干个点是有一定的相关性的,从而可以对下一个点进行预测,从而预先估计这个差值,从而选取相应的除数因子,去把差值归化到数值范围内。
进一步地,包括预测量化表、预测步长表以及压缩解压缩函数的实现。
进一步地,定义一个ADPCM的结构体,用于存储压缩过程的数据。
进一步地,24bit预测步长表:此表定义了128个值,是压缩后8bit表示范围,其中1bit表示正负符号;通过计算前后两次采样原始值之间的差值,并结合上一次的索引值来获得此次压缩/解压缩的索引值;该索引值用于查找量化表得到两者差值在压缩算法中的表达值。
进一步地, 24bit预测量化表:此表定义了1024个值;通过步长索引,查找两者差值在压缩算法中的表达值;在压缩和解压时,均通过此差值表达值来计算压缩值和还原原始值;此次首创定义1024值,相对原来16bit定义128值的压缩算法,24bit算法可以更精确的量化描述差值变化过程。
本发明所达到的有益效果是:
本发明公开了一种新的ADPCM音频压缩/解压缩算法,现在硬件可以支持音频采样位宽从普通的16bit提高到24bit,进而最高程度保留原有音频质量,本发明应用于高端音频媒体领域。由于业界ADPCM算法最高只能支持16bit的音频编码,压缩比普遍为4:1。此算法首创将编码支持的范围从16bit扩展到了24bit,同时也适当降低了压缩比,从4:1降到了3:1,从而将压缩时造成的音频损伤大大降低。此算法适用高端音频采集设备或者音频会议系统等媒体系统,可以最大程度保持原有音频质量。
具体实施方式
以下对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
ADPCM的基础是PCM算法,PCM(Pulse Code Modulation)也被称为 脉码编码调制。PCM中的声音数据没有被压缩,如果是单声道的文件,采样数据按时间的先后顺序依次存入。(它的基本组织单位是BYTE(8bit)或WORD(16bit))
PCM的每个样本值包含在一个整数i中,i的长度为容纳指定样本长度所需的最小字节数。首先存储低有效字节,表示样本幅度的位放在i的高有效位上,剩下的位置为0,这样8位和16位以及我们此专利采用的24bit的PCM波形样本的数据格式如下所示:
样本大小 数据格式 最小值 最大值
8位PCM unsigned int -127 127
16位PCM int -32767 32767
24位PCM - -8388607 8388607
ADPCM中D是差分编码。我们来看一个简单例子,对一个声音信号进行采样,以16bit采样为例,比如采集53个点。如果每个采样数据按照16位的采样值进行保存,这样就需要53*16=848bit,大约是106字节。但我们换个思路,我们不存储采样值,而存储采样点两两之间的差值(采样值可能会很大,需要更多的位数来表达,比如16个位,但是两点之间一般来说是比较连续的,差值不会太大,所以这个差值只需要很少的几个位即可表达,比如4个位)。这样,我们只需要知道前一个点的值,又知道它与下一个点的差值,就可以计算得到下一个点了。这个差值就是所谓的“差分”。在我们此次专利中,采用24bit的采样,差分压缩后将压缩到8bit。
ADPCM中A是自适应算法。自适应的目的是为了压缩后,差值超过8bit表示范围的问题。比如两点之差值可能是3、5、8、12,后面突然变成2000、4000,甚至更大,这个差值超过了8bit可以表达的范围,压缩数据不能以数据丢失和失真作为代价。
这时可以将两点之间的差值变换到固定的几个位即可表达的范围内,而且这种变换是实时的,并且具有自适应性和预测能力的。这就是自适应苏算法的基本思想。ADPCM定义了一些因子(预测步长表),这种算法会用差值去和相应的因子作除法,从而减小了差值,让它可以减少到8bit位可表达的数值范围内。而选择哪一个因子来除它,这就是自适应算法具体通过查找“预测量化表”来实现。
总结,ADPCM算法利用了音频信号的特点,也就是音频信号上的点与它前面的若干个点是有一定的相关性的,从而可以对下一个点进行预测,从而预先估计这个差值,从而选取相应的除数因子,去把差值归化到数值范围内。
ADPCM压缩/解压缩算法最核心的部分分为三部分:预测量化表、预测步长表以及压缩解压缩函数的实现。本专利需要保护的也就是这24bit ADPCM压缩算法的三个核心内容(包含相似的实现)。
以下实现均用C语言完成。先定义一个ADPCM的结构体,用于存储压缩过程的数据:
typedef struct adpcm24_state
{
int32_t valprev; /* 前一次的压缩输出值 */
int32_t index; /* 步长表的索引 */
}adpcm24_state;
1.24bit预测步长表:此表定义了128个值,是压缩后8bit表示范围,其中1bit表示正负符号。通过计算前后两次采样原始值之间的差值,并结合上一次的索引值来获得此次压缩/解压缩的索引值。该索引值用于查找量化表得到两者差值在压缩算法中的表达值。原有的16bit压缩算法此表为8个值。
int32_t indexTable24[128] =
{
-32,-32,-31,-31,-30,-30,-30,-29,-29,-28,-28,-28,-27,-27,-27,-26,
-26,-25,-25,-25,-24,-24,-23,-23,-22,-22,-22,-21,-21,-20,-20,-19,
-19,-18,-18,-17,-17,-16,-16,-15,-15,-14,-14,-13,-13,-12,-11,-11,
-10,-10, -9, -9, -8, -7, -7, -6, -5, -5, -4, -3, -3, -2, -1, -1,
2, 3, 5, 6, 7, 9, 10, 11, 13, 14, 15, 16, 18, 19, 20, 21,
22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
39, 40, 41, 42, 43, 44, 44, 45, 46, 47, 48, 49, 50, 50, 51, 52,
53, 54, 55, 55, 56, 57, 58, 58, 59, 60, 61, 62, 62, 63, 64, 64,
};
2.24bit预测量化表:此表定义了1024个值。通过步长索引,查找两者差值在压缩算法中的表达值。在压缩和解压时,均通过此差值表达值来计算压缩值和还原原始值。此次首创定义1024值,相对原来16bit定义128值的压缩算法,24bit算法可以更精确的量化描述差值变化过程。
#define STEP_TAB_SZ24 1024
int32_t stepsizeTable[STEP_TAB_SZ24] =
{
127, 128, 130, 131, 133, 134, 136, 137,
139, 140, 142, 143, 145, 146, 148, 149,
151, 153, 154, 156, 158, 159, 161, 163,
165, 167, 168, 170, 172, 174, 176, 178,
180, 182, 184, 186, 188, 190, 192, 194,
196, 198, 200, 202, 205, 207, 209, 211,
214, 216, 218, 221, 223, 226, 228, 231,
233, 236, 238, 241, 243, 246, 249, 252,
254, 257, 260, 263, 266, 268, 271, 274,
277, 280, 283, 287, 290, 293, 296, 299,
303, 306, 309, 313, 316, 319, 323, 326,
330, 334, 337, 341, 345, 348, 352, 356,
360, 364, 368, 372, 376, 380, 384, 388,
392, 397, 401, 405, 410, 414, 419, 423,
428, 433, 437, 442, 447, 452, 457, 462,
467, 472, 477, 482, 488, 493, 498, 504,
509, 515, 520, 526, 532, 538, 543, 549,
555, 561, 568, 574, 580, 586, 593, 599,
606, 612, 619, 626, 633, 639, 646, 653,
661, 668, 675, 682, 690, 697, 705, 713,
721, 728, 736, 744, 752, 761, 769, 777,
786, 794, 803, 812, 821, 830, 839, 848,
857, 866, 876, 885, 895, 905, 915, 925,
935, 945, 955, 966, 976, 987, 998, 1009,
1020, 1031, 1042, 1053, 1065, 1076, 1088, 1100,
1112, 1124, 1136, 1149, 1161, 1174, 1187, 1200,
1213, 1226, 1239, 1253, 1267, 1280, 1294, 1309,
1323, 1337, 1352, 1367, 1381, 1397, 1412, 1427,
1443, 1458, 1474, 1490, 1507, 1523, 1540, 1557,
1574, 1591, 1608, 1626, 1643, 1661, 1679, 1698,
1716, 1735, 1754, 1773, 1792, 1812, 1832, 1852,
1872, 1892, 1913, 1934, 1955, 1976, 1998, 2019,
2042, 2064, 2086, 2109, 2132, 2155, 2179, 2203,
2227, 2251, 2275, 2300, 2325, 2351, 2376, 2402,
2428, 2455, 2482, 2509, 2536, 2564, 2592, 2620,
2649, 2678, 2707, 2736, 2766, 2796, 2827, 2858,
2889, 2920, 2952, 2984, 3017, 3050, 3083, 3117,
3151, 3185, 3220, 3255, 3290, 3326, 3363, 3399,
3436, 3474, 3512, 3550, 3589, 3628, 3668, 3708,
3748, 3789, 3830, 3872, 3914, 3957, 4000, 4044,
4088, 4132, 4177, 4223, 4269, 4316, 4363, 4410,
4458, 4507, 4556, 4606, 4656, 4707, 4758, 4810,
4863, 4916, 4969, 5024, 5078, 5134, 5190, 5246,
5304, 5361, 5420, 5479, 5539, 5599, 5660, 5722,
5784, 5848, 5911, 5976, 6041, 6107, 6173, 6241,
6309, 6378, 6447, 6518, 6589, 6661, 6733, 6807,
6881, 6956, 7032, 7109, 7186, 7264, 7344, 7424,
7505, 7587, 7669, 7753, 7838, 7923, 8009, 8097,
8185, 8274, 8365, 8456, 8548, 8641, 8736, 8831,
8927, 9025, 9123, 9223, 9323, 9425, 9528, 9632,
9737, 9843, 9950, 10059, 10169, 10279, 10392, 10505,
10620, 10735, 10852, 10971, 11090, 11211, 11334, 11457,
11582, 11709, 11836, 11966, 12096, 12228, 12361, 12496,
12632, 12770, 12910, 13050, 13193, 13337, 13482, 13629,
13778, 13928, 14080, 14234, 14389, 14546, 14704, 14865,
15027, 15191, 15357, 15524, 15693, 15865, 16038, 16213,
16389, 16568, 16749, 16932, 17116, 17303, 17492, 17683,
17875, 18070, 18268, 18467, 18668, 18872, 19078, 19286,
19496, 19709, 19924, 20141, 20361, 20583, 20807, 21034,
21264, 21496, 21730, 21967, 22207, 22449, 22694, 22942,
23192, 23445, 23700, 23959, 24220, 24485, 24752, 25022,
25294, 25570, 25849, 26131, 26416, 26704, 26996, 27290,
27588, 27889, 28193, 28501, 28811, 29126, 29443, 29765,
30089, 30417, 30749, 31085, 31424, 31766, 32113, 32463,
32817, 33175, 33537, 33903, 34273, 34647, 35024, 35407,
35793, 36183, 36578, 36977, 37380, 37788, 38200, 38617,
39038, 39464, 39894, 40329, 40769, 41214, 41664, 42118,
42577, 43042, 43511, 43986, 44466, 44951, 45441, 45937,
46438, 46944, 47456, 47974, 48497, 49026, 49561, 50102,
50648, 51201, 51759, 52324, 52894, 53471, 54055, 54644,
55240, 55843, 56452, 57068, 57690, 58319, 58956, 59599,
60249, 60906, 61570, 62242, 62921, 63607, 64301, 65002,
65711, 66428, 67153, 67885, 68626, 69374, 70131, 70896,
71669, 72451, 73241, 74040, 74848, 75664, 76489, 77324,
78167, 79020, 79882, 80753, 81634, 82524, 83424, 84334,
85254, 86184, 87124, 88075, 89035, 90007, 90988, 91981,
92984, 93998, 95024, 96060, 97108, 98167, 99238, 100320,
101415, 102521, 103639, 104770, 105912, 107068, 108236, 109416,
110610, 111816, 113036, 114269, 115515, 116775, 118049, 119337,
120638, 121954, 123284, 124629, 125989, 127363, 128752, 130156,
131576, 133011, 134462, 135929, 137412, 138910, 140426, 141957,
143506, 145071, 146654, 148253, 149870, 151505, 153158, 154828,
156517, 158224, 159950, 161695, 163459, 165242, 167044, 168866,
170708,172570,174452,176355,178279,180223,182189,184177,
186186,188216,190269,192345,194443,196564,198708,200875,
203066,205281,207521,209784,212072,214386,216724,219088,
221478,223894,226336,228805,231300,233823,236374,238952,
241559,244193,246857,249550,252272,255023,257805,260617,
263460,266334,269239,272176,275144,278146,281180,284247,
287347,290481,293650,296853,300091,303364,306673,310018,
313400,316818,320274,323768,327299,330869,334478,338127,
341815,345543,349313,353123,356975,360868,364805,368784,
372806,376873,380984,385139,389340,393587,397880,402220,
406608,411043,415526,420059,424641,429272,433955,438688,
443473,448311,453201,458144,463142,468193,473300,478463,
483682,488958,494291,499683,505133,510643,516213,521844,
527536,533290,539107,544987,550932,556941,563016,569158,
575366,581642,587986,594400,600883,607438,614063,620762,
627533,634378,641297,648292,655364,662512,669739,677044,
684429,691895,699442,707071,714784,722580,730462,738430,
746484,754627,762858,771179,779591,788094,796691,805381,
814166,823046,832024,841099,850274,859549,868924,878402,
887984,897670,907461,917359,927366,937481,947707,958044,
968494,979059,989738,1000534, 1011447, 1022480, 1033633, 1044907,
1056305,1067827,1079474,1091249, 1103152, 1115185, 1127349, 1139646,
1152077,1164643,1177347,1190189, 1203172, 1216295, 1229562, 1242974,
1256532,1270238,1284094,1298100, 1312260, 1326573, 1341043, 1355671,
1370458,1385407,1400519,1415795, 1431238, 1446850, 1462632, 1478586,
1494714,1511018,1527499,1544161, 1561004, 1578031, 1595244, 1612644,
1630235,1648017,1665993,1684165, 1702536, 1721107, 1739880, 1758858,
1778043,1797438,1817044,1836864, 1856900, 1877154, 1897630, 1918328,
1939253,1960406,1981790,2003406, 2025259, 2047350, 2069682, 2092258,
2115079,2138150,2161472,2185049, 2208883, 2232977, 2257334, 2281956,
2306847,2332010,2357447,2383161, 2409156, 2435434, 2461999, 2488854,
2516002,2543446,2571189,2599235, 2627587, 2656248, 2685222, 2714511,
2744120,2774053,2804311,2834900, 2865822, 2897082, 2928683, 2960628,
2992922,3025568,3058570,3091932, 3125658, 3159752, 3194217, 3229059,
3264281,3299887,3335881, 3372268, 3409052, 3446237, 3483827, 3521828,
3560243,3599078,3638335, 3678021, 3718140, 3758697, 3799696, 3841142,
3883040,3925395,3968212, 4011496, 4055253, 4099486, 4144203, 4189406,
4235103,4281299,4327998, 4375207, 4422930, 4471175, 4519945, 4569247,
4619087,4669471,4720405, 4771894, 4823944, 4876562, 4929755, 4983527,
5037886,5092838,5148390, 5204547, 5261317, 5318706, 5376721, 5435369,
5494656,5554590,5615178, 5676427, 5738344, 5800937, 5864212, 5928177,
5992840,6058208,6124290, 6191092, 6258623, 6326890, 6395902, 6465667,
6536193,6607488,6679561, 6752420, 6826073, 6900530, 6975799, 7051890,
7128810,7206569,7285176, 7364641, 7444973, 7526181, 7608274, 7691263,
7775158,7859967,7945701, 8032371, 8119986, 8208557, 8298094, 8388607,
};
3. 压缩函数
int32_t adpcm24_encode(int32_t *indata, uint8_t *outdata, int32_tlen, struct adpcm24_state *state)
{
uint32_t i;
uint8_t nagative;
uint8_t delta;
uint8_t outputbuffer;
int32_t val;
int32_t diff;
int32_t step;
int32_t valpred;
int32_t vpdiff;
int32_t index;
int32_t count = 0;
//计算前后两次采样的差值
valpred = state->valprev;
index = state->index;
step = stepsizeTable[index];
while (len-- > 0 )
{
val = *indata++;
if (val < valpred)
{
diff = valpred - val;
nagative = 0x80;
}
else
{
diff = val - valpred;
nagative = 0x00;
}
//通过前后两次差值计算步长表的索引
delta = 0;
vpdiff = 0;
for (i = 0; i < 7; i++)
{
delta <<= 1;
if (diff >= step)
{
delta |= 0x01;
diff -= step;
vpdiff += step;
}
step >>= 1;
}
vpdiff += step;
if (nagative != 0)
{
valpred -= vpdiff;
if ( valpred < -8388608 )
valpred = -8388608;
}
else
{
valpred += vpdiff;
if ( valpred > 8388607 )
valpred = 8388607;
}
index += indexTable24[delta];
if ( index < 0 )
{
index = 0;
}
else if ( index > (STEP_TAB_SZ24 - 1) )
{
index = (STEP_TAB_SZ24 - 1);
}
step = stepsizeTable[index];
//计算最终的输出值
outputbuffer = (nagative | delta);
*outdata++ = outputbuffer;
count++;
}
state->valprev = valpred;
state->index = index;
return count;
}
4. 解压缩函数
int32_t adpcm24_decode(uint8_t *indata, int32_t *outdata, int32_tlen, struct adpcm24_state *state)
{
uint32_t i;
uint8_t nagative;
uint8_t delta;
uint8_t inputbuffer;
int32_t step;
int32_t valpred;
int32_t vpdiff;
int32_t index;
int32_t count = 0;
valpred = state->valprev;
index = state->index;
step = stepsizeTable[index];
while ( len-- > 0 )
{
//通过压缩值计算索引值和差值
inputbuffer = *indata++;
nagative = inputbuffer & 0x80;
delta = inputbuffer & 0x7F;
index += indexTable24[delta];
if ( index < 0 )
{
index = 0;
}
else if ( index > (STEP_TAB_SZ24 - 1) )
{
index = (STEP_TAB_SZ24 - 1);
}
vpdiff = 0;
for (i = 0; i < 7; i++)
{
delta <<= 1;
if (delta & 0x80)
{
vpdiff += step;
}
step >>= 1;
}
vpdiff += step;
//通过差值计算输出值
if ( nagative != 0 )
{
valpred -= vpdiff;
if ( valpred <= -8388608 )
valpred = -8388608;
}
else
{
valpred += vpdiff;
if ( valpred >= 8388607 )
valpred = 8388607;
}
step = stepsizeTable[index];
*outdata++ = valpred;
count++;
}
state->valprev = valpred;
state->index = (int32_t)index;
return count;
}
最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (4)
1.一种24位ADPCM音频压缩/解压缩方法,其特征在于,以 PCM算法为基础,将编码支持的范围从16bit扩展为24bit;PCM的每个样本值包含在一个整数i中,i的长度为容纳指定样本长度所需的最小字节数;首先存储低有效字节,表示样本幅度的位放在i的高有效位上,剩下的位置为0,采用的24bit的PCM波形样本的数据格式为:样本大小为24位PCM,最小值为-8388607,最大值为8388607;对声音信号进行采样时,采样点两两之间的差值进行存储,包括预测量化表、预测步长表以及压缩解压缩函数的实现;
24bit预测量化表:此表定义了1024个值,通过步长索引,查找两者差值在压缩算法中的表达值,在压缩和解压时,均通过此差值表达值来计算压缩值和还原原始值, 24bit预测步长表:此表定义了128个值,是压缩后8bit表示范围,其中1bit表示正负符号,通过计算前后两次采样原始值之间的差值,并结合上一次的索引值来获得此次压缩/解压缩的索引值,该索引值用于查找量化表得到两者差值在压缩算法中的表达值;
压缩函数:计算前后两次采样的差值,通过前后两次差值计算步长表的索引, 计算最终的输出值;
解压缩函数:通过压缩值计算索引值和差值,通过差值计算输出值。
2.根据权利要求1所述的一种24位ADPCM音频压缩/解压缩方法,其特征在于,采用自适应算法,即将两点之间的差值变换到固定的几个位即可表达的范围内,而且这种变换是实时的,并且具有自适应性和预测能力。
3.根据权利要求1所述的一种24位ADPCM音频压缩/解压缩方法,其特征在于,ADPCM算法利用音频信号的特点,也就是音频信号上的点与它前面的若干个点是有一定的相关性的,从而可以对下一个点进行预测,从而预先估计这个差值,从而选取相应的除数因子,去把差值归化到数值范围内。
4.根据权利要求1所述的一种24位ADPCM音频压缩/解压缩方法,其特征在于,定义一个ADPCM的结构体,用于存储压缩过程的数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711038556.XA CN107809252B (zh) | 2017-10-28 | 2017-10-28 | 一种新型24位adpcm音频压缩/解压缩方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711038556.XA CN107809252B (zh) | 2017-10-28 | 2017-10-28 | 一种新型24位adpcm音频压缩/解压缩方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107809252A CN107809252A (zh) | 2018-03-16 |
CN107809252B true CN107809252B (zh) | 2021-11-05 |
Family
ID=61582607
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711038556.XA Active CN107809252B (zh) | 2017-10-28 | 2017-10-28 | 一种新型24位adpcm音频压缩/解压缩方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107809252B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110138768A (zh) * | 2019-05-10 | 2019-08-16 | 成都航天通信设备有限责任公司 | 一种基于fpga的数字音频传输方法 |
CN116388768B (zh) * | 2023-06-06 | 2023-08-22 | 上海海栎创科技股份有限公司 | 一种信号数据的压缩方法和系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1215510A (zh) * | 1996-02-08 | 1999-04-28 | 松下电器产业株式会社 | 宽频带声音信号编码装置、宽频带声音信号解码装置、宽频带声音信号编码解码装置和宽频带声音信号记录媒体 |
US6167192A (en) * | 1997-03-31 | 2000-12-26 | Samsung Electronics Co., Ltd. | DVD disc, device and method for reproducing the same |
CN1322406A (zh) * | 1998-10-06 | 2001-11-14 | 松下电器产业株式会社 | 编码无损压缩方法及其装置和译码无损压缩方法及其装置 |
CN1765051A (zh) * | 2004-01-30 | 2006-04-26 | 索尼株式会社 | 取样速率转换器及其方法和音频装置 |
CN101800062A (zh) * | 2010-04-02 | 2010-08-11 | 福州思迈特数码科技有限公司 | 实现音频升频的车载dvd导航影音装置 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6111870A (en) * | 1996-11-07 | 2000-08-29 | Interdigital Technology Corporation | Method and apparatus for compressing and transmitting high speed data |
JP3998330B2 (ja) * | 1998-06-08 | 2007-10-24 | 沖電気工業株式会社 | 符号化装置 |
CN1622470B (zh) * | 2004-12-24 | 2010-04-21 | 北京中星微电子有限公司 | 一种自适应差分脉冲编码调制解码装置及方法 |
CN1972132B (zh) * | 2005-11-24 | 2010-07-07 | 盛群半导体股份有限公司 | 声音处理方式 |
WO2010074200A1 (ja) * | 2008-12-26 | 2010-07-01 | 国立大学法人九州工業大学 | 適応差分パルス符号変調の符号化装置及び復号化装置 |
-
2017
- 2017-10-28 CN CN201711038556.XA patent/CN107809252B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1215510A (zh) * | 1996-02-08 | 1999-04-28 | 松下电器产业株式会社 | 宽频带声音信号编码装置、宽频带声音信号解码装置、宽频带声音信号编码解码装置和宽频带声音信号记录媒体 |
US6167192A (en) * | 1997-03-31 | 2000-12-26 | Samsung Electronics Co., Ltd. | DVD disc, device and method for reproducing the same |
CN1322406A (zh) * | 1998-10-06 | 2001-11-14 | 松下电器产业株式会社 | 编码无损压缩方法及其装置和译码无损压缩方法及其装置 |
CN1765051A (zh) * | 2004-01-30 | 2006-04-26 | 索尼株式会社 | 取样速率转换器及其方法和音频装置 |
CN101800062A (zh) * | 2010-04-02 | 2010-08-11 | 福州思迈特数码科技有限公司 | 实现音频升频的车载dvd导航影音装置 |
Non-Patent Citations (1)
Title |
---|
基于ADPCM的语音压缩算法研究;廖广锐;《计算机与数字工程》;20070731;第6,39-41页 * |
Also Published As
Publication number | Publication date |
---|---|
CN107809252A (zh) | 2018-03-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
AU626605B2 (en) | Coder for incorporating extra information in a digital audio signal having a predetermined format, decoder for extracting such extra information from a digital signal, device for recording a digital signal on a record carrier, comprising such a coder, and record carrier obtained by means of such a device | |
US9299333B2 (en) | System for adaptive audio signal shaping for improved playback in a noisy environment | |
US6122338A (en) | Audio encoding transmission system | |
US4493091A (en) | Analog and digital signal apparatus | |
US4507791A (en) | Analog and digital signal apparatus | |
JP4570250B2 (ja) | 信号の量子化変換係数をエントロピーエンコードするシステムと方法 | |
KR100310214B1 (ko) | 신호인코딩또는디코딩장치와레코딩매체 | |
KR100295217B1 (ko) | 신호스펙트럼-의존양자화비트할당및노이즈스펙트럼-의존양자화비트할당으로서디지탈입력신호를압축하는장치 | |
TW201503108A (zh) | 後設資料驅動動態範圍控制 | |
JP2008511844A (ja) | 音声信号を安定して分類する装置および方法、音声信号データベースを構築して動作させる方法、およびコンピュータプログラム | |
KR20040065641A (ko) | 양자화 잡음 분포 조절 방법 및 장치 | |
CN107809252B (zh) | 一种新型24位adpcm音频压缩/解压缩方法 | |
WO2000021199A1 (fr) | Procede et dispositif de codage a compression sans perte, et procede et dispositif de decodage a compression sans perte | |
JPS5920204B2 (ja) | 適応性デルタ変調システム | |
KR100636144B1 (ko) | 오디오 신호 부호화/복호화 장치 및 방법 | |
FI110729B (fi) | Menetelmä pakatun audiosignaalin purkamiseksi | |
JPH03121633A (ja) | 可聴音信号符号化方法 | |
KR940003232A (ko) | 음성 데이타 부호화 방법 | |
KR100601748B1 (ko) | 디지털 음성 데이터의 부호화 방법 및 복호화 방법 | |
JP2003255997A (ja) | オーディオ信号再生方法および再生装置 | |
EP0398973B1 (en) | Method and apparatus for electrical signal coding | |
JP3942882B2 (ja) | ディジタル信号符号化装置およびそれを備えたディジタル信号記録装置 | |
JPH1083623A (ja) | 信号記録方法、信号記録装置、記録媒体および信号処理方法 | |
JP7084638B2 (ja) | ノイズシェーピング機能を有する再量子化装置およびノイズシェーピング機能を有する信号圧縮装置およびノイズシェーピング機能を有する信号送信装置 | |
WO1995016263A1 (fr) | Procede, dispositif et support concernant le traitement de l'information |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20190516 Address after: 518000 Dongyi Building, Futian Street, Futian District, Shenzhen City, Guangdong Province 3C Applicant after: INFOSVC INFORMATION TECHNICAL SERVICE LTD., CO. Address before: 410000 No. 1441 Cai Hao Middle Road, Furong District, Changsha City, Hunan Province Applicant before: Xu Huimin |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |