实验六—mpeg音频编码实验
来源:互联网 发布:无间道1的知乎 编辑:程序博客网 时间:2024/06/06 03:56
一、基本原理
- 音频信号
通常将人耳可以听到的频率在20hz-20khz的声波称为声音信号,声音振动被拾音器转化为的电信号称为音频信号。人说话的信号频率在300hz到3000hz,将该频段的信号称为语音信号。 - 压缩的可行性
声音信号中存在大量的冗余信息,在不同的分析域冗余的表现不同,结合时域和频率域可以较好的去除冗余。在时域,信号的幅度分度非均匀,小幅度样值出现概率比大幅度样值出现概率高;语音信号变化比较缓慢,各信号样值间的相关性较强,可以用差分编码去除冗余。在频域,长时功率谱函数分布非均匀,低频能量高,高频能量低。
声音中存在一些人耳感觉不到的部分,根据人耳的心理听觉模型可以找出这部分冗余信息,并把它去除掉,而不影响人的听觉效果。 - MPEG-1 层二编码器原理
多相滤波器组:将pcm样本变换到32个子带的频域信号,如果输入的采样频率为48khz,那么子带宽度为48/(2*32)=0.75hz;其中48/2表示信号的最高频率。
心理声学模型:计算信号中不可感知的部分,利用人耳的掩蔽效应,找到声音信号中冗余的部分。
比特分配器:根据心理声学模型的计算结果,为每个子带信号分配比特数。
装帧:根据MPEG-1的编码格式产生兼容的比特流。
二、实验步骤
- 理解程序设计的整体框架
- 理解感知音频编码的设计思想
- 理解心理声学模型的实现过程
- 理解码率分配的实现思路
- 输出音频的采样率和目标码率
- 选择其中一个数据帧输出该帧所分配的比特因子和比特分配结果
三、关键代码分析
实际实现中子带的个数不一定为32个,在测试音频中子带数为30个。
//add by zhn if(mask>0) { fprintf(temp,"音频采样率为%f\n",s_freq[header.version][header.sampling_frequency]); fprintf(temp,"目标码率为%d\n",bitrate[header.version][header.bitrate_index]); fprintf(temp,"第%d帧\n",mask); mask=mask-1; fprintf(temp,"该帧所分配的比特数%d\n",avidadb); fprintf(temp,"该帧比例因子\n"); for(m=0;m<nch;m++) { fprintf(temp,"channel[%d]\n",m+1); for(p=0;p<frame.sblimit;p++) { fprintf(temp,"%d\t%d\t%d\t",scalar[m][0][p],scalar[m][1][p],scalar[m][2][p]); fprintf(temp,"\n"); } fprintf(temp,"\n"); } fprintf(temp,"\n"); fprintf(temp,"该帧比特分配\n"); for(m=0;m<2;m++) { fprintf(temp,"channel[%d]\n",m+1); for(n=0;n<frame.sblimit;n++) { fprintf(temp,"%d\t",bit_alloc[m][n]); if((n+1)%8==0) fprintf(temp,"\n"); } fprintf(temp,"\n"); } fprintf(temp,"\n"); } //end add
四、实验结果
五、实验结论
在保证听觉效果的前提下,mpeg音频压缩可以达到较好的压缩效果。
阅读全文
0 0
- 实验六—mpeg音频编码实验
- 实验六——MPEG音频编码
- 实验六:MPEG音频编码实验
- 数据压缩实验六 MPEG音频编码实验
- 数据压缩实验六:MPEG音频编码实验
- 实验六 MPEG音频编码实验
- 数据压缩 实验六 MPEG音频编码实验
- 数据压缩 实验六 MPEG音频编码实验
- 数据压缩原理 实验六 MPEG音频编码
- 数据压缩实验六--MPEG音频编码
- 数据压缩实验六 MPEG音频压缩编码
- MPEG音频编码实验
- MPEG音频编码实验
- MPEG音频编码实验
- MPEG音频编码实验
- 数据压缩原理与应用 实验六 MPEG音频编码实验
- MPEG音频编码实验报告
- 【数据压缩】MPEG音频编码实验
- vim 编辑器基本用法
- Thinking in java-35 String 字符串
- 持续集成之jenkins实践教程:基础篇(3): 集成sonarqube
- @ResponseBody、@Autowired
- linux下常用查找命令locate find
- 实验六—mpeg音频编码实验
- java中queue的使用
- Nginx反向代理配置示例
- 【简记】Java Web 内幕——基于字节、字符的I/O(代码示例),磁盘I/O介绍,Java访问磁盘文件
- Caffe学习之ProtoBuffer
- Mongdob是什么?
- Vue-Router2.0使用1
- Qt创建和使用动态链接库
- Struts2系列之动作类