11172_3_ANNEXD规范对扩散函数的介绍

 

11172_3_ANNEXD规范对扩散函数的介绍如下 :

The "Spreading Function"

 

Several points in the following description refer to the "spreading function".  It is calculated by the following method:

 

tmpx =1.05 (j-i ),

 

Where i  is the bark value of the signal being spread, j  is the bark value of the band being spread into, and tmpx  is a temporary variable.

 

x=8 minimum ((tmpx-0.5)2-2(tmpx-0.5),0)

 

Where x is a temporary variable, and minimum (a,b) is a function returning the more negative of a or b.

 

tmpy = 15.811389 +  7.5(tmpx+0.474) - 17.5(1.0+(tmpx+0.474)2)0.5

 

where tmpy is another temporary variable.

 

if (tmpy<-100) then {sprdngf (i,j)=0} else {sprdngf (i,j)=10(x+tmpy)/10 }

 

 

MP3将频域信号分成了63partition, 心理声学模型II的讨论基本上都是基于partition讨论的. partitioncritical band(23critical band)划分更细. 提供了更精确的频带分辨率.

假设已经分割好了63partition, 现在我们要获得这63partition的中心频率

#define partition_num 63 // 63partition

 

int cur_partition; // 当前焦点所在partitionindex.

// 各个partitionbark. 那么到底什么是bark? 先不理会, 我们就假设每个partition// 会有个bark用于衡量这个partition有多宽. 那么你可能立刻就想到难道bark是指这个

// partition的频宽吗!”. 不是, bark跟频宽有一定的关系, 我们就先假设bark就是这个

// partition的频宽好了.

// cbval[x]: xpartition频宽

int cbval[partition_num];

// 求各个partitionmedian bark.

for(cur_partition=0; cur_partition<partition_num; cur_partition++)

{

   //如何求各个partition? MP3制定了一个表, 要从该表中读取各

//partitionmedian bark. 暂时不讨论.

      cbval[cur_partition] = '获得各个partition的中心频率且先不讨论!';

}

那么, 现在我们已经得到了各个partition的中心频率了. 我们需要计算某个partition对其他62partition产生的影响(为了方便计算, 我们认为是某个partition对其他63partition的影响, 这个partition对自己的影响当然是0).

那么, 我们定义一个二维数组sprdngf[ partition_num ][ partition_num ];

int i, j;

for(i=0; i<partition_num; i++)

{

   for(j=0; j<partition_num; j++)

   {

      tmpx = 1.05 * (cbval[i] - cbval[j]);

     

      x = 8.0 * min( (tmpx-0.5)*(tmpx-0.5) - 2*(tmpx-0.5), 0 );

     

      tmpy = 15.81139

+ 7.5*(tmpx+0.474)

- 17.5*sqrt( 1.0+(tmpx+0.474)*(tmpx+0.474) );

     

      if(tmpy < -100)

         sprdngf[i][j] = 0;

      else

         sprdngf[i][j] = pow(10, (x+tmpy)/10);

   }

}

 

下面对扩散函数进行优化

int i, j;

double tmp1, tmp2;

for(i=0; i<partition_num; i++)

{

   for(j=0; j<partition_num; j++)

   {

      tmpx = 1.05 * (cbval[i] - cbval[j]);

     

      tmp1 = tmpx - 0.5;

      x = 8.0 * min( tmp1*tmp1 - 2*tmp1, 0 );

        

      tmp2 = tmpx + 0.474;

      tmpy = 15.81139 + 7.5*tmp2 - 17.5*sqrt(1.0+tmp2*tmp2);

     

      if(tmpy < -100)

      {

         sprdngf[i][j] = 0.0;

      }

      else

      { 

         sprdngf[i][j] = pow(10, (x+tmpy)/10);

      }

   }

}

至此, 扩散函数计算完毕.(以上讨论都是基于44.1KHz)

那么这里仍然留有一个疑问, median bark”到底是个什么东东? 之后再讨论

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值