数据压缩原理与应用 实验六 MPEG音频编码实验
来源:互联网 发布:淘宝买汽车配件 编辑:程序博客网 时间:2024/06/05 02:58
一、实验原理
1. MPEG-1 声音的主要性能
- 1.1 输入为PCM 信号,采样率为32,44.1或48kHz,输出为32kbps到384kbps。
- 1.2 三个独立的压缩层次
- Layer1:编码器最简单,384kbps(4:1,用于小型数字盒带DCC,Compact Cassette))
- Layer2 :编码器复杂程度中等,256kbps ~192kbps (6:1 ~8 :1,用于DAB 、CD-I 和VCD)
- Layer3 :编码器最为复杂,64kbps ,用于ISDN ,网络音频。
- 1.3 心理声学模型
- 听觉系统中存在一个听觉阈值电平,低于这个电平的声音信号就听不到。听觉阈值的大小随声音频率的改变而改变。一个人是否听到声音取决于声音的频率,以及声音的幅度是否高于这种频率下的听觉阈值
- 听觉掩蔽特性。即听觉阈值电平是自适应的,会随听到的不同频率声音而发生变化
声音压缩算法可以确立这种特性的模型来取消更多的冗余数据
人耳听觉系统
- 人类听觉系统大致等效于一个在0Hz 到20KHz 频率范围内由25 个重叠的带通滤波器组成的滤波器组。
- 人耳不能区分同一频带内同时发生的不同声音;
- 临界频带(critical band ):当某个纯音被以它为中心频率、且具有一定带宽的连续噪声所掩蔽时,如果该纯音刚好被听到时的功率等于这一频带内的噪声功率,这个带宽为临界频带宽度。
- 500Hz 以下每个临界频带的带宽大约是100Hz,从500Hz 起, 临界频带带宽线性增加
掩蔽与量化
将输入信号变换到频域,再将结果分解成一些尽量与临界频带尽可能相似的子带,然后对每个子带进行量化,量化方式应当使得量化噪声听不见
2. MPEG音频压缩
- 2.1 多相滤波器组(Polyphase Filter Bank):将PCM样本变换到32个子带的频域信号
2.2 心理声学模型(Psychoacoustic Model):计算信号中不可听觉感知的部分
- 将样本变换到频域
32个等分的子带信号并不能精确地反映人耳的听觉特性。
引入FFT补偿频率分辨率不足的问题。- 确定声压级别
- 考虑安静时阈值
- 将音频信号分解成“乐音(tones)” 和“非乐音/噪声”两部分:因为两种信号的掩蔽能力不同
- 音调和非音调掩蔽成分的消除
利用标准中给出的绝对阈值消除被掩蔽成分;考虑在每个临界频带内,小于0.5Bark的距离中只保留最高功率的成分- 单个掩蔽阈值的计算
音调成分和非音调成分单个掩蔽阈值根据标准中给出的算法求得。- 全局掩蔽阈值的计算
- 每个子带的掩蔽阈值
选择出本子带中最小的阈值作为子带阈值- 计算每个子带信号掩蔽比(signal-to-maskratio, SMR)
SMR = 信号能量 / 掩蔽阈值,传递给编码单元2.3 比特分配器(Bit Allocator):根据心理声学模型的计算结果,为每个子带信号分配比特数
- 目的:使整帧和每个子带的总噪声—掩蔽比最小
- 计算:掩蔽-噪声比MNR = SNR – SMR (dB)
2.4 装帧(Frame Creation):产生MPEG-I兼容的比特流
二、实验要求
- 输出音频的采样率和目标码率
- 选择某个数据帧,输出
- 该帧所分配的比特数
- 该帧的比例因子
- 该帧的比特分配结果
三、代码分析
#else /*************************Add***************************/ if(frameNum==2) { fprintf(outinfo,"Sampling Rate:%.1fkhz\n",s_freq[header.version][header.sampling_frequency]); fprintf(outinfo,"Target Bitrate:%dMbps\n",bitrate[header.version][header.bitrate_index]); fprintf(outinfo,"The R-BIT of The Second Frame:%d\n",adb); } transmission_pattern (scalar, scfsi, &frame); main_bit_allocation (smr, scfsi, bit_alloc, &adb, &frame, &glopts); if (error_protection) CRC_calc (&frame, bit_alloc, scfsi, &crc); encode_info (&frame, &bs); if (error_protection) encode_CRC (crc, &bs); encode_bit_alloc (bit_alloc, &frame, &bs); encode_scale (bit_alloc, scfsi, scalar, &frame, &bs); subband_quantization (scalar, *sb_sample, j_scale, *j_sample, bit_alloc, *subband, &frame); sample_encoding (*subband, bit_alloc, &frame, &bs); /***********************Add*************************/ if(frameNum==2) { fprintf(outinfo,"Scale Factor\n"); for ( cha = 0; cha < nch; cha++ )//Sound Channel { fprintf(outinfo,"Sound Channel%d\n",cha); fprintf(outinfo,"Subband\tGroup1\tGroup2\tGroup3\t\n"); for ( sbd = 0; sbd < frame.sblimit; sbd++ )//Subband { fprintf(outinfo,"%4d\t",sbd); for( gro = 0; gro < 3; gro++ )//Group { fprintf(outinfo,"%3d\t",scalar[cha][gro][sbd]); } fprintf(outinfo,"\n"); } } fprintf(outinfo,"Frame Bit Allocation:\n"); for ( cha = 0; cha < nch; cha++ )//Sound Channel { fprintf(outinfo,"Sound Channel%d\n",cha); for ( sbd = 0; sbd < frame.sblimit; sbd++ )//Subband { fprintf(outinfo,"Subband%2d:\t",sbd); fprintf(outinfo,"%2d\n",bit_alloc[cha][sbd]); } } if(outinfo) fclose(outinfo); /********************End******************************/ }#endif
四、实验结果
阅读全文
0 0
- 数据压缩原理与应用 实验六 MPEG音频编码实验
- 数据压缩原理 实验六 MPEG音频编码
- 数据压缩实验六 MPEG音频编码实验
- 数据压缩实验六:MPEG音频编码实验
- 数据压缩 实验六 MPEG音频编码实验
- 数据压缩 实验六 MPEG音频编码实验
- 数据压缩实验六--MPEG音频编码
- 数据压缩实验六 MPEG音频压缩编码
- 【数据压缩】MPEG音频编码实验
- 数据压缩原理与应用 MPEG音频编码
- 实验六:MPEG音频编码实验
- 实验六—mpeg音频编码实验
- 实验六 MPEG音频编码实验
- 数据压缩实验六:MPG音频编码
- 实验六——MPEG音频编码
- 数据压缩原理实验6_MPEG音频编码
- MPEG音频编码实验
- MPEG音频编码实验
- 优先级问题
- 实地址模式与保护模式
- 智能一代云平台(三十四):后端架构一些总结
- JAVA 攻城狮 第六天
- ItemTouchHelper实现部分响应拖动
- 数据压缩原理与应用 实验六 MPEG音频编码实验
- hibernate中的@OneToMany、@ManyToOne以及@ManyToMany
- java异常机制分析
- Nginx搭建
- Sony Xperia Z3+ E6553 开启 VoLTE
- BZOJ 1568: [JSOI2008]Blue Mary开公司 标记永久化
- C3P0配置属性
- Strings Homomorphism
- <NOIP> 26 . P1478 陶陶摘苹果(升级版)