【数据压缩】MPEG音频编码
来源:互联网 发布:苹果手机怎么抹除数据 编辑:程序博客网 时间:2024/05/18 02:18
一.实验原理
2.MPEG-1音频编码器框架图
多相滤波器组(PolyphaseFilter Bank):将PCM样本变换到32个子带的频域信号
如果输入的采样频率为48kHz,那么子带的频率宽度为48/(2*32)=0.75Hz
心理声学模型(PsychoacousticModel):计算信号中不可听觉感知的部分
计算噪声遮蔽效应
比特分配器(Bit Allocator):根据心理声学模型的计算结果,为每个子带信号分配比特数
装帧(Frame Creation):产生MPEG-I兼容的比特流
3. 临界频带(Critical Band)
临界频带是指当某个纯音被以它为中心频率、且具有一定带宽的连续噪声所掩蔽时,如果该纯音刚好被听到时的功率等于这一频带内的噪声功率,这个带宽为临界频带宽度。
掩蔽效应在一定频率范围内不随带宽增大而改变,直至超过某个频率值。通常认为从20Hz到16kHz有25个临界频带,单位为bark。
4.比例因子的取值和编码
对各个子带每12个样点进行一次比例因子计算。先定出12个样点中绝对值的最大值。查比例因子表中比这个最大值的最小值作为比例因子。用6比特表示。
第2层的一帧对应36个子带样值,是第1层的三倍,原则上要传三个比例因子。为了降低比例因子的传输码率,采用了利用人耳时域掩蔽特性的编码策略。
每帧中每个子带的三个比例因子被一起考虑,划分成特定的几种模式。根据这些模式,1个、2 个或3 个比例因子和比例因子选择信息(每子带2比特)一起被传送。如果一个比例因子和下一个只有很小的差别,就只传送大的一个,这种情况对于稳态信号经常出现。
使用这一算法后,和第1层相比,第2层传输的比例因子平均减少了2个,即传输码率由22.5Kb/s降低到了7.5Kb/s。
5.比特分配及编码
在调整到固定的码率之前
- 先确定可用于样值编码的有效比特数
- 这个数值取决于比例因子、比例因子选择信息、比特分配信息以及辅助数据所需比特数
比特分配的过程:对每个子带计算掩蔽-噪声比MNR,是信噪比SNR–信掩比
SMR,即:MNR = SNR– SMR
使整个一帧和每个子带的总噪声-掩蔽比最小。这是一个循环过程,每一次循环使获益最大的子带的量化级别增加一级,当然所用比特数不能超过一帧所能提供的最大数目。
第1层一帧用4比特给每个子带的比特分配信息编码;而第2层只在低频段用4比特,高频段则用2比特。
二.实验流程
理解过程
- 理解程序设计的整体框架
- 理解感知音频编码的设计思想
- 理解心理声学模型的实现过程
临界频带的概念
掩蔽值计算的思路
理解码率分配的实现思路
输出要求
- 输出音频的采样率和目标码率
- 选择某个数据帧,输出
该帧所分配的比特数
该帧的比例因子
该帧的比特分配结果
三.实验代码
FILE *output_txt;char temp[100] = "info.txt"; ...int main (int argc, char **argv){ output_txt = fopen(temp, "w"); if (output_txt == NULL) printf("Creating output txt file failed.\n"); ...}#ifdef NEWENCODE ...#else scale_factor_calc (*sb_sample, scalar, nch, frame.sblimit); pick_scale (scalar, &frame, max_sc); int sb, gr, ch; if (frameNum == 80) //选择第80个数据帧 { fprintf(output_txt, "sampling rate %d kHz. \n bit rate %d kbps.\n", header.sampling_frequency, bitrate[header.version][header.bitrate_index]); fprintf(output_txt, "Output the %d th frame\n", frameNum); fprintf(output_txt, "available bits number = %d\n", adb); fprintf(output_txt, "Scale_Factor:\n"); for (ch = 0; ch < nch; ch++) { fprintf(output_txt, "channel[%2d] \n", ch + 1); for (sb = 0; sb < frame.sblimit; sb++) { fprintf(output_txt, "subband[%2d]: ", sb + 1); for (gr = 0; gr < 3; gr++) { fprintf(output_txt, "%2d\t", scalar[ch][gr][sb]); } fprintf(output_txt, "\n"); } } } ... }四.实验结果
- 【数据压缩】MPEG音频编码
- 【数据压缩】MPEG音频编码
- 【数据压缩】MPEG音频编码实验
- 【数据压缩】Exp06.MPEG音频编码
- 数据压缩原理与应用 MPEG音频编码
- 数据压缩实验六 MPEG音频编码实验
- 数据压缩实验六:MPEG音频编码实验
- 数据压缩原理 实验六 MPEG音频编码
- 数据压缩实验六--MPEG音频编码
- 数据压缩实验六 MPEG音频压缩编码
- 数据压缩 实验六 MPEG音频编码实验
- 数据压缩 实验六 MPEG音频编码实验
- 数据压缩原理与应用 实验六 MPEG音频编码实验
- MPEG音频编码
- MPEG音频编码实验
- MPEG音频编码
- MPEG音频编码实验
- MPEG音频编码
- 操作系统每日笔记(一):导论(一)
- Ubuntu下安装python3.4
- IntelliJ IDEA 2017.1.4 License Server
- 单片机时钟程序(9)lcd1602.h
- POJ 1027--The Same Game
- 【数据压缩】MPEG音频编码
- 快速排序
- 反射(3)——为什么用反射?!!
- 7.4---SSH之Hibernate初始篇
- C++并发编程框架Theron(1)——Actor模型介绍
- C—HelloWorld
- Linux系统编程——进程间通信:共享内存
- HTML5之WebSQL
- 码农与程序员