数据压缩实验六

实验原理


比例因子的取值
对各个子带每12个样点进行一次比例因子计算。先定出12
样点中绝对值的最大值。查比例因子表中比这个最大值大的
最小值作为比例因子。用6比特表示。2层的一帧对应36个子带样值,是第1层的三倍,原
则上要传三个比例因子。为了降低比例因子的传输码率,
采用了利用人耳时域掩蔽特性的编码策略。
每帧中每个子带的三个比例因子被一起考虑,划分成特定的几种模式。根据这些模式,1个、2个或3个比例因子和比例因子选择信息(每子带2比特)一起被传送。如果一个比例因子和下一个只有很小的差别,就只传送大的一个,这种情况对于稳态信号经常出现。使用这一算法后,和第1层相比,第2层传输的比例因子平均减少了2个,即传输码率由22.5Kb/s降低到了7.5Kb/s。 
比特分配
对每个子带计算掩蔽-噪声比MNR,是信噪比SNR信掩比SMR,即:MNR = SNRSMR 
使整个一帧和每个子带的总噪声-掩蔽比最小。这是一个循环过程,每一次循环使获益最大的子带的量化级别增加一级,当然所用比特数不能超过一帧所能提供的最大数目
1层一帧用4比特给每个子带的比特分配信息编码;而第2层只在低频段用4比特,高频段则用2比特 

数据帧格式

实验步骤

理解程序设计的整体框架

理解感知音频编码的设计思想

            两条线

            时-频分析的矛盾!

理解心理声学模型的实现过程 临界频带的概念 掩蔽值计算的思路

理解码率分配的实现思路

输出音频的采样率和目标码率

选择某个数据帧,输出该帧所分配的比特数、该帧的比例因子、该帧的比特分配结果

 代码分析

if(frameNum==50) 
{
   fprintf(output,"samplingrate=%.1fkhz\n",s_freq[header.version][header.sampling_frequency]);//采样率 
   fprintf(output,"bitrate=%d kbps\n",bitrate[header.version][header.bitrate_index]);//目标码率 
   fprintf(output,"framenum=%d\n",frameNum); 
   fprintf(output,"availablebitsnum=%d\n",adb);//可用比特数 
   fprintf(output,"Scale_Factor:\n");//比例因子 
   for(int k=0;k<nch;k++) 
   { 
       fprintf(output,"channel[%d]\n",k); 
       for(int i=0;i<frame.sblimit;i++) 
       { 
           fprintf(output,"subband[%d]:",i); 
           for(int j=0;j<3;j++) 
           { 
                fprintf(output,"%d\t",scalar[k][j][i]); 
           } 
           fprintf(output,"\n"); 
       } 
   } 
 
}
if(frameNum==50) 
{
   fprintf(output,"Bits_Allocation:\n");//比特分配 
   for(int k=0;k<nch;k++) 
   { 
       fprintf(output,"channel[%d]\n",k); 
       for(int i=0;i<frame.sblimit;i++) 
       { 
           fprintf(output,"subband[%d]:%d\n",i,bit_alloc[k][i]); 
             
       } 
   } 
}  
实验结果



  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值