Audio 在一定的高度范围内,什么是表示波形的好方法

Audio 在一定的高度范围内,什么是表示波形的好方法,audio,normalization,plot,data-visualization,waveform,Audio,Normalization,Plot,Data Visualization,Waveform,我很高兴从pcm数据中绘制波形到屏幕。我有一个问题,波形的高度有时会超过显示区域的高度 我如何确保波形绘图数据永远不会超过确定的高度,而不必翻阅整个pcm数据集并从找到的最大值进行归一化?不幸的是,如果不逐个采样并找到它,就无法发现信号的实际最大值 如果您知道PCM样本中的位数,则可以假定缩放范围为[-2^(bits-1),2^(bits-1)-1]。这将是信号能达到的绝对最高和最低值。然而,这是最悲观的缩放-例如,如果您的16位信号从未超出范围[-10241024],您将放弃大量显示区域(以及

我很高兴从pcm数据中绘制波形到屏幕。我有一个问题,波形的高度有时会超过显示区域的高度


我如何确保波形绘图数据永远不会超过确定的高度,而不必翻阅整个pcm数据集并从找到的最大值进行归一化?

不幸的是,如果不逐个采样并找到它,就无法发现信号的实际最大值

如果您知道PCM样本中的位数,则可以假定缩放范围为[
-2^(bits-1),2^(bits-1)-1]
。这将是信号能达到的绝对最高和最低值。然而,这是最悲观的缩放-例如,如果您的16位信号从未超出范围
[-10241024]
,您将放弃大量显示区域(以及ADC动态范围,但这是另一回事)


如果您愿意动态缩放信号,则可以在每次信号被剪裁时将图形缩放得更大。一种更复杂的方法是根据需要增加比例,但随着时间的推移,慢慢地将“最大比例”向下放宽。放松最大尺度的一个好方法是指数衰减,比如在每次迭代时将最大尺度乘以.98(或其他一些小于1的数字)。

使用规范化表示法正是您要做的


你可以作弊并预先计算给定范围内的最大值,如果这是实现提供的约束。

我对作弊没有任何问题:)你能给我一个简单的例子吗?@当然,这里有一个例子——你可能需要调整一些更适合你的实现的东西——你的应用程序如何呈现波形。如果您想要快速/欺骗规范化方案,您可以:1)确定要显示的采样数2)获取该数字并找到信号每个细分的最大绝对值3)将最大值保存在数组中4)使用最大值偏移正在显示的值的振幅。如果要显示这些切片的一部分,请使用两个切片中的最大值,但并不是每个绘图都能完全标准化。无需作弊。我将使用最大可能的音频级别“正常化”,例如16位音频:32768=1.0。然后-打印时-将其缩放到像素高度。x[n]=采样值[n]*像素高度;