如果我取max(abs(m)或max(m))有什么区别?

时间:2015-05-06 04:28:31

标签: algorithm encoding communication decoding pcm

如果我在Matlab中使用max(abs(m))max(m),其中m是脉冲编码调制中用于查找delta的语音信号,会有什么不同?

delta=2.0001*max(abs(m))/L and 
delta=2.0001*max(m)/L

1 个答案:

答案 0 :(得分:0)

我的评论总结回答(希望我能更加理解)

你有签名信号(可能有小的零偏差)

  • 因此您应该使用max(abs(m))
  • 以避免由于无效信号幅度计算引起的溢出错误
  • 即使信号是对称的也是如此
  • 让我们看看:
  • symmetrical signal example
  • 绿色区域实际上是处理过的音频缓冲区
  • 第一个示例显示了太小的缓冲区
  • 在这种情况下,即使使用max(abs(m))
  • ,您也可能会错过峰值
  • 结果是上下移动峰值
  • 导致错误地计算太低的位数/步长量化常数
  • 导致溢出和信号失真(声音中的毛刺和奇怪的回声或水下声音)
  • 第二个例子是足够大的缓冲区大小(至少有一个完整的carrior信号周期)
  • 在这种情况下对称信号max(m)应该有效,但你应该加上一些小差距,以确保
  • 如果存在任何零偏差,那么
  • 是粗略的,那么你被拧紧(除非你知道它的价值)
  • 红色,蓝色线表示获得的动态范围(没有缩放的delta)
  • 因此,您可以看到如果使用max(abs(m)),那么缓冲区大小可能是max(m)情况所需的一半(仅对于对称信号粗略)
  • 洋红色是红色+蓝色